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/)
-   -   Stringgrid: bestimmte Zeile färben (https://www.delphipraxis.net/159877-stringgrid-bestimmte-zeile-faerben.html)

michaelarban 16. Apr 2011 19:40

Stringgrid: bestimmte Zeile färben
 
Hallo Leute,

auf die Gefahr, dass ihr mich steinigt, weil ich eurer Meinung nach nicht gegoogelt habe; aber ich habe es gemacht, aber nichts passendes gefunden, obwohl mein Problem ziemlich simpel ist:

Ein User soll in einer Edit-Feld eine Zeilennummer (z.B: 4) eingeben, dann auf ein Button klicken und im Stringgrid wird die 4.Zeile rot markiert .

Zwar habe ich oft gelesen, dass es die Funktion "OnDrawCell" gibt, aber ich weiss nicht, wie ich sie aufrufen soll:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);

--> wie rufe ich diese Fubnktion auf? was kommt als Parameter Rect? was ist State?


danke

haentschman 16. Apr 2011 19:49

AW: Stringgrid: bestimmte Zeile färben
 
Hallo...

Zitat:

wie rufe ich diese Fubnktion auf?
...die Funktion wird aufgerufen, wenn eine Zelle, warum auch immer, neu gezeichnet wird. Das Zeichnen kann man z.B. durch Repaint erzwingen.
Zitat:

was kommt als Parameter Rect?
...ist das Rechteck deiner Zelle als Koordinaten...falls du selbst drin rummalen möchtest.
Zitat:

was ist State?
gdSelected
Die Zelle ist aktuell ausgewählt.
gdFocused
Die Zelle hat den Eingabefokus.
gdFixed
Die Zelle befindet sich im fixierten Bereich des Gitters.
gdRowSelected
Die Zeile ist ausgewählt.
gdHotTrack
Die Zelle wird hervorgehoben, wenn der Mauszeiger darüber bewegt wird.
gdPressed
Auf die Zelle wird geklickt.
...aus der Delphi Hilfe

michaelarban 16. Apr 2011 20:02

AW: Stringgrid: bestimmte Zeile färben
 
Hi,

danke für die antwort.


rufe ich innerhalb des ButtonClicks diese Funktion so auf?

procedure TForm1.btnFaerbeZeileClick(Sender: TObject);
begin

StringGrid1DrawCell(StringGrid1, 0,4, Rect: TRect; State: TGridDrawState);

end;

was schreibe ich für Rect ?

State: keines der von dir unten geschriebenen Zustände trifft zu, da der User die Zeil nicht vorher anklickt, sondern eine 4 in ein Edit-Feld einträgt.

Luckie 16. Apr 2011 20:09

AW: Stringgrid: bestimmte Zeile färben
 
Benutze doch einfach mal die Suche.

Hansa 17. Apr 2011 00:34

AW: Stringgrid: bestimmte Zeile färben
 
Hi,

Zitat:

Zitat von michaelarban (Beitrag 1095601)
Hallo Leute,

auf die Gefahr, dass ihr mich steinigt, weil ich eurer Meinung nach nicht gegoogelt habe;

Das ist Neudeutsch, aber das hier nicht :
Zitat:

Zitat von Luckie (Beitrag 1095605)
Benutze doch einfach mal die Suche.

:mrgreen:

mkinzler 17. Apr 2011 11:57

AW: Stringgrid: bestimmte Zeile färben
 
Rect ist das Rechteck, dass neu gezeichnet werden soll.
Aber ich glaube du hast das System nicht verstanden. Diese Funktion musst nicht du aufrufen, sondern musst diese implementieren.
Sie wird dann ( für jede Zelle) aufgerufen.
In den Parametern werden dir dann die Werte der aktuellen ( zu zeichnenden) Zelle übergeben.

s-off 17. Apr 2011 19:48

AW: Stringgrid: bestimmte Zeile färben
 
Schau Dir mal diese Unit an - da gibt es einige Beispiele; vielleicht kannst Du irgendetwas davon gebrauchen.

Hinweis zur Beispielanwendung: fast alle Funktionalitäten aus dem Kontextmenü lassen sich nur dann anwenden, wenn eine Zelle 'spezialisiert' worden ist (erster Menüpunkt).

kanita 19. Dez 2014 09:44

AW: Stringgrid: bestimmte Zeile färben
 
Oder man nimmt gleich (Application.)MessageBox, die passt sich im Aussehen wenigstens der Windows-Version an und man kann auch da den Standard-Button setzen.

Headbucket 19. Dez 2014 12:15

AW: Stringgrid: bestimmte Zeile färben
 
Um das niedergeschriebene mal mit einem simplen Beispiel zu belegen:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (ARow <> DrawCellIndex) then
    stringgrid1.Canvas.Brush.Color := clWhite
  else
    stringgrid1.Canvas.Brush.Color := clGreen;

  stringgrid1.Canvas.FillRect(Rect);
end;
Wird dein Button geklickt, dann wird in die Variable DrawCellIndex die betreffende Zeile geschrieben. Danach z.B. einfach "Refresh" des Stringgrids aufrufen.

Sollte eigentlich funktionieren.

Grüße
Headbucket


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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