Image in TDBGrid.Column anzeigen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Image in TDBGrid.Column anzeigen

Beitrag von Lorca »

Hallo zusammen, :)

ich möchte gerne aus einer TImageList ein Bild in einer TDBGrid-Spalte anzeigen.
Die Daten kommen aus SQLite3.
Abhängig vom Boolschen Wert eines Feldes (True ) in der Tabelle, möchte ich nun ein Bild aus der TImageList anzeigen, oder wenn der Wert False ist, dann kein Bild anzeigen.
Kann jemand erklären wie dies gemacht wird?

Viele Grüße
Lorca :)

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Image in TDBGrid.Column anzeigen

Beitrag von theo »

Würde ich mal ansatzweise so versuchen:

Code: Alles auswählen

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var ABmp:TBitmap;
begin
  if Column.Field.AsString='Mars' then //Irgendeine Bedingung
  begin
   ABmp:=TBitmap.Create;
   ImageList1.GetBitmap(0, ABmp);
   TDBGrid(Sender).Canvas.Brush.Color:=clWhite;
   TDBGrid(Sender).Canvas.FillRect(Rect);
   TDBGrid(Sender).Canvas.Draw(Rect.Left,Rect.Top,ABmp);
   ABmp.free;
  end;
end;  

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Image in TDBGrid.Column anzeigen

Beitrag von Lorca »

Hallo zusammen, hallo lieber theo, :)

herzlichen Dank für Deine nette Antwort.
Es klappt, jedoch nur für die erste Zeile in der TDBGrid
Alle anderen werden leer angezeigt,
Der Parameter Rect, hat jedes mal den gleichen Inhalt,
(TRect (Left = 15; Top = 25; Right = 55; Bottom = 50; TopLeft = TPoint (15; 25); BottomRight = TPoint (55; 50); Vector = (15, 25, 55, 50)))

Will sagen es wird nicht auf die aktuelle Zeile angewendet, sondern nur auf die erste Datenzeile.

Was muss ich tun, damit es auf jede Zeile angewendet wird?



Viele Grüße
Lorca :)
Picture_Grid.PNG
Picture_Grid.PNG (7.13 KiB) 4401 mal betrachtet
PROCEDURE Tform1.Dbgrid1_Draw_Column_Cell ( Sender: Tobject; CONST Rect: Trect; Datacol: Integer; Column: Tcolumn; State: Tgriddrawstate ) ;
VAR lv_i : Integer; mo_Bmp : TBitmap;
BEGIN
IF Datacol <> 0 THEN EXIT;
IF NOT TDBGrid( Sender ).DataSource.DataSet.FieldByName( 'FLG_Audio').AsBoolean THEN EXIT;

mo_Bmp := TBitmap.Create;
ImageList.GetBitmap( 0, mo_Bmp );
TDBGrid(Sender).Canvas.Brush.Color := clInfoBk;
TDBGrid(Sender).Canvas.FillRect( Rect );
TDBGrid(Sender).Canvas.Draw( Rect.Left, Rect.Top, mo_Bmp);
mo_bmp.Free;
End;

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Image in TDBGrid.Column anzeigen

Beitrag von Lorca »

Hallo zusammen, Hallo theo, :)

ich bitte um Verzeihung.
Das liegt an meiner Abfrage, IF NOT TDBGrid( Sender ).DataSource.DataSet.FieldByName( 'FLG_Audio').AsBoolean THEN EXIT

Bitte vielmals um Entschuldigung das ich euch mit meiner Gedankenlosigkeit belästigt habe.

Viele Grüße
Lorca :)

Benutzeravatar
theo
Beiträge: 10500
Registriert: Mo 11. Sep 2006, 19:01

Re: Image in TDBGrid.Column anzeigen

Beitrag von theo »

Gut.
Geht übrigens auch so, über den "Column" Parameter, ohne "TDBGrid( Sender ).DataSource":

Code: Alles auswählen

  if (DataCol=0) and (Column.Field.DataSet.FieldByName('...    

Antworten