Canvas von PopupMenu
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Canvas von PopupMenu
Hallo,
ich will die Farbe des PopupMenus an die Farben meiner Anwendung anpassen. Gibt es eine Möglichkeit z.B. Color von PopupMenu zu setzen?
Eine Eigenschaft mit diesem Namen gibt es ja nicht. Vielleicht ging's, wenn man auf den Canvas des PopupMenu's zeichnet. Nur weiß ich nicht, mit welcher Ereignisbehandlung ich das machen soll.
Es gibt hier standardmäßig nur OnClose und OnPopup.
Besten Dank für die Hilfe.
Josef
ich will die Farbe des PopupMenus an die Farben meiner Anwendung anpassen. Gibt es eine Möglichkeit z.B. Color von PopupMenu zu setzen?
Eine Eigenschaft mit diesem Namen gibt es ja nicht. Vielleicht ging's, wenn man auf den Canvas des PopupMenu's zeichnet. Nur weiß ich nicht, mit welcher Ereignisbehandlung ich das machen soll.
Es gibt hier standardmäßig nur OnClose und OnPopup.
Besten Dank für die Hilfe.
Josef
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Canvas von PopupMenu
TMenu bzw. TMenuItem werden immer durch das Widgetset gezeichnet. Wenn du also dein Programm visuell verunstalten willst
, musst du dir dein eigenes Menü (von TCustomControl ableiten) basteln. Alternativ könntest du versuchen, die Farbeinstellungen des jeweils verwendeten Widgetsets zu verändern. Den Benutzer wird das allerdings wenig erfreuen.

MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 290
- Registriert: Mo 24. Dez 2007, 13:14
- OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
- CPU-Target: AMD64X2
Re: Canvas von PopupMenu
Falls dein Programm nur für Windows sein soll, dann mußte das auch mit Lazarus gehen. Das brauchst du:
TMenuItem.Handle : HMenu
Und das hast du auch bei Lazarus.
Dann suche bei Windows-SDK nach "Owner-Drawn Menu Items" dann findest du genug Beispiele.
TMenuItem.Handle : HMenu
Und das hast du auch bei Lazarus.
Dann suche bei Windows-SDK nach "Owner-Drawn Menu Items" dann findest du genug Beispiele.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Canvas von PopupMenu
Für GTK2 gibt es die Möglichkeit Local RC Dateien(Ich meine die hießen so) zu laden. Ich habe damit mal experimentiert. Damit kannst du die Farbeinstellungen vom User überschreiben.
Das Äußere zu ändern ist anscheint nur über diese Dateien Möglich. Einige wenige Komponenten bieten es auch ohne an.
Ein Eigenes PopupMenu währe auch nicht schlecht, ist aber nicht ganz so einfach zu erstellen.
01) Du musst für jedes PopupMenu ein eigenes Fenster erzeugen
02) Jetzt brauchst du eine Liste mit deinen Einträgen in Baum Format
03) Eine Scroll Funktion währe auch nicht schlecht. Ich frage mich immer warum bei PopupMenus keine Scrollbalken eingeblendet werden können.
Im Prinzip währe es das. Daraus könntest du dann auch noch ein MainMenu zusammenbasteln *G*. Wo du dann dein PopupMenu einfach nutzten kannst.
Im Prinzip müsstest du aber auch durch API Funktionen, wie z.b. OnPaint etwas erreichen können. Du könntest eine Eigene Klasse erstellen und die direkt von TPopupMenu Ableiten und dort die wm_paint(ich meine das hieß so) überschreiben. Das müsste dann auch ToolKit unabhängig Funktionieren.
Das Äußere zu ändern ist anscheint nur über diese Dateien Möglich. Einige wenige Komponenten bieten es auch ohne an.
Ein Eigenes PopupMenu währe auch nicht schlecht, ist aber nicht ganz so einfach zu erstellen.
01) Du musst für jedes PopupMenu ein eigenes Fenster erzeugen
02) Jetzt brauchst du eine Liste mit deinen Einträgen in Baum Format
03) Eine Scroll Funktion währe auch nicht schlecht. Ich frage mich immer warum bei PopupMenus keine Scrollbalken eingeblendet werden können.
Im Prinzip währe es das. Daraus könntest du dann auch noch ein MainMenu zusammenbasteln *G*. Wo du dann dein PopupMenu einfach nutzten kannst.
Im Prinzip müsstest du aber auch durch API Funktionen, wie z.b. OnPaint etwas erreichen können. Du könntest eine Eigene Klasse erstellen und die direkt von TPopupMenu Ableiten und dort die wm_paint(ich meine das hieß so) überschreiben. Das müsste dann auch ToolKit unabhängig Funktionieren.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Canvas von PopupMenu
Hallo,
vielen Dank für die Antwort(en).
Hmmh.... in Delphi bekäme ich das ja wahrscheinlich hin.
Ich find mich ja nicht einmal in der Lazarus Online Hilfe zurecht. Als Einstieg gibts
RTL - Free Pascal Run Time Library
FCL - Free Component Library
LCL - Lazarus Component Library
Nur, woher weiß ich, unter welchem Link ich wegen welcher funktion oder Prozedur usw. nachschlagen soll. Einfach in allen Dreien zu suchen, noch dazu wenn man nicht genau weiß, wie den die Funktion usw. heißt, ist ja recht mühsam.
Eine Suchfunktion über alle drei Bereiche wäre da nicht schlecht.
Zu meinem PopupMenu:
Unter Lazarus eine Komponente zu entwickeln geht momentan über meinen Wissensstand hinaus. Noch dazu, wenn sie plattformübergreifend sein soll. gibt es da irgendwelche tutorials, um sich in die Komponentenentwicklung unter Lazarus einzulesen?
Ich werde mein Popupmenu erst Mal mit Panels, die ich bei den entsprechenden Klicks aktiviere oder deaktiviere, machen.
Besten Dank.
Josef
vielen Dank für die Antwort(en).
Hmmh.... in Delphi bekäme ich das ja wahrscheinlich hin.
Ich find mich ja nicht einmal in der Lazarus Online Hilfe zurecht. Als Einstieg gibts
RTL - Free Pascal Run Time Library
FCL - Free Component Library
LCL - Lazarus Component Library
Nur, woher weiß ich, unter welchem Link ich wegen welcher funktion oder Prozedur usw. nachschlagen soll. Einfach in allen Dreien zu suchen, noch dazu wenn man nicht genau weiß, wie den die Funktion usw. heißt, ist ja recht mühsam.
Eine Suchfunktion über alle drei Bereiche wäre da nicht schlecht.
Zu meinem PopupMenu:
Unter Lazarus eine Komponente zu entwickeln geht momentan über meinen Wissensstand hinaus. Noch dazu, wenn sie plattformübergreifend sein soll. gibt es da irgendwelche tutorials, um sich in die Komponentenentwicklung unter Lazarus einzulesen?
Ich werde mein Popupmenu erst Mal mit Panels, die ich bei den entsprechenden Klicks aktiviere oder deaktiviere, machen.
Besten Dank.
Josef
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Canvas von PopupMenu
Du könntest die Gruppen Eigenschaft der Buttons nutzen um den Markierungs Eintrag zu machen.
Ein Tutorial über die Komponenten Entwicklung gibt es noch nicht wirklich. Es gibt einige Grundlagen: http://wiki.lazarus.freepascal.org/How_ ... _Component" onclick="window.open(this.href);return false;
Ein Tutorial über die Komponenten Entwicklung gibt es noch nicht wirklich. Es gibt einige Grundlagen: http://wiki.lazarus.freepascal.org/How_ ... _Component" onclick="window.open(this.href);return false;
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: Canvas von PopupMenu
http://www.lazarusforum.de/portal.php?cx=JosefKoller hat geschrieben:Nur, woher weiß ich, unter welchem Link ich wegen welcher funktion oder Prozedur usw. nachschlagen soll. Einfach in allen Dreien zu suchen, noch dazu wenn man nicht genau weiß, wie den die Funktion usw. heißt, ist ja recht mühsam.
Eine Suchfunktion über alle drei Bereiche wäre da nicht schlecht.
Rechte Suchbox.
Im übrigen auch auf der Portalseite zu finden

