Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Image in Grid anzeigen: Problem (https://www.delphipraxis.net/44035-image-grid-anzeigen-problem.html)

Opa Knack 12. Apr 2005 12:32


Image in Grid anzeigen: Problem
 
Hallo,

über folgenden Code zeige ich in einem StringGrid eine Grafik in der ersten Spalte der ersten Zeile:

Delphi-Quellcode:
ImageList1.Draw(TempTable.Canvas, 0, 0, 0);
Um nun die erste Spalte der zweiten Zeile ebenfalls mit einer Grafik zu bestücken, habe ich folgendes probiert:

Delphi-Quellcode:
ImageList1.Draw(TempTable.Canvas, 0, 1, 0);
Ergebnis: Keines. Das Image wird immer noch nur in der ersten Spalte der ersten Zeile angezeigt.

Frage 1: Wie kann ich auch die zweite (dritte, vierte, ...) Zeile bestücken (natürlich hat das Grid auch eine zweite Zeile, daran kann es also nicht liegen)?

Frage 2: Wenn ich die Zeile, in der das Image liegt, markiere, wird das Image in den Hintergrund verschoben und die komplette Zeile (ohne Grafik) markiert. Wie kann ich es zu einem "festen Bestandteil" der Zeile machen?

Danke
Opa

Khabarakh 12. Apr 2005 12:49

Re: Image in Grid anzeigen: Problem
 
Der 2. und 3. Parameter ist jeweils eine Pixelangabe, bei einem Pixel Verschiebung sieht man natürlich keinen Unterschied.
Damit das Bild immer angezeigt wird, würde ich OnDrawCell verwenden:
Delphi-Quellcode:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (ACol = 1) and (ARow = 2) then //oder welche auch immer
    ImageList1.Draw(DrawGrid1.Canvas, Rect.Left, Rect.Top, 0);
end;

Opa Knack 12. Apr 2005 13:23

Re: Image in Grid anzeigen: Problem
 
Hallo,

Danke für die schnelle Antwort.

Jetzt stellt sich mir natürlich die Frage, wie ich das dann für die einzelnen Zeilen hinbekomme. Gibt es eine andere Möglichkeit, als den zweiten Parameter jedesmal um 16 zu erhöhen, um die Zeile zu treffen, in der die Grafik dann angezeigt werden soll (sprich: Wenn die Zeile die dritte ist, einfach die Zeilenhöhe * 3 zu rechnen)?

Wie kann ich OnDrawCell verwenden? Ich füge dem Grid eine neue Zeile hinzu bzw. lese verschiedene aus einer Ini-Datei ein, und anschließend soll die Grafik eingebunden werden.

Danke
Opa

Nogge 12. Apr 2005 13:27

Re: Image in Grid anzeigen: Problem
 
Zeilenhöhe = StringGrid.DefaultRowHeight

Khabarakh 12. Apr 2005 13:53

Re: Image in Grid anzeigen: Problem
 
Die Lösung steht schon in meinem Quellcode: Der Parameter Rect gibt die Position und Ausmaße der zu zeichnenden Zelle an.

Für die Einträge würde ich es so machen:
Delphi-Quellcode:
Indizes: Array of Integer; //Jeweiliger Index der ImageList

//Neue Zeile:
  DrawGrid1.RowCount := DrawGrid1.RowCount + 1;
  SetLength(Indizes, Length(Indizes));
  Indizes[High(Indizes)] := Ini.ReadInteger(...);

//OnDrawCell

begin
  if ACol = 0 then // nur 1. Spalte
    ImageList1.Draw(DrawGrid1.Canvas, Rect.Left, Rect.Top, Indizes[ARow]);
end;

Opa Knack 12. Apr 2005 14:05

Re: Image in Grid anzeigen: Problem
 
Hallo,

Danke für die Antworten.

Ich glaube, ich hab's verstanden :dancer:

Opa


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz