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/)
-   -   Delphi StringGrid DrawText: über PopUpMenu Farbe ändern (https://www.delphipraxis.net/99301-stringgrid-drawtext-ueber-popupmenu-farbe-aendern.html)

WIng2005 10. Sep 2007 12:44


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:
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;
Nach dem Start kann ich nun das besagte Menu öffnen und die Farbe wählen.
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

uligerhardt 10. Sep 2007 13:15

Re: StringGrid DrawText: über PopUpMenu Farbe ändern
 
Zitat:

Zitat von WIng2005
Liegts am Code? Sollte doch soweit OK sein...

Ich glaube, "Ja" und "Nein". :)
Schau dir mal im Debugger ARect an, wenn du auf dem Aufruf von FillRect stehst. Schaut für meine Augen ziemlich uninitialisiert aus.

pstruh 10. Sep 2007 13:22

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ß

WIng2005 10. Sep 2007 13:29

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

pstruh 10. Sep 2007 13:34

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???

WIng2005 10. Sep 2007 13:39

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

pstruh 10. Sep 2007 13:41

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!

raiguen 10. Sep 2007 18:42

Re: StringGrid DrawText: über PopUpMenu Farbe ändern
 
Zwei Dinge fallen mir auf, die m.E. so nicht funktionieren können:
Zitat:

aRect:=Rect(ACol,ARow,ACol,ARow);
1. Das ergibt ein Rechteck mit jeweils gleicher Kantenlänge=Quadrat ;)
2. ACol und ARow sind lokale Variable und haben einen undefinierten bzw x-beliebigen Wert..

Die Zuweisung erfolgt erst später
Zitat:

case TMenuItem(Sender).Tag of
0:Begin
ACol:=STGRP_Fert_FT.Col;
ARow:=STGRP_Fert_FT.Row;
...
und ist hier an der falschen Stelle ;)

So wird das auf jeden Fall was:
Delphi-Quellcode:
//--Zellwerte holen
      ACol:=STGRP_Fert_FT.Col;
      ARow:=STGRP_Fert_FT.Row;
//--Zell-Rechteck zuweisen
     aRect := STGRP_Fert_FT.CellRect(ACol, ARow);
...
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 .

WIng2005 10. Sep 2007 19:11

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 23:21 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