AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi TPopupMenu Border selbst zeichnen?
Thema durchsuchen
Ansicht
Themen-Optionen

TPopupMenu Border selbst zeichnen?

Ein Thema von WilderMike · begonnen am 22. Nov 2024 · letzter Beitrag vom 24. Nov 2024
Antwort Antwort
WilderMike

Registriert seit: 18. Nov 2024
12 Beiträge
 
#1

TPopupMenu Border selbst zeichnen?

  Alt 22. Nov 2024, 17:28
Hallo,

ich habe das irgendwie mal früher gemacht (vor ca. 5 Jahren) aber nutzte Delphi (auch allg. das Programmieren) erst wieder seit ca. 1-2 Wochen. Wie bekomme ich denn z.B. bei einem TPopupMenu den Border unter Kontrolle? Ich möchte diesen selbst zeichnen. WM_PAINT NCPAINT usw. gibt es ja aber die Nachrichtenbehandlung habe ich eher vermehrt in andere Richtung gemacht aber mit PAINT-Gedöns früher auch schon gearbeitet.

Gruß WilderMike
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
702 Beiträge
 
Delphi 12 Athens
 
#2

AW: TPopupMenu Border selbst zeichnen?

  Alt 23. Nov 2024, 16:48
Ich würde da lieber die Finger von lassen. Die Items haben Events wie OnDrawItem, OnAdvancedDrawItem mit denen man sie selbst zeichnen kann, aber das sichtbare Popup-Menu selbst ist ein API-Fenster, wird von Windows gezeichnet, und an sein window handle zu kommen ist nicht einfach. Es selbst zu zeichnen ist komplex, um es milde zu formulieren, mit all dem neumodischen Kram wie hidpi und styles, besonders wenn man dabei nicht die in VCL.Menus implementierte Funktionalität torpedieren möchte.

Und nein, TMenu.Windowhandle ist nicht das handle des Menufensters...
Peter Below

Geändert von TBx (23. Nov 2024 um 20:51 Uhr) Grund: Full-Quote entfernt
  Mit Zitat antworten Zitat
WilderMike

Registriert seit: 18. Nov 2024
12 Beiträge
 
#3

AW: TPopupMenu Border selbst zeichnen?

  Alt 24. Nov 2024, 09:30
Zwar etwas probiert aber die Finger sind noch dran
Ich habe jetzt eine 2. Form genommen. Damit kann man ja mit „bsNone“ usw. alles eliminieren und mit dieser Form sein eigenes Ding machen. Die rufe ich auf, wenn auf ein Tray Icon geklickt wird. Geht eigentlich soweit alles. Aber sozusagen dieses „einfangen“ geht noch nicht. Also es gibt ja verstecke Tray Icons von Windows, die mit dem Pfeil in der Taskleiste eingeblendet werden können. Dort ist zurzeit mein TrayIcon von Delphi drin. Wenn der Bereich offen ist, kann ich auf mein Tray Icon klicken. Aber der Bereich schließt sich automatisch wieder, wenn der Mauszeiger zu meinem falschen Popupmenü (meine 2. Form) bewegt wird. Bei einem richtigen Popupmenü bleibt der Bereich noch offen und schließt sich erst, wenn ein Menüeintrag vom Popupmenü ausgewählt wurde.
So eine Form als Popupmenü gefällt mir richtig gut. Erstens können die Farben angepasst werden und der Inhalt muss nicht nur aus nachprogrammierten Menüs bestehen, sondern man kann damit alles Mögliche machen.
Um diesen verstecken Tray Icon Bereich von Windows offen halten zu können, benötigt es wohl wilden Code. *lach

Die Idee mit einem Dummy Popupmenu
Code:
Form2.show;
popupmenu1.Popup(-100,-100);
form2.SetFocus; // geht so nicht
geht schon mal nicht. Erstens lässt sich das Popupmenü nicht außerhalb des Bildschirmes setzen (das wäre wichtig) und zweitens verliert meine 2. Form den Fokus dabei. Diesen Fokus bräuchte ich z.B. für WM_MOUSELEAVE und WM_MOUSEHOVER aber solange das Dummy PopupMenu offen ist, kann ich kein Fokus setzen. Zumindest bleibt der versteckte Tray Icon Bereich von Windows hier offen. Aber die halbe funktionierende Idee mit dem Dummy Popup bringt dann ja auch nichts.

Aber Danke für deine Antwort. Hätte ja sein können, dass es nicht so schwer ist, ein TPopupmenu komplett selber bemalen zu können (auch den Rahmen). Das mit der 2. Form gefällt mir jetzt sowieso besser aber nur das beschriebene Problem bleibt. Da muss ich noch mal drüber nachdenken

Gruß WilderMike
  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 20:04 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