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 PopUpMenu: Den Sender ermitteln (https://www.delphipraxis.net/133675-popupmenu-den-sender-ermitteln.html)

BetaBot 6. Mai 2009 22:08


PopUpMenu: Den Sender ermitteln
 
Guten Abend Delphi - Gemeinde,

falls mein Problem so simpel zu lösen ist, vorweg: Ich habe wirklich nach einer Lösung gesucht, komme aber gerade nicht weiter. Hier das Problem: Ich habe eine ListBox und ein Memo zum selben PopUpMenu verlinkt. Dieses Menu hat zwei Items 'größer' und 'kleiner' und je nach Wahl, sollen diese die Schrift vergrößern oder verkleinern. Im OnClickEreignis für das Item 'größer' steht folgendes:
Delphi-Quellcode:
If Sender is TMemo then (Sender as TMemo).Font.Size := (Sender as TMemo).Font.Size + 2;
Der Code wird anstandslos compiliert, aber zur Laufzeit passiert bei OnClick in der Memokomponente nichts. Meine Vermutung: Das Memo ist im OnClickEreignis des PopUpItems gar nicht mehr der Sender.
Ich hoffe, ihr könnt mir helfen und mir möglichst einen Weg weisen, um dieses PopUpMenu auch für andere Komponenten nutzbar zu machen.

Danke bis hierher,

BetaBot

mr_emre_d 6. Mai 2009 22:22

Re: PopUpMenu: Den Sender ermitteln
 
Tipp: In den Klick-Ereignissen der Popupmenüs ist der Sender ein TMenuList Objekt -> das kannst du wie folgt ermitteln:

Delphi-Quellcode:
  ShowMessage( TObject(Sender).ClassName );
deshalb wird Sender is TMemo/TListBox/.. nie wahr sein!

MfG

BetaBot 6. Mai 2009 22:35

Re: PopUpMenu: Den Sender ermitteln
 
hallo mr_emre_d,

auf
Delphi-Quellcode:
ShowMessage( TObject(Sender).ClassName );
in der OnClickRoutine zeigt er die Message 'TMenuItem', also bin ich wohl einen falschen Weg gegangen. Aber wie kann ich denn nun rausfinden, von wo das PopUpMenu aufgerufen wurde?

Hawkeye219 6. Mai 2009 22:41

Re: PopUpMenu: Den Sender ermitteln
 
Hallo,

schau mal in diesen Thread hinein.

Gruß Hawkeye

Satty67 6. Mai 2009 22:43

Re: PopUpMenu: Den Sender ermitteln
 
Nicht getestet und evtl auch nicht 100% sicher:

Im Prinzip müsste nach dem Menü-Klick das ActiveControl des Formulars auf das richtige Memo zeigen. Problem könnte sein, wenn es vorher nicht fokusiert war.


€: Vorschlag davor war besser ;)

markus5766h 6. Mai 2009 22:49

Re: PopUpMenu: Den Sender ermitteln
 
Hallo, definiere den Sender im OnMouseDown - Ereignis.
hierzu kannst Du Dir eine Variable Definieren
z.B.
Delphi-Quellcode:
 
private
PupUpCallObject := TObject;
.
.
.
end;
im OnMouseDown-Ereignis schreibst Du
Delphi-Quellcode:
PopUpCallObject := Sender;
somit wird dein Sender schon vor dem Klick-Ereignis festgelegt
und die Auswertung dürfte kein Problem mehr sein.

BetaBot 6. Mai 2009 22:54

Re: PopUpMenu: Den Sender ermitteln
 
Habe es gerade auch rausgefunden:
Delphi-Quellcode:
procedure TMainForm.grer1Click(Sender: TObject);
begin
  If PopUpMenu1.PopupComponent is TMemo then (PopupMenu1.PopupComponent as TMemo).Font.Size := (PopupMenu1.PopupComponent as TMemo).Font.Size+1
  else If PopUpMenu1.PopupComponent is TListBox then (PopupMenu1.PopupComponent as TListBox).Font.Size := (PopupMenu1.PopupComponent as TListBox).Font.Size + 1;
end;
Das funktioniert nun.
Vielen Dank an euch, die ihr um diese Zeit noch anderen helft.

Gute Nacht,

der BetaBot.

DP-Maintenance 6. Mai 2009 23:04

DP-Maintenance
 
Dieses Thema wurde von "fkerber" von "Neuen Beitrag zur Code-Library hinzufügen" nach "VCL / WinForms / Controls" verschoben.
Kein Vorschlag zur Code-Lib, sondern eine Frage.


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