AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign TPopupMenu Popup überschreiben / DoPopup wird nie aufgerufen
Thema durchsuchen
Ansicht
Themen-Optionen

TPopupMenu Popup überschreiben / DoPopup wird nie aufgerufen

Ein Thema von Glados · begonnen am 19. Okt 2017 · letzter Beitrag vom 21. Okt 2017
 
Glados
(Gast)

n/a Beiträge
 
#1

TPopupMenu Popup überschreiben / DoPopup wird nie aufgerufen

  Alt 19. Okt 2017, 18:35
Ich habe mir mit Hilfe des Forums und Google folgende Klasse gebaut. Somit bin ich in der Lage herauszufinden, wann ein PopupMenu sichtbar ist und wann nicht

Delphi-Quellcode:
unit Utils.PopupListEx;

interface

uses Vcl.Menus, Winapi.Messages, System.Classes;

type
 TPopupListEx = class(TPopupList)
 private
  procedure WndProc(var Message: TMessage); override;
 public
  PopupMenu: TPopupMenu;
  MenuLoop: Boolean;
 end;

type
 TPopupMenu = class(Vcl.Menus.TPopupMenu)
 private
 public
  // procedure Popup(X, Y: Integer); override;
  procedure DoPopup(Sender: TObject); override;
 end;

implementation

procedure TPopupListEx.WndProc(var Message: TMessage);
begin
 case Message.Msg of
  WM_ENTERMENULOOP:
   begin
    MenuLoop := True; // Menu sichtbar
   end;
  WM_EXITMENULOOP:
   begin
    MenuLoop := False; // Menu nicht mehr sichtbar
    TPopupListEx(PopupList).PopupMenu := nil;
   end;
 end;

 inherited WndProc(Message);
end;

{*
procedure TPopupMenu.Popup(X, Y: Integer);
begin
// TPopupListEx(PopupList).PopupMenu := Sender as TPopupMenu; // wie komme ich hier an den Sender?

inherited;
end;
*}


procedure TPopupMenu.DoPopup(Sender: TObject);
begin
 TPopupListEx(PopupList).PopupMenu := Sender as TPopupMenu;

 inherited;
end;

end.
In jedes PopupMenuXPopup-Even müsste ich händisch eigentlich TPopupListEx(PopupList).PopupMenu := Sender as TPopupMenu; schreiben.
Da man das aber schnell vergessen kann, möchte ich das gerne automatisiert erledigen und das Popup-Event überschreiben.

Nur wie komme ich an den Sender?

Edit ich weiß nicht, ob ich das richtig gelößt habe. Aber statt Popup() überschreibe ich jetzt DoPopup(Sender: TObject);. Dann habe ich den Sender.

Jetzt bekomme ich nur die Meldung
Zitat:
[dcc32 Hinweis] Utils.PopupListEx.pas(10): H2269 Durch das Überschreiben erhält die virtuelle Methode 'TPopupListEx.WndProc' eine geringere Sichtbarkeit (private) als die Basisklasse 'TPopupList' (protected)
Wie bekomme ich diese Meldung denn korrekt weg?

Geändert von Glados (19. Okt 2017 um 20:45 Uhr)
  Mit Zitat antworten Zitat
 


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 05:50 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