![]() |
StringGrid DrawText: über PopUpMenu Farbe ändern
Hallo Gemeinde,
Folgendes habe ich vor: in einem StringGrid werden verschiedene Daten abgebildet. Der Nutzer soll nun via Popup-Menu beim Click auf eine Zelle die Farbe dieser ändern können. Bisher habe ich folgendes:
Delphi-Quellcode:
Nach dem Start kann ich nun das besagte Menu öffnen und die Farbe wählen.
Procedure PM_Fert_FT(Sender:TObject);
var oldFontCol:Tcolor; oldBrush:TColor; ACol,ARow:integer; aRect:TRect ; aStr:String; Begin with mainform do Begin oldFontCol:=STGRP_Fert_FT.Canvas.Font.Color; oldBrush:=STGRP_Fert_FT.Canvas.Brush.Color ; aRect:=Rect(ACol,ARow,ACol,ARow); aStr:=STGRP_Fert_FT.Cells[ACol,ARow]; case TMenuItem(Sender).Tag of 0:Begin ACol:=STGRP_Fert_FT.Col; ARow:=STGRP_Fert_FT.Row; STGRP_Fert_FT.Canvas.Brush.Color :=clMoneyGreen ; STGRP_Fert_FT.Canvas.FillRect(aRect); End; end; DrawText(STGRP_Fert_FT.Canvas.Handle,PChar(aStr), length(aStr), aRect,DT_CENTER or DT_VCENTER or DT_SINGLELINE); STGRP_Fert_FT.Canvas.Font.Color:=oldFontCol; STGRP_Fert_FT.Canvas.Brush.Color:=oldBrush; end; end; Leider bekomme ich es nicht hin, dass die gewählte Farbe auch tatsächlich eingezeichnet wird. Liegts am Code? Sollte doch soweit OK sein... MFG Steffen EDIT: STGRP_Fert_FT ist das Grid, PM_Fert_FT entsprechend das Menu |
Re: StringGrid DrawText: über PopUpMenu Farbe ändern
Zitat:
Schau dir mal im Debugger ARect an, wenn du auf dem Aufruf von FillRect stehst. Schaut für meine Augen ziemlich uninitialisiert aus. |
Re: StringGrid DrawText: über PopUpMenu Farbe ändern
Hmm, wer ruft wann die Procedure "PM_Fert_FT" auf? Muss das nicht im OnDraw-Event des Grids erfolgen??
Gruß |
Re: StringGrid DrawText: über PopUpMenu Farbe ändern
@uligerhardt: Stimmt, steht Quatsch drin. Ich habe nur absolut keine Ahnung, wie ich es besser machen könnte.
@pstruh: Die Procedure "PM_Fert_FT" ist mit dem OnClick-Ereignis des Popup-Menus verbunden. MFG Steffen |
Re: StringGrid DrawText: über PopUpMenu Farbe ändern
Aber dann wird doch deine Änderung (so sie überhaupt erfolgt) beim nächsten Neuzeichnen des Grids ohnehin überschrieben?!Ich würd' das anders machen: PopUp setzt Flag (bzw. die neuen Farben), diese Information wird beim nächsten OnDraw vom Grid für das Neuzeichenen verwendet - oder???
|
Re: StringGrid DrawText: über PopUpMenu Farbe ändern
Mmmmh, bin auch grad schwer am überlegen, ob das alles so gut war..
Was noch hinzukommt ist, dass die Farbinformationen in ner DB abgelegt werden soll. Will heißen, dass die Farbinformationen von der 1. Spalte, der 1. Zeile und der DB abhängen...klingt wirr...isses auch. Kann man das Neuzeichnen des Grids irgendwie veranlassen? Meine mal was gelesen zu haben (Wort mit i) komme aber nicht drauf... Ich probier das mal nach deiner Version und melde mich nochmal... MFG Steffen |
Re: StringGrid DrawText: über PopUpMenu Farbe ändern
Das gesamte Grid würde mit GridName.Refresh neu gezeichnet. Wenn es nur eine bestimmte Zelle sein soll: einfach den Zellinhalt neu zuweisen!
|
Re: StringGrid DrawText: über PopUpMenu Farbe ändern
Zwei Dinge fallen mir auf, die m.E. so nicht funktionieren können:
Zitat:
2. ACol und ARow sind lokale Variable und haben einen undefinierten bzw x-beliebigen Wert.. Die Zuweisung erfolgt erst später Zitat:
So wird das auf jeden Fall was:
Delphi-Quellcode:
Davon abgesehen erfolgt eine Farbänderung -/zuweisung m.E. immer im OnDrawCell-Ereignis, wenn sie dauerhaft sein soll. Hier bietet sich für deine Vorgehensweise evtl. das Zuweisen(=Merken) der jeweiligen Zellfarbe .
//--Zellwerte holen
ACol:=STGRP_Fert_FT.Col; ARow:=STGRP_Fert_FT.Row; //--Zell-Rechteck zuweisen aRect := STGRP_Fert_FT.CellRect(ACol, ARow); ... |
Re: StringGrid DrawText: über PopUpMenu Farbe ändern
Hallo,
das mit der Zuweisung stimmt, habs auch grad gesehen... Habe es jetzt anders gelöst (zumindest fast). Schreibe alle Informationen (Eckwerte,Color) in eine DB, welche ich dann im OnDraw wieder auslese. Dieser eher umständliche Weg ist erforderlich, da ich bei erneutem Aufruf die vorher festgesetzten Informationen wieder brauche. MFG Steffen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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