AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Von welcher Komponente kommt popup-Aufruf

Ein Thema von idefix2 · begonnen am 28. Apr 2015 · letzter Beitrag vom 29. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2      
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Von welcher Komponente kommt popup-Aufruf

  Alt 28. Apr 2015, 23:38
Hallo, ich stehe wieder einmal auf dem Schlauch.

Ich habe ein Popumenu, das ich verschiedenen Komponenten eines Formular zuordne. Wie kann ich in der onclick-Routine eines TMenuitem auf einfache Art feststellen, auf welche Komponente geklickt wurde, um das Popup-menu zu öffnen?
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Von welcher Komponente kommt popup-Aufruf

  Alt 29. Apr 2015, 00:13
Hi,

meinst du sowas?
Delphi-Quellcode:
procedure TfrmMain.mntmN32Click(Sender: TObject);
var
  LMenuItem : TMenuItem;
begin
  LMenuItem := TMenuItem(Sender);

  ShowMessage(LMenuItem.Caption);
end;
Du kannst das Sender als diese Komponente casten die sie wirklich ist. z.B. TButton(Object), TLabel(Object) usw...

Freundliche Grüsse
Milos
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Von welcher Komponente kommt popup-Aufruf

  Alt 29. Apr 2015, 00:17
Dafür gibt es doch was von ...
http://docwiki.embarcadero.com/Libra...PopupComponent

@milos

Jeder Event, der von dem TPopupMenu ausgelöst wird hat als Sender ... das TPopupMenu
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (29. Apr 2015 um 00:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Von welcher Komponente kommt popup-Aufruf

  Alt 29. Apr 2015, 00:18
Erst beim 2. mal richtig kapiert was du wolltest

Hier ein bisschen Code für alles:
Delphi-Quellcode:
procedure TfrmMain.mntmN32Click(Sender: TObject);
var
  LMenuItem : TMenuItem;
  LPopupMenu : TPopupMenu;
  LParentComponent : TComponent;
begin
  LMenuItem := TMenuItem(Sender);
  LPopupMenu := TPopupMenu(LMenuItem.GetParentMenu);
  LParentComponent := TComponent(LPopupMenu.PopupComponent); // Komponente auf der TPopupMenu liegt

  ShowMessage(LParentComponent.Name);
end;
Milos
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Von welcher Komponente kommt popup-Aufruf

  Alt 29. Apr 2015, 00:31
@milos

Wieso ein TComponent nochmals zu einem TComponent casten?

Noch componentiger geht nicht

Und wenn das Popup poppt, dann feuert
http://docwiki.embarcadero.com/Libra...upMenu.OnPopup
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Von welcher Komponente kommt popup-Aufruf

  Alt 29. Apr 2015, 00:58
...Noch componentiger geht nicht
Genau deswegen

Nee, hab den 2. Code einfach in der universal IDE "notepad.exe" erweitert, hab nicht sehen können, dass es schon ein TComponent ist
Milos
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: Von welcher Komponente kommt popup-Aufruf

  Alt 29. Apr 2015, 01:05
Danke.
Ich habe die Dokumentation von TMenuitem von vorne nach hinten nach irgendetwas brauchbarem durchsucht, aber eigentlich ist es logisch, dass die Eigenschaft zum Popupmenu gehört und nicht zum Menuitem.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

AW: Von welcher Komponente kommt popup-Aufruf

  Alt 29. Apr 2015, 12:04
So, jetzt habe ich in dem Zusammenhang noch ein Problem:
Durch einen Klick mit der linken Maustaste wird in der TListbox der Itemindex auf das Element gesetzt, auf das geklickt wurde.
Bei einem Klick mit der rechten Maustaste passiert das aber nicht, es wird das Popup-menü aufgerufen, aber der Itemindex bleibt unverändert, unter Umständen bei einem anderen Item als bei dem, auf das geklickt wurde.
Ich würde aber gerne auch bei einem Rechtsklick manche der Menüaktionen spezifisch für ein bestimmtes Item der Listbox machen, ohne dass der User erst mit der linken Taste das Item anklicken muss, bevor er rechts klickt.

Dazu wollte ich zusätzlich zum Popupmenü in einem Onmousedown-Event der Listbox den itemindex richtig setzen. Das funktioniert aber nicht, weil durch das Onmousedown Ereignis das popupmenü offenbar unterdrückt wird, der Mausklick wird anscheinend dadurch "verbraucht" und weitere Aktionen finden nicht statt.
Und wenn ich in der Onmousedown Routine am Ende ein TListbox(sender).popupmenu.popup(x,y) aufrufe, bekomme ich

Code:
Zugriffsverletzung bei Adresse 00903A8E in Modul 'FocusOffice.exe'. Lesen von Adresse 00000000.
---------------------------
OK  
---------------------------
Im Debugger habe ich überprüft, dass Sender die richtige TListbox ist und das dort referenzierte Popupmenü das ist, das ich brauchen würde.

Geändert von idefix2 (29. Apr 2015 um 12:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#9

AW: Von welcher Komponente kommt popup-Aufruf

  Alt 29. Apr 2015, 12:15
PopupComponent ist, so wie es auch in der OH steht, nur gültig, wenn es über Rechtsklick "automatisch" aufgerufen wurde.

Was mußt du also machen, wenn du es dennoch benutzen willst?





Delphi-Quellcode:
TListBox(Sender).PopupMenu.PopupComponent := TListBox(Sender);
TListBox(Sender).PopupMenu.Popup(X, Y);
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Von welcher Komponente kommt popup-Aufruf

  Alt 29. Apr 2015, 12:58
Am saubersten wäre ja die Methode Delphi-Referenz durchsuchenTListBox.OnContextPopup mit Leben zu füllen und dort den gewünschten Eintrag zu selektieren, so es denn gewünscht ist.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:25 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