So, I am using ZEOSDBO and SQLITE3
Zconnection --> ZQuery --> Datasource --> DBGrid
I have a global variable bKeyDown
procedure TForm1.DBGrid1KeyDown(Sender : TObject; var Key : Word;
Shift : TShiftState);
begin
bKeyDown := true;
end;
procedure TForm1.DBGrid1KeyUp(Sender : TObject; var Key : Word;
Shift : TShiftState);
begin
bKeyDown := false;
Key := 0;
DataSource1DataChange(nil, nil);
end;
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
iTemp : integer;
begin
if bKeyDown then exit;
if ZQuery1.RecordCount < 1 then
begin
Image1.Picture.Clear;
exit;
end;
iTEMP := ZQuery1['fnIDX'];
LoadLogo(iTemp);
end;
procedure TForm1.LoadLogo(AIDX : integer);
var
MyStream : TMemoryStream;
MyImage : TFreeWinBitmap;
MyQuery : TZQuery;
sSQL : string;
begin
sSQL := ' SELECT fnIMAGE FROM tnLOGOS' +
' WHERE fnSTATION_IDX = :Param1';
MyQuery := TZQuery.Create(self);
MyQuery.Connection := ZConnection1;
MyQuery.SQL.Clear;
MyQuery.SQL.Add(sSQL);
MyQuery.ParamByName('Param1').AsInteger := AIDX;
MyQuery.Open;
if MyQuery.RecordCount < 1 then
begin
MyQuery.Free;
exit;
end;
MyImage := TFreeWinBitmap.Create(FIT_BITMAP);
MyStream := TMemoryStream.Create;
TBlobField(MyQuery.FieldByName('fnIMAGE')).SaveToStream(MyStream);
MyStream.Position := 0;
MyImage.LoadFromStream(MyStream);
MyStream.Free;
//MyImage.ConvertToGrayscale;
Image1.Picture.Bitmap.Handle := MyImage.CopyToBitmapH;
MyImage.Free;
MyQuery.Free;
end;
LoadLogo loads a blob (webp) and displays it in a TImage.
The DBGrid only scrolls away after the call to LoadLogo and I can't figure out why.
The erroneous scrolling only happens occasionally.