(Einziger Wermutstropfen, nur ganze Wörter werden bisher gefunden, aber in der Regel kennt man ja doch den Funktionsnamen. Und das wird sich auch bald mal ändern.)
Johannes
-
- Beiträge: 115
- Registriert: Sa 17. Mär 2007, 10:53
Re: Canvas von PopupMenu
Hallo,
@monta
vielen Dank für den Suchlink.
Mittlerweile hab ich mich etwas durch die LCL durchgeblättert. Ist etwas gewöhnungsbedürftig aufgebaut. So leicht finde ich mich da nicht zurecht. Lediglich über den Link Index gekommt man eine schöne Übersicht.
@pluto
Vielen Dank für den Link zur Komponentenentwicklung. Naja es stehen da nur allgemeine einleitende Sachen. Mich würden eher Dinge interessieren, welche Entsprechungen z. b. Windowsprozeduren in anderen Plattformen haben. Wie zum Beispiel sowas hier.
procedure WMKeyDown(var Msg : TWMKey); message WM_KEYDOWN;
procedure WMKillFocus(var Msg : TWMKillFocus); message WM_KILLFOCUS;
procedure WMSetFocus(var Msg : TWMSetFocus); message WM_SETFOCUS;
oder diese if-Kontrukte:
{$IFNDEF LCL}
procedure WMGetDlgCode(var Msg : TMessage); message WM_GETDLGCODE;
{$ELSE}
procedure WMGetDlgCode(var Msg : TWMGetDlgCode); message WM_GETDLGCODE;
{$ENDIF}
Kann man irgendwo nachlesen, welche Prozedur der anderen entspricht.
Gibt es denn da wirklich nichts weiterführendes in Sachen Komponentenentwicklung.
Ansonsten Kompliment. Bei Lazarus hat sich ja einiges getan seit meiner letzten Installation. Ich denke, ich werde dabei bleiben und es künftig statt Delphi zur Programmieerung einsetzen.
Josef
Gibt es denn da wirklich nichts weiterführendes in Sachen Komponentenentwicklung.
@monta
vielen Dank für den Suchlink.
Mittlerweile hab ich mich etwas durch die LCL durchgeblättert. Ist etwas gewöhnungsbedürftig aufgebaut. So leicht finde ich mich da nicht zurecht. Lediglich über den Link Index gekommt man eine schöne Übersicht.
@pluto
Vielen Dank für den Link zur Komponentenentwicklung. Naja es stehen da nur allgemeine einleitende Sachen. Mich würden eher Dinge interessieren, welche Entsprechungen z. b. Windowsprozeduren in anderen Plattformen haben. Wie zum Beispiel sowas hier.
procedure WMKeyDown(var Msg : TWMKey); message WM_KEYDOWN;
procedure WMKillFocus(var Msg : TWMKillFocus); message WM_KILLFOCUS;
procedure WMSetFocus(var Msg : TWMSetFocus); message WM_SETFOCUS;
oder diese if-Kontrukte:
{$IFNDEF LCL}
procedure WMGetDlgCode(var Msg : TMessage); message WM_GETDLGCODE;
{$ELSE}
procedure WMGetDlgCode(var Msg : TWMGetDlgCode); message WM_GETDLGCODE;
{$ENDIF}
Kann man irgendwo nachlesen, welche Prozedur der anderen entspricht.
Gibt es denn da wirklich nichts weiterführendes in Sachen Komponentenentwicklung.
Ansonsten Kompliment. Bei Lazarus hat sich ja einiges getan seit meiner letzten Installation. Ich denke, ich werde dabei bleiben und es künftig statt Delphi zur Programmieerung einsetzen.
Josef
Gibt es denn da wirklich nichts weiterführendes in Sachen Komponentenentwicklung.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Canvas von PopupMenu
Teilweise dürfte es ausreichen wenn du hier ein LM davor setzt, aber TCustomControl dürfte ebenfalls eine Methode haben SetFocus die du überschreiben könntest.procedure WMKeyDown(var Msg : TWMKey); message WM_KEYDOWN;
procedure WMKillFocus(var Msg : TWMKillFocus); message WM_KILLFOCUS;
procedure WMSetFocus(var Msg : TWMSetFocus); message WM_SETFOCUS;
Für KeyDown gibt es eine Methode. Die du überschreiben kannst. Es ist selten Notwendig direkt auf die Botschaften zuzugreifen, für die meisten Botschaften gibt es Methoden die von der LCL Automatisch Aufgerufen werden.
Code: Alles auswählen
{$IFNDEF LCL}
procedure WMGetDlgCode(var Msg : TMessage); message WM_GETDLGCODE;
{$ELSE}
procedure WMGetDlgCode(var Msg : TWMGetDlgCode); message WM_GETDLGCODE;
{$ENDIF}
Im Moment erstelle ich gerade ein Tutorial darüber, könnte in den Nächsten Tagen Fertig sein. Habe schon über acht Seiten geschrieben. Wenn du informiert bleiben möchtest,Gibt es denn da wirklich nichts weiterführendes in Sachen Komponentenentwicklung.
verfolge einfach diesen Thread hier: http://www.lazarusforum.de/viewtopic.ph ... 76&start=0" onclick="window.open(this.href);return false;
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Canvas von PopupMenu
Die IFDEFs sehen mir eher danach aus, als ob der Code für Lazarus und Delphi geschrieben ist.
Unterschiede zwischen Delphi und Lazarus könntest du noch im Wiki finden:
http://wiki.lazarus.freepascal.org/Laza ... i_Users/de
http://wiki.lazarus.freepascal.org/LCL_Messages
Unterschiede zwischen Delphi und Lazarus könntest du noch im Wiki finden:
http://wiki.lazarus.freepascal.org/Laza ... i_Users/de
http://wiki.lazarus.freepascal.org/LCL_Messages
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein