Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   kleine Frage zum Stringgrid (https://www.delphipraxis.net/26356-kleine-frage-zum-stringgrid.html)

Robb 22. Jul 2004 14:11


kleine Frage zum Stringgrid
 
Hi Leute,

ich bin gerade dabei meine Touringmaschine zuende zu proggen und habe nun ein Problem mit der Visualisierung meiner Simualtion. Ich möchte in meinem stringgrid eine bestimmte Zelle einfärben können und zwar nur eine Zelle, nur irgenwie bin ich noch nicht dahinter gekommen, wie man das möglichst einfach löst.
Vielen Dank schon mal im voraus :-D
mfg Robb

memphis 22. Jul 2004 14:25

Re: kleine Frage zum Stringgrid
 
hallo

das TStringgrid besitzt ein Event mit dem Namen OnDrawCell. Es wird immer dann ausgelöst, wenn eine Zeile gezeichnet wird. Ihm wird neben den Indexen (für Spalte und Zeile) auch der Bereich der Zelle in Form eines TRect's übergeben.

Folgendes Beispiel füllt die Zelle(1,1) rot.

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (ACol=1) AND (ARow=1) then
  begin
    StringGrid1.Canvas.Brush.Color := clRed;
    StringGrid1.Canvas.FillRect(Rect);
  end;
end;
Ich hoffe es hilft dir.

MfG
Luki

Robb 22. Jul 2004 14:33

Re: kleine Frage zum Stringgrid
 
naja, soweit schon gar nicht schlecht..., nur jetzt noch eine Frage kann man diese ondraw-ereignis auch abschalten?

memphis 22. Jul 2004 14:43

Re: kleine Frage zum Stringgrid
 
hallo

In wiefern meinst du abschalten?
dies ist ein Ereignis wie beispielsweise onpaint von TForm und wird immer dann ausgelöst, wenn die Komponente neugezeichnet wird. Wenn du eine Zelle nur zu einem gewissen Zeitpunkt einfärben willst, kannst du dies einfach über eine Status-Variable lösen. Ist sie auf true wird gezeichnet, bei false nicht. Diese Variable musst du dann in die Zellenabfrage miteinbeziehen.

ich hoffe ich hab dich richtig verstanden.

MfG
Luki

Robb 22. Jul 2004 14:46

Re: kleine Frage zum Stringgrid
 
Hmm, also ich habe das mal mit deinem Ansatz versucht nur habe ich jetzt das Problem, das ich auf dem Feld das farbig sein soll auch eine Info habe, die mit angezeigt werden muss und die wird nun von der Farbe überdeckt. :?
kann man das irgendwie Transparent machen=?

memphis 22. Jul 2004 14:52

Re: kleine Frage zum Stringgrid
 
hallo

füge einfach nach dem fillRect Befehl noch folgenden Befehl ein, welcher den Text ausgibt:
Delphi-Quellcode:
StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
Sorry, habe im ersten Ansatz nicht an den Text gedacht...

MfG
Luki

Robb 22. Jul 2004 15:05

Re: kleine Frage zum Stringgrid
 
jojo,

sieht sehr schön aus, nur das ich es nicht hinkriege über die x,y Koordinaten des Textouts das Zeichen genau mittig zu treffen, die x-koordinate ist okay, aber bei der y-koordinate ist das ein wenig verschoben.... und da
ich schon ein paar integer-werte auf die y-koordinate raufgerechnet habe, finde ich einfach nicht die mitte.
Wenn du auch hier eine Antwort wüsstest, dann wäre ich sehr dankbar^^.
willst du ein Tester meines Programms sein^^..., ich brauche noch einige damit ich das Vordiplom auch bekomme^^

mfg Robb

memphis 22. Jul 2004 15:16

Re: kleine Frage zum Stringgrid
 
hallo

Das TCanvas besitzt auch eine Methode TextHeight bzw. TextWidth welche die Höhe bzw. die Breite des übergebenen Texts liefert. Hiermit ist es nun möglich eine fast exakte Position zu berechnen.

Den Integerwert, den man beispielsweise zu rect.top addiert, müsste folgendermaßen zu berechnen sein:

Delphi-Quellcode:
dy := (Rect.Bottom-Rect.Top-StringGrid1.Canvas.TextHeight(StringGrid1.Cells[ACol, ARow])) div 2;
MfG
Luki


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