Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid Zelle einfärben (https://www.delphipraxis.net/122305-stringgrid-zelle-einfaerben.html)

zorakh 13. Okt 2008 15:54


StringGrid Zelle einfärben
 
Ich habe ein StringGrid und möchte gerne einzele Zellen einfärben. Ich will das ganze letzendlich so einbauen, dass ich eine Funktion bekomme nach diesem Schema:

ColorCell(StringGrid1,1,1,clred);

Ich muss halt im Programmablauf die Zellen farbig unterlegen.

Ich habe das hier als Beispiel gefunden:

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with TStringGrid(Sender).Canvas do begin
       if (ACol=1) and (ARow=1) then begin
          Brush.Color:= clRed;
          FillRect(Rect);
       end;
  end;
end;
Aber leider verstehe ich es nciht wirklich und dann möchte ich es nciht benutzen. Kann mir einer ein wenig erläutern wie es funktioniert, was z.B. in die Parameter rein müsste und wie ich es in meine Form bringen könnte?!


Vielen Dank
zorakh

DeddyH 13. Okt 2008 15:57

Re: StringGrid Zelle einfärben
 
Markiere das StringGrid einmal in der IDE, wechsel im OI auf "Ereignisse" und mach dort einen Doppelklick auf "OnDrawCell". Schon hast Du die Parameter ;) Und zumindest in älteren Delphi-Versionen ist dieses Ereignis auch gut in der Hilfe beschrieben.

zorakh 13. Okt 2008 16:06

Re: StringGrid Zelle einfärben
 
Wann findet denn dieses Ereigniss immer statt?
Weil es nützt mir wiegsagt ncihts, wenn das nur einmal passiert.

Außerdem noch nebenbei;
Wenn sich das Ereigniss jetzt ein 2. mal mit anderen Koordinaten ausführen würde wäre dann die 1,1 Zelle wieder weiß? nein oder?

SaFu 13. Okt 2008 16:07

Re: StringGrid Zelle einfärben
 
Schaumal hier

Gruss Sascha

zorakh 13. Okt 2008 16:34

Re: StringGrid Zelle einfärben
 
In dem Link konnte ich jetzt die Antwort auf meine beiden Fragen(Der Post über diesem) leider auch nciht erspähen?!
Kann mir dazu jemand noch etwas sagen?

DeddyH 13. Okt 2008 16:59

Re: StringGrid Zelle einfärben
 
Das Ereignis wird ausgelöst, wenn eine Zelle neu gezeichnet werden muss, weil sich z.B. der Text geändert hat. Und ob die vorherige Zelle weiß wird oder nicht, liegt in Deiner Hand, wenn Du selbst zeichnest.

zorakh 13. Okt 2008 17:43

Re: StringGrid Zelle einfärben
 
Udn wie löse ich das Ereigniss manuell aus?

Stringgrid1.OnDrawCell geht nciht. Nicht genug Parameter

zorakh 13. Okt 2008 17:57

Re: StringGrid Zelle einfärben
 
Zusätlich zum manuell auslösen gibt es noch ein Problem.
Nämlich werden alle Ereignisse blockiert. Ich habe:
Delphi-Quellcode:
procedure TForm1.TabelleDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin

  with TStringGrid(Sender).Canvas do begin
       if (ACol=0) and (ARow=0) then begin
        If Colormod='clwhite' then
         Brush.Color:=clwhite
         else
          Brush.Color:= clRed;
          end;
          FillRect(Rect);
       end;

  end;
und

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var S1,S2:integer;
begin
Colormod:='clred';
Feldmase:=10;
SetLength(Feld,Feldmase,Feldmase);
SetLength(Feld2,Feldmase,Feldmase);
ConfigField();
for S1:=0 to (feldmase-1) do begin
Tabelle.Cells[S1,0]:='X';
Tabelle.Cells[S1,(feldmase-1)]:='X';
Tabelle.Cells[0,S1]:='X';
Tabelle.Cells[(feldmase-1),S1]:='X';
end;
[...]
Benutze ich das Ereigniss unter OnDrawCell nciht so werden die X-Zeichen eingezeichnet. So sehe ich aber nur ein rotes Feld und das wars...

Wie kann das sein?

zorakh 13. Okt 2008 19:42

Re: StringGrid Zelle einfärben
 
Weiß niemand warum das den Programmablauf stoppt?

_frank_ 14. Okt 2008 01:52

Re: StringGrid Zelle einfärben
 
was wird gestoppt?

du prüfst auf row=0 und col=0 danach dein eigener zeichencode...also färbst du auch nur die eine zelle rot bzw. weiß, alles andere wird nicht gezeichnet...der Zelltext wird deshalb nicht angezeigt, weil du ihn nicht zeichnest :) mit dem fillrect übermalst du alles in der Zelle und musst den Text neu zeichnen (TCanvas.Textout).
weiterhin ist dein colormod nur global gültig und nicht pro zelle, was evtl. gewünscht ist.
um zu speichern, welche zelle welche farbe haben soll, kannst du das Objects-property verwenden. dort kannst du pro zelle ein Objekt (oder einen auf TObject gecasteten Integer :) ) hinterlegen.je nachdem wieviele Infos du pro zelle benötigst, musst du deine Wahl diesbezüglich treffen...

HTH Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Seite 1 von 2  1 2      

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