Canvas von PopupMenu

Für Fragen rund um die Ide und zum Debugger
Antworten
JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Canvas von PopupMenu

Beitrag von JosefKoller »

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

Socke
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

Beitrag von Socke »

TMenu bzw. TMenuItem werden immer durch das Widgetset gezeichnet. Wenn du also dein Programm visuell verunstalten willst :D, 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

Bora4d
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

Beitrag von Bora4d »

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.

pluto
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

Beitrag von pluto »

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.
MFG
Michael Springwald

JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Re: Canvas von PopupMenu

Beitrag von JosefKoller »

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

pluto
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

Beitrag von pluto »

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;
MFG
Michael Springwald

monta
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

Beitrag von monta »

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.
http://www.lazarusforum.de/portal.php?cx=

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

JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Re: Canvas von PopupMenu

Beitrag von JosefKoller »

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.

pluto
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

Beitrag von pluto »

procedure WMKeyDown(var Msg : TWMKey); message WM_KEYDOWN;
procedure WMKillFocus(var Msg : TWMKillFocus); message WM_KILLFOCUS;
procedure WMSetFocus(var Msg : TWMSetFocus); message WM_SETFOCUS;
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.
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}
Da gebe ich dir recht es ist ein seltsamer IF-Konstrukt. Ich vermute das er nur für Windows relevant bist. Bist du unter Windows dürfte "TWMGetDlgCode" gelten und bist du unter Linux das andere.
Gibt es denn da wirklich nichts weiterführendes in Sachen Komponentenentwicklung.
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,
verfolge einfach diesen Thread hier: http://www.lazarusforum.de/viewtopic.ph ... 76&start=0" onclick="window.open(this.href);return false;
MFG
Michael Springwald

Socke
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

Beitrag von Socke »

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
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten