Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Welches Objekt hat PopUp geöffnet? (https://www.delphipraxis.net/43327-welches-objekt-hat-popup-geoeffnet.html)

TheAn00bis 1. Apr 2005 18:58


Welches Objekt hat PopUp geöffnet?
 
Hi, ich habe mehreren Einträgen eines PopUps ein gemeinsames Ereignis zu gewiesen, die passende Aktion frage ich jetzt über den Sender ab.
Das PopUp verlinke ich jetzt mit zwei verschiedenen Memos. Wie finde ich jetzt raus, über welches Memo das PopUp geöffnet wurde?
Denn der Sender gibt nur an, welchen Eintrag ich geöffnet habe, oder?

Pr0g 1. Apr 2005 19:00

Re: Welches Objekt hat PopUp geöffnet?
 
Du kann den Sender im onPopup Ereignis abfragen.

MfG Pr0g

TheAn00bis 1. Apr 2005 19:03

Re: Welches Objekt hat PopUp geöffnet?
 
Stimmt!

Hab ich gerade garnicht dran gedacht! Dann speicher ich den in einer Variablen und les ihn wieder aus. Genial :D, danke!

TheAn00bis 1. Apr 2005 19:21

Re: Welches Objekt hat PopUp geöffnet?
 
Hat auch noch mit dem Thema zu tun:

Ich speicher den Sender so:

Delphi-Quellcode:
var SenderPopUp:string [...]
SenderPopUp:=Sender.Classname;

Jetzt will ich den Namen anwenden:

Delphi-Quellcode:
if execute then TMemo(FindComponent(SenderPopUp)).lines.loadfromfile(filename);

Jetzt bekomme ich eine AccesViolation. Warum?
Das muss am Sender liegen, wenn ich statt "TMemo(FindComponent(SenderPopUp))" direkt Memo1 oder Memo2 nehme klappt das Einwand frei.

Pr0g 1. Apr 2005 19:31

Re: Welches Objekt hat PopUp geöffnet?
 
Das wird daran liegen, das FindComponet nichts findet, in dem String also nichts, oder was falsches steht. Lass dir den String mal mit ShowMessage zu Kontrolle ausgeben.

TheAn00bis 1. Apr 2005 19:36

Re: Welches Objekt hat PopUp geöffnet?
 
Hast recht, kann nicht klappen: SenderPopUp=TPopUpMenu.

Aber warum? Ich weise ihn so zu:

Delphi-Quellcode:
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
SenderPopUp:=Sender.Classname;

end;
Man mit sowas muss ich mich mehr beschäftigen!

Gruber_Hans_12345 1. Apr 2005 19:37

Re: Welches Objekt hat PopUp geöffnet?
 
Entweder den Namen mit
Delphi-Quellcode:
SenderPopUp:=TPopupMenu(Sender).PopupComponent.Name;
oder gleich so
Delphi-Quellcode:
var SenderPopUp:TObject [...]
SenderPopUp:=TPopupMenu(Sender).PopupComponent;

if execute then TMemo(SenderPopUp).lines.loadfromfile(filename);

Binärbaum 1. Apr 2005 19:41

Re: Welches Objekt hat PopUp geöffnet?
 
Zitat:

Zitat von TheAn00bis
Hast recht, kann nicht klappen: SenderPopUp=TPopUpMenu.

Aber warum? Ich weise ihn so zu:

Delphi-Quellcode:
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
SenderPopUp:=Sender.Classname;

end;
Man mit sowas muss ich mich mehr beschäftigen!

Sender.Classname gibt immer nur die Klasse des Senders zurück, nicht den Namen selbst.
Wenn also der Sender Memo1 oder Memo2 wäre, würde Sender.Classname in beiden Fällen "TMemo" sein.

MfG
Binärbaum

Gruber_Hans_12345 1. Apr 2005 19:43

Re: Welches Objekt hat PopUp geöffnet?
 
Zitat:

Zitat von Binärbaum
Sender.Classname gibt immer nur die Klasse des Senders zurück, nicht den Namen selbst.
Wenn also der Sender Memo1 oder Memo2 wäre, würde Sender.Classname in beiden Fällen "TMemo" sein.

MfG
Binärbaum

Aber der Sender ist in diesem Fall das Popupmenu und nicht das Memo.

TheAn00bis 1. Apr 2005 19:45

Re: Welches Objekt hat PopUp geöffnet?
 
Danke, klappt!

Danke für die Erklärung Binärbaum, sonst hätte ich jetzt gefragt, warum das nicht klappt. :)

Zitat:

Zitat von Gruber_Hans_12345
Aber der Sender ist in diesem Fall das Popupmenu und nicht das Memo.

Aber warum giibt mir
Delphi-Quellcode:
SenderPopUp:=TPopupMenu(Sender).PopupComponent;
dann das Memo?

Wegen dem "PopupComponent"?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr.
Seite 1 von 2  1 2      

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