AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi StringGrid DrawText: über PopUpMenu Farbe ändern
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid DrawText: über PopUpMenu Farbe ändern

Ein Thema von WIng2005 · begonnen am 10. Sep 2007 · letzter Beitrag vom 10. Sep 2007
Antwort Antwort
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#1

StringGrid DrawText: über PopUpMenu Farbe ändern

  Alt 10. Sep 2007, 13:44
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
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#2

Re: StringGrid DrawText: über PopUpMenu Farbe ändern

  Alt 10. Sep 2007, 14:15
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#3

Re: StringGrid DrawText: über PopUpMenu Farbe ändern

  Alt 10. Sep 2007, 14:22
Hmm, wer ruft wann die Procedure "PM_Fert_FT" auf? Muss das nicht im OnDraw-Event des Grids erfolgen??
Gruß
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#4

Re: StringGrid DrawText: über PopUpMenu Farbe ändern

  Alt 10. Sep 2007, 14:29
@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
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#5

Re: StringGrid DrawText: über PopUpMenu Farbe ändern

  Alt 10. Sep 2007, 14:34
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???
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#6

Re: StringGrid DrawText: über PopUpMenu Farbe ändern

  Alt 10. Sep 2007, 14:39
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
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#7

Re: StringGrid DrawText: über PopUpMenu Farbe ändern

  Alt 10. Sep 2007, 14:41
Das gesamte Grid würde mit GridName.Refresh neu gezeichnet. Wenn es nur eine bestimmte Zelle sein soll: einfach den Zellinhalt neu zuweisen!
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#8

Re: StringGrid DrawText: über PopUpMenu Farbe ändern

  Alt 10. Sep 2007, 19:42
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 .
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#9

Re: StringGrid DrawText: über PopUpMenu Farbe ändern

  Alt 10. Sep 2007, 20:11
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:37 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