![]() |
AW: Einfach das Popup Menü schließen
Ja das funktioniert prima unter Delphi, allerdings hat Lazarus keinen Typ TPopupList.
(Aus der Delphi Hilfe: TPopupList verwaltet das Fenster, in dem die Meldungen von Popup-Menüs angezeigt werden). Etwas vergleichbares konnte ich bis jetzt auch nicht finden. Es gibt aber bei den Eigenschaften der Formulare, wo man u.a. das Popup Menü zuordnet, einen Punkt der PopupParent heißt, allerdings konnte ich noch keinen Wert finden den er hier annimmt. |
AW: Einfach das Popup Menü schließen
Dann scheint Lazarus noch eine andere Implementation zu haben. Leider kenne ich mich damit überhaupt nicht aus.
|
AW: Einfach das Popup Menü schließen
Zitat:
Zitat:
Keine Ahnung, wie Lazarus das macht. |
AW: Einfach das Popup Menü schließen
Trotzdem danke. Vielleicht weiß es ja hier noch jemand.
|
AW: Einfach das Popup Menü schließen
Zitat:
![]()
Delphi-Quellcode:
das Handle deines Popupmenüs verwenden und den Code der WndProc anpassen (vergiss aber nicht dir die vorherige WndProc zu merken (dazu könntest du die Tag Property verwenden) und aufzurufen, wenn du nicht die gewünschte Nachricht erhalten hast (analog zu dem
Self.Handle
Delphi-Quellcode:
in Uwes Beispiel)).
inherited
Eine wichtige Anmerkung ist hier jedoch, dass dies so nur unter Windows (Win32/64) funktionieren wird, unter Gtk2, Qt oder Carbon müsstest du eventuell andere Sachen ausprobieren, falls es dort überhaupt möglich ist andere Eingaben abzufangen... Gruß, Sven |
AW: Einfach das Popup Menü schließen
Zitat:
Delphi-Quellcode:
procedure TMyPopupList.WndProc(var Message: TMessage);
begin if Message.Msg = WM_MBUTTONDOWN then EndMenu else inherited; end; |
AW: Einfach das Popup Menü schließen
Zitat:
Bei komplexeren Fällen mit einer Vielzahl an Abfragen finde ich meinen Ansatz etwas übersichtlicher und leichter wartbar (z.B. beim Einfügen, Löschen oder Umsortieren einzelner Fälle). Der IF-EXIT Ansatz hat gegenüber dem IF-ELSE Ansatz allerdings den Vorteil, daß nicht bei jedem IF ein EXIT folgen muss und in dem Fall die folgenden Abfragen noch ausgeführt werden. Bei einer IF-ELSE Struktur ist das nur schwer und unübersichtlich realisierbar. Übrigens: Ich halte EXIT, BREAK und CONTINUE ebenso wie Exceptions für sehr brauchbare Sprachkonstrukte zur Steuerung des Programmflusses. Aber das gehört alles eigentlich gar nicht in diesen Thread :wink: |
AW: Einfach das Popup Menü schließen
Och, mit Exit, Break, Continue und Exceptions habe ich (im Gegensatz zu with) auch kein Problem, ich fand es nur in diesem Fall eher verwirrend. Aber das soll jetzt bloß nicht in Grundsatzdiskussionen ausarten :D
|
AW: Einfach das Popup Menü schließen
Danke für die Antworten.
So mein Test lief erfolglos, wobei ich zugeben muss, ich kaum weiß was ich da mache... Compilerfehler kommt keiner. Eine Reaktion bekomme ich nur wenn ich das Handle auf Self lasse und nicht auf PopupMenü.
Delphi-Quellcode:
Was ist eigentlich HTCAPTION ?
uses
Windows; var PrevWndProc: WNDPROC; function WndCallback(Ahwnd: HWND; uMsg: UINT; wParam: WParam; lParam: LParam):LRESULT; stdcall; begin if uMsg=WM_MBUTTONDOWN then begin result:=Windows.DefWindowProc(Ahwnd, uMsg, WParam, LParam); //not sure about this one // if result=windows.HTCAPTION then result:=windows.HTCLIENT; ShowMessage('Reaktion'); exit; end; //Tag Property ?? result:=CallWindowProc(PrevWndProc,Ahwnd, uMsg, WParam, LParam); end; procedure TForm1.FormCreate(Sender: TObject); begin PrevWndProc:=Windows.WNDPROC(SetWindowLongPtr(PopupMenu1.Handle,GWL_WNDPROC,PtrInt(@WndCallback))); end; |
AW: Einfach das Popup Menü schließen
HTCAPTION etc. sind hier erklärt:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 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