![]() |
TstringGrid Problem
Hi,
ich habe jetzt eine Stunde lang nach einer lösung gesucht, aber nix gefunden/verstanden. Ich habe ein Tstringgrid und möchte ein kleines Bildchen in eine Zelle reinsetzen..... geht das? Wenn ja WIE?? Wenn das nicht geht dann könnte ich das auch mit dem Zellenhintergrund umgehen. Ich weiß dass man den Hintergrund einer einzelnen Zelle mit ondrawcell verändern kann. Das habe ich aber auch nicht hinbekommen, da ich das nicht verstanden habe, was ich gecodet habe :P .... Könnt ihr mir helfen? Mit einem kleinen Bildchen in einer zelle wäre es am einfachsten...... Mfg DonMarkus |
Re: TstringGrid Problem
Du kannst dazu die Objects-Eigenschaft verwenden. Schau mal in die Hilfe.
|
Re: TstringGrid Problem
Ja das könnte gehen. Aber wie kann ich ein gif bildchen IN das Programm einbinden und dort dann aufrufen?
|
Re: TstringGrid Problem
Einfach in eine Imagelist laden.
![]()
Delphi-Quellcode:
Du musst die Images (keine Gifs, besser BMPs) zur Entwurfzeit in die Imagelist laden und im OnDrawCell die entsprechnde ID angeben.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); var bm: TBitmap; begin if Sender <> NIL then with Sender as TStringGrid do begin bm := TBitmap.Create; try ImageList1.GetBitmap(0, bm); //statt 0 müsste man hier einen entsprechenden Index angeben Canvas.Draw(Rect.Left + 5, Rect.Top + 5, bm); finally FreeAndNil(bm); end; end; end; Gruß René |
Re: TstringGrid Problem
Hallo! Danke für den Tipp. Genau das habe ich gesucht!
Ich verstehe nur noch 2 sachen im quelltext nicht: <<if Sender <> NIL then with Sender as TStringGrid do>> <<Canvas.Draw(Rect.Left + 5, Rect.Top + 5, bm); finally FreeAndNil(bm); >> Kannst du mir erklären was Delphi da genau macht und für was das gut ist? Mfg Donmarkus |
Re: TstringGrid Problem
Na erstmal prüf ich, ob der Prozedur ein Sender übergeben wurde - bei manuellem Aufruf kann der fehlen, aber eigentlich kannste das auch weglassen.
Dann caste ich den Sender als TStringgrid, da Sender ja TObject ist. mit Canvas.Draw wird das Bild gemalt und finally gehört zum Create von bm, also
Delphi-Quellcode:
bm := TBitmap.Create; //Bitmap erstellen
try ... finally FreeAndNil(bm); //Zum Schluss Bitmap wieder freigeben end; |
Re: TstringGrid Problem
ok gut danke!
Wo kann ich dann angeben in welche zelle er das Bild reinmachen soll? und beim kompilieren kommt folgender fehler: [Error] Unit1.pas(71): E2250 There is no overloaded version of 'Rect' that can be called with these arguments DANKE! |
Re: TstringGrid Problem
Zitat:
Grüße Klaus |
Re: TstringGrid Problem
aha? und wie mache ich das?
|
Re: TstringGrid Problem
Zitat:
Grüße Klaus |
Re: TstringGrid Problem
Hallo Klaus,
der Typ TRect wird schon gefunden, da die Unit Windows eingebunden ist. Interessant wäre den fehlerhaften Aufruf von Rect() in Zeile 71 (wie vom Compiler gemeldet) zu sehen. Freundliche Grüße |
Re: TstringGrid Problem
Liste der Anhänge anzeigen (Anzahl: 1)
vielleicht hilft das
|
Re: TstringGrid Problem
also habe jetzt "Types" eingebuden. Nun kommt eine andere Fehlermeldung: "not enough parameters" ->
Canvas.Draw(Rect.Left + 5, Rect.Top + 5, bm); Wisst ihr weiter? |
Re: TstringGrid Problem
Hallo Markus,
die Zeile für sich genommen ist in Ordnung. Du musst mal den Kontext (die Funktion oder Prozedur) zeigen. Markiere die fehlerhafte Zeile mit einem Zeilenendekommentar. Und zeige auch deine Uses-Klausel. Freundliche Grüße |
Re: TstringGrid Problem
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, ImgList,Types, Menus;
Code:
wie gesagt will ich in eine Zelle ein kleines bildchen einfügen.Eine Imagelist habe ich erstellt.
procedure TMines.Button1Click(Sender: TObject);
var bm: TBitmap; begin if Sender <> NIL then with Sender as TStringGrid do begin bm := TBitmap.Create; try ImageList1.GetBitmap(0, bm); Canvas.Draw(Rect.Left + 5, Rect.Top + 5, bm); //hier kommt die oben genannte fehlermeldung finally FreeAndNil(bm); end; end; end; |
Re: TstringGrid Problem
Mensch Markus,
hast du nicht bemerkt, dass dir René in Beitrag #4 den Code für das Ereignis OnDrawCell() gezeigt hat? Du kannst diesen Code nicht einfach in die ButtonClick() Prozedur einbauen. Freundliche Grüße |
Re: TstringGrid Problem
Hallo donmarkus,
ich hoffe, dass klingt jetzt nicht oberlehrerhaft. Aber wie wärs, erstmal mit etwas einfachem anzufangen. Ich meine, das Ondraw-Ereignis einer Componente abzufangen und mit Canvas zu zeichnen ist ja nicht grad das kleine 1x1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz