AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal Einfach das Popup Menü schließen
Thema durchsuchen
Ansicht
Themen-Optionen

Einfach das Popup Menü schließen

Ein Thema von Ginko · begonnen am 27. Apr 2013 · letzter Beitrag vom 2. Mai 2013
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.687 Beiträge
 
Delphi 12 Athens
 
#1

AW: Einfach das Popup Menü schließen

  Alt 2. Mai 2013, 08:26
Delphi-Quellcode:
procedure TMyPopupList.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_MBUTTONDOWN then begin
    EndMenu;
    Exit;
  end;
  inherited;
end;
Wäre das so unter Verzicht auf Exit nicht lesbarer?
Delphi-Quellcode:
procedure TMyPopupList.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_MBUTTONDOWN then
    EndMenu
  else
    inherited;
end;
Das ist Geschmackssache und in diesem Fall ist sicher beides akzeptabel.

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
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#2

AW: Einfach das Popup Menü schließen

  Alt 2. Mai 2013, 08:40
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Einfach das Popup Menü schließen

  Alt 2. Mai 2013, 10:01
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:
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;
Was ist eigentlich HTCAPTION ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#4

AW: Einfach das Popup Menü schließen

  Alt 2. Mai 2013, 10:11
HTCAPTION etc. sind hier erklärt: WM_NCHITTEST
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Einfach das Popup Menü schließen

  Alt 2. Mai 2013, 10:31
Ah ok danke, auch wenns mir nicht wirklich weiter hilft.
  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 02:14 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