Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zugriff von Klasse auf Ereignis fremder Komponente (https://www.delphipraxis.net/29965-zugriff-von-klasse-auf-ereignis-fremder-komponente.html)

sieppl 17. Sep 2004 14:45


Zugriff von Klasse auf Ereignis fremder Komponente
 
Hallo,

ich habe mir meine eigene ShellTreeView-Klasse abgeleitet, welche später als Komponente bereitstehen soll.
Dieser Komponente soll man jetzt zur Designzeit über den PopUp-Manager ein PopUpMenü zuordnen können. Ich habe dem TreeView published properties wie zum Beispiel CopyMenuItem oder CutMenuItem gegegeben. Der User kann diese später mit den MenuItems des gewünschten PopupMenüs belegen.
Über DoContextPopup fange ich die Mausposition ab und entscheide welche Menüeinträge enabled sind und welche nicht.
Gibt es eine Möglichkeit an das OnCLick-Ereignis der MenüItems zu kommen, so dass der User diese später nicht manuell mit TreeView-Funktionen belegen muss? Das MenüItem ist als privates Feld gespeichert..

Oder hat jemand einen besseren Vorschlag mein Ziel zu erreichen?

Grüße

Sebastian

Stevie 17. Sep 2004 14:55

Re: ShellTreeView um dynamisches PopUpMenu erweitern
 
Wie wär's mit FPopupMenu.Items[i].OnClick ?
Vielleicht hab ich auch was falsch verstanden, aber wenn du deiner Komponente eine SubKomponente (in diesem Fall ein TMenuItem) zuordnest, dann werden die Events (in diesem Fall das OnClick-Event) dieser SubKomponente auch im OI angezeigt.

sieppl 17. Sep 2004 15:10

Re: ShellTreeView um dynamisches PopUpMenu erweitern
 
ich habe die MenuItems doch sogar direkt als Eigenschaft gespeichert. Schließlich muss ich auch wissen, welches Item was bewirken soll. Wenn ich Items[I].OnClick hat die Komponente doch keine Ahnung, ob es nun z.B. Copy oder Paste ist. Die Frage ist eher technisch. Wie deklariere ich denn das OnClick-Ereignis der Sub-Komponente in meiner Klasse? Ich muss doch irgendeine Methode haben, in der ich das Ereignis bearbeite..

Stevie 17. Sep 2004 15:18

Re: ShellTreeView um dynamisches PopUpMenu erweitern
 
Zitat:

Zitat von sieppl
Ich habe dem TreeView published properties wie zum Beispiel CopyMenuItem oder CutMenuItem gegegeben. Der User kann diese später mit den MenuItems des gewünschten PopupMenüs belegen.

Da hast du doch deine MenuItems (und somit auch die Events dieser Teile...)

sieppl 17. Sep 2004 15:47

Re: ShellTreeView um dynamisches PopUpMenu erweitern
 
Zitat:

Zitat von Stevie
Zitat:

Zitat von sieppl
Ich habe dem TreeView published properties wie zum Beispiel CopyMenuItem oder CutMenuItem gegegeben. Der User kann diese später mit den MenuItems des gewünschten PopupMenüs belegen.

Da hast du doch deine MenuItems (und somit auch die Events dieser Teile...)

ja das ist klar, aber ich muss doch im interface-teil meiner klasse eine methode angeben. ich glaube kaum, dass ich dort FCopyMenuItem.OnChange angeben kann. wie soll ich das implementieren?

sieppl 18. Sep 2004 11:38

Re: ShellTreeView um dynamisches PopUpMenu erweitern
 
Zitat:

Zitat von Stevie
Wie wär's mit FPopupMenu.Items[i].OnClick ?
Vielleicht hab ich auch was falsch verstanden, aber wenn du deiner Komponente eine SubKomponente (in diesem Fall ein TMenuItem) zuordnest, dann werden die Events (in diesem Fall das OnClick-Event) dieser SubKomponente auch im OI angezeigt.

okay, im OI ist klar, dass es da geht.
kann man in delphi externe ereignisse im code einer klasse behandeln?

sieppl 21. Sep 2004 12:15

Re: Zugriff von Klasse auf Ereignis fremder Komponente
 
Hallo Stevie,

ich glaube sowohl meine letzte als auch deine Antwort wurden gelöscht.
Kannst du bitte nochmal posten? Ich hatte sich leider nicht lesen
können, da ich unterwegs war..

Grüße

Sebastian

Stevie 21. Sep 2004 12:37

Re: Zugriff von Klasse auf Ereignis fremder Komponente
 
Die musst SetMethoden für deine MenuItems erstellen:
Delphi-Quellcode:
interface
{...}
type
  TMyTreeView = class(TTreeView)
  private
    FCopyMenuItem: TMenuItem;
    FOldCopyOnClick: TNotifyEvent;
    procedure SetCopyMenuItem(const Value: TMenuItem);
    procedure MyMenuItemOnClick(Sender: TObject);
  published
    property CopyMenuItem: TMenuItem read FCopyMenuItem write SetCopyMenuItem;
  end;

implementation

procedure TMyTreeView.MyMenuItemOnClick(Sender: TObject);
begin
  {...}
end;

procedure TMyTreeView.SetCopyMenuItem(const Value: TMenuItem);
begin
  if FCopyMenuItem <> Value then
  begin
    if Assigned(FCopyMenuItem) then
      // alten Eventhandler wieder zuweisen
      FCopyMenuItem.OnClick := FOldCopyOnClick;

    // MenuItem zuweisen
    FCopyMenuItem := Value;

    if Assigned(FCopyMenuItem) then
    begin
      // alten Eventhandler "retten"
      FOldCopyOnClick := FCopyMenuItem.OnClick;
      // eigenen Eventhandler zuweisen
      FCopyMenuItem.OnClick := MyMenuItemOnClick;
    end;

    if Value <> nil then
      Value.FreeNotification(Self);
  end;
end;

{...}

sieppl 21. Sep 2004 14:48

Re: Zugriff von Klasse auf Ereignis fremder Komponente
 
:hello: Super-Stevie. Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:08 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