![]() |
StringGrid: Aktion beim Zellenanklicken
Hallo!
Ich würde gerne eine Simulation programmieren und bräuchte dazu vorerst ein Gitterfeld, dass, wenn man ein Feld anklickt, in diesem Feld die Farbe ändert. Ich hatte es mit StringGrid versucht und dabei bin ich auf das Problem gestoßen, dass ich zwar Zellen durch Canvas.Pixels[x,y]:=TColor; färben kann, aber es nicht schaffe, dass sie sich erst färbt, wenn ich auf die Zelle klicke! Wenn so eine Aktion nicht möglich ist hat jemand vielleicht eine andere Idee, wie man das realisieren könnte (durch die andere Komponente vielleicht). LG Freaky |
Re: StringGrid: Aktion beim Zellenanklicken
Das lässt sich mit einen StringGrid durchaus lösen.
Jede Zelle des StringGrid muss aber zusätzlich zum Text eine Information (Farbe) tragen. Diese Info kann man nun im Text der Zelle selbst unter bringen oder im Property Objects[].
Delphi-Quellcode:
Du brauchst jetzt du die Zellen mit einem '*' zu belegen und sie werden rot.
// StringGrid.DefaultDrawing auf False setzen
// OnDrawCell - Handler procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var celltext:string; canvas : TCanvas; color : TColor; begin celltext := StringGrid1.Cells[Acol, ARow]; Canvas := StringGrid1.Canvas; if (ACol >= StringGrid1.FixedCols) and (ARow>= StringGrid1.FixedRows) then begin color := clGreen; if celltext = '*' then color := clRed end else color := clBtnface; // Hintergrund zeichnen Canvas.Brush.Color := color; Canvas.FillRect(Rect); // Text ausgeben DrawText(Canvas.Handle, PChar(celltext), Length(celltext), Rect, DT_SINGLELINE); end; |
Re: StringGrid: Aktion beim Zellenanklicken
Hey,
danke für die Antwort, hat geklappt. Nur noch ne Frage, damit ich besser versteh wieso das funktioniert.. :gruebel: :-D onDrawCell heißt in meinem Buch, tritt ein, wenn die Zelle neu gezeichnet werden muss, bedeutet dass immer, wenn man was an der Zelle verändert tritt die Aktion ein? Und wieso fräbt er bei dieser Anweisung nicht die komplette StringGrid, sondern nur die ausgewählte Zelle? Danke jetzt schon Freaky! |
Re: StringGrid: Aktion beim Zellenanklicken
Zitat:
* der Inhalt der Zelle wurde verändert wurde * Das StringGrid oder Teile davon aufgedeckt werden, nachdem es von einem anderen Fenster verdeckt wurde * das StringGrid und/oder sein Parent (das Form auf dem es liegt) sichtbar geworden sind. Zitat:
das gesamte Stringgrid (StringGrid1.Color :=...). |
Re: StringGrid: Aktion beim Zellenanklicken
Hallo,
ich hätte zu diesem Thema auch ne Frage: Ich würd gern das gleiche machen, also beim Klick auf eine Zelle diese farbig ändern. Tests mit OnSelectCell haben leider nichts gebracht. Hier mein momentaner Code:
Delphi-Quellcode:
Den "TRick" mit eintragen eines Zeichens in die Zelle und dann das decodieren der Farbe der Zelle im OnDrawCell kenn ich, aber ginge das nicht einfach auch mit OnSelectRect?
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean); var r: TRect; begin with StringGrid1 do begin r := CellRect(ACol, ARow); If Canvas.Brush.Color = clBlue then Canvas.Brush.Color := clRed else Canvas.Brush.Color := clNavy; Canvas.FrameRect(R); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 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