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
Image in TDBGrid.Column anzeigen
Re: Image in TDBGrid.Column anzeigen
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;
Re: Image in TDBGrid.Column anzeigen
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
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;
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
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;
Re: Image in TDBGrid.Column anzeigen
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
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
Re: Image in TDBGrid.Column anzeigen
Gut.
Geht übrigens auch so, über den "Column" Parameter, ohne "TDBGrid( Sender ).DataSource":
Geht übrigens auch so, über den "Column" Parameter, ohne "TDBGrid( Sender ).DataSource":
Code: Alles auswählen
if (DataCol=0) and (Column.Field.DataSet.FieldByName('...