![]() |
Farbe eine PopUpMenu ändern
Hallo Leute,
ich möchte die Hintergrundfarbe eines PopUpMenu ändern. Hintergrund: bei DBGrid.OnTitelClick wird ein anderes PopUpMenu aufgerufen als in den Datenzeilen. In dem PopUpMenu der Titelzeile kann man u.a. die gespeicherten Einstellungen für die Tabellenspalten löschen, in dem PopUpMenu für die Datenzeilen kann man einen einzelnen Datensatz aus dem Datenbestand löschen. Nun gibt es natürlich Nutzer, die das eine Menü nicht vom anderen unterscheiden können, und statt dem Datensatz, den sie löschen wollen, die Tabellenspalten-Definitionen löschen, mich dann anrufen, weil in dem DBGrid plötzlich alle Felder in der Standardbreite angezeigt werden und nerven, daß das Programm nicht geht. Warntexte vor dem Löschen helfen nicht weiter, da diese ohne gelesen zu werden übergangen werden. Nun möchte ich das PopUpMenu der Titelzeile farblich (grell Rot oder so) anders darstellen, damit dieser Unsinn endlich aufhört, und ich nicht ständig damit beschäftigt bin, die Bedienfehler zu korrigieren. Ein hilfreicher Link oder passender Quelltext wären toll. mfg eddy |
Re: Farbe eine PopUpMenu ändern
Hi,
ich kann dir zwar nur sehr bedingt helfen, aber vielleicht reicht es ja als Anstoss in die Richtige Richtung. Setz einfach im PopUp-Menü OwnerDraw auf True. Nun kannst du für alle Einträge des PopUp-Menüs, die du färben möchtest einfach das OnDraw-Ereignis mit Code füllen und hier natürlich auch färben. Sehr einfaches Beispiel:
Delphi-Quellcode:
Würde dir jetzt einen roten Eintrag erzeugen, auf dem Test (sehr schlecht eingerückt) steht. Das genaue einrücken vom Text kannst du natürlich durch TextWidth und TextHeight (Methoden vom Canvas) und berechnen der Mittelpunkte o.ä. erreichen. Weiß ja nicht ob die Links oder Rechtsbündig oder Zentriert angezeigt werden sollen. Na ja, dass bekommst du dann schon hin.
procedure TForm1.Blubb1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean); begin ACanvas.Brush.Color := clRed; ACanvas.FillRect(ARect); ACanvas.TextOut(ARect.Left + 2, ARect.Top + 2, 'TEST'); end; Hoffe es hilft schon mal Gruß Der Unwissende |
Re: Farbe eine PopUpMenu ändern
Zitat:
wenn die Anwender schon nicht lesen wollen würden sie sicher auch nicht auf verschiedene Farben achten ;-) Ich würde das PopUp für die Titelleiste nur dan aufraufen wenn der Mausklick bei gedrückter Ctrl-Taste erfolgte. Dann bist Du sicher das der Anwender die Aktion bewusst ausgelöst hat. |
Re: Farbe eine PopUpMenu ändern
Hallo "Der Unwissende",
auf jeden Fall wußtest Du, wie man dieses Problem angehen könnte. Kannst Du mir auch noch verraten, wie ich an OnDrawItem für die Standard-PopUpMenu herankomme? Mein TPopUpMenu kennt nur OnChange und OnPopUp aber eben kein OnDrawItem. Ich habe die Prozedur zwar in Public deklariert, aber sie wird nie verwendet. Hallo Sharky, der Nutzer, um den es hier konkret geht, ist nicht mehr der jüngste und hat so seine Schwierigkeiten mit dem Lesen der Bildschirmausschriften (17" Monitor bei 800 x 600, obwohl ich mein Programm ursprünglich nur für 1024 x 768 ausgelegt hatte). Mit farbigen Buttons habe ich schon gute Erfahrungen gemacht. mfg eddy |
Re: Farbe eine PopUpMenu ändern
Zitat:
|
Re: Farbe eine PopUpMenu ändern
Zitat:
alles klar. Also dann doch einfärben. Hier mal ein etwas angepasstest Beispiel.
Delphi-Quellcode:
Einfach allen Einträgen des PopUpMenüs das selbe OnDrawItem zuweisen und *blubb*
procedure TForm1.Vier1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: boolean); var mycaption: string; myrect: TRect; begin mycaption := (Sender as TMenuItem).Caption; with ACanvas do begin if (Selected) then begin Brush.Color := clgreen; end else begin Brush.Color := clRed; end; FillRect(ARect); myRect := ARect; myRect.Left := myRect.Left + 5; DrawText(Handle, PChar(mycaption), Length(mycaption), myRect, DT_SINGLELINE or DT_VCENTER); end; end; |
Re: Farbe eine PopUpMenu ändern
Hier nun mein Dank für die Hilfe bei der Lösung des Problems. :cheers:
Hallo jim_raynor, ich falle immer auf so böse Fallen hinein :oops: , auch wenn es ja eigentlich logisch ist. Schließlich heißt es ja DrawItem und nicht DrawMenu. Hallo Sharky, das Beispiel paßt prima. Ich habe alle Anweisungen befolgt, noch ein bisschen die Farben für Hintergrund und Font angepaßt und bin jetzt voller Hoffnung, daß das in Aqua gehaltene Menü doch irgendwie meine Nutzer ein wenig von wildem gedankenfreien Herumclicken zurück hält. mfg eddy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 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