![]() |
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 |
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:
Ich hoffe es hilft dir.
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; MfG Luki |
Re: kleine Frage zum Stringgrid
naja, soweit schon gar nicht schlecht..., nur jetzt noch eine Frage kann man diese ondraw-ereignis auch abschalten?
|
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 |
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=? |
Re: kleine Frage zum Stringgrid
hallo
füge einfach nach dem fillRect Befehl noch folgenden Befehl ein, welcher den Text ausgibt:
Delphi-Quellcode:
Sorry, habe im ersten Ansatz nicht an den Text gedacht...
StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
MfG Luki |
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 |
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:
MfG
dy := (Rect.Bottom-Rect.Top-StringGrid1.Canvas.TextHeight(StringGrid1.Cells[ACol, ARow])) div 2;
Luki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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 by Thomas Breitkreuz