AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?
Thema durchsuchen
Ansicht
Themen-Optionen

TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

Ein Thema von softtouch · begonnen am 29. Aug 2023 · letzter Beitrag vom 30. Aug 2023
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#1

TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 19:43
Ich habe mehrere TButtonEdit controls, alle haben linken und rechten button sichtbar.
Die linken buttons haben alle das gleiche TPopupmenu als dropdown menu zugewiesen bekommen.
Wenn ich nun einen Menu Eintrag auswähle, wie weiss ich dann, welches TButtonEdit control das Popup menu angezeigt hat, damit ich im richtigen edit Feld Änderungen vornehmen kann?
Die property TPopupMenu.PopupCompopnent scheint nur bei normalen popup menus zu funktionieren, bei einem Dropdown menu ist es immer nil.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 20:37
Normal via Delphi-Referenz durchsuchenTPopupMenu.PopupComponent


falls hier der Button und nicht das ButtonEdit übergeben wird.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (29. Aug 2023 um 20:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#3

AW: TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 20:41
Normal via Delphi-Referenz durchsuchenTPopupMenu.PopupComponent


falls hier der Button und nicht das ButtonEdit übergeben wird
Wenn ich das popupmenu in die dropdownmenu property eintrage, klappt das nicht, da ist popupcomponent immer nil.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 20:44
Der Aufrufer muß das übergeben, also der Button des ButtonEdit.

* Manche vergessen es zu setzen
* und Andere achten nicht richtig drauf, was sie übergeben, bei solchen kombinierten Komponenten.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 20:49
Der Quelltext sieht so aus:
Delphi-Quellcode:
    WM_LBUTTONDOWN:
      if FButton.FDropDownMenu <> nil then
      begin
        if not (csDesigning in Parent.ComponentState) then
        begin
          LPoint := ClientToScreen(Point(0, FButton.EditControl.Height));
          FButton.FDropDownMenu.Popup(LPoint.X, LPoint.Y);
        end;
      end
Heißt:
Du hast keinerlei Information, welcher Button dahintersteckt. Das Menü wird einfach nur an Punkt X/Y aufgemacht.

Einziger Weg:
Nachschauen, welcher Button an der Popupstelle liegt. Schön ist das nicht.

Warum klonst du nicht einfach das Menü beim Start des Programms und gibst jedem Button eine eigene Kopie? Dann packst du eine ID in die Eigenschaft Tag (oder nennst das Menü in Name wie den Button plus einen kleinen Zusatz) und kannst die Menüs (und damit die Buttons dazu) so voneinander unterscheiden.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#6

AW: TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 20:49
Der Aufrufer muß das übergeben, also der Button des ButtonEdit.

* Manche vergessen es zu setzen
* und Andere achten nicht richtig drauf, was sie übergeben, bei solchen kombinierten Komponenten.
popupcomponent ist definitiv NIL.
popupcomponent ist nur gesetzt, wenn ich das menu in der popupmenu property eintrage, jedoch NIl wenn ich es in der dropdownmenu property eintrage.
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#7

AW: TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 20:50
Der Quelltext sieht so aus:
Delphi-Quellcode:
    WM_LBUTTONDOWN:
      if FButton.FDropDownMenu <> nil then
      begin
        if not (csDesigning in Parent.ComponentState) then
        begin
          LPoint := ClientToScreen(Point(0, FButton.EditControl.Height));
          FButton.FDropDownMenu.Popup(LPoint.X, LPoint.Y);
        end;
      end
Heißt:
Du hast keinerlei Information, welcher Button dahintersteckt. Das Menü wird einfach nur an Punkt X/Y aufgemacht.

Einziger Weg:
Nachschauen, welcher Button an der Popupstelle liegt. Schön ist das nicht.

Warum klonst du nicht einfach das Menü beim Start des Programms und gibst jedem Button eine eigene Kopie? Dann packst du eine ID in die Eigenschaft Tag (oder nennst das Menü in Name wie den Button plus einen kleinen Zusatz) und kannst die Menüs (und damit die Buttons dazu) so voneinander unterscheiden.
Ja, das scheint wohl die einzigste Möglichkeit zu sein.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 21:03
Zwei Popupmenüs (die Items kann man ja kopieren lassen)

oder das Popup selber aufrufen. (anstatt es dem Button zuzuweisen)
Delphi-Quellcode:
procedure TForm4.ButtonedEdit1LeftButtonClick(Sender: TObject);
var
  P: TPoint;
begin
  P := ButtonedEdit1.ClientToScreen(Point(8, 8)); // P := Screen.CursorÄhhhhhhhh; .., OK oder GetCursorPos(P);
  PopupMenu1.PopupComponent := TComponent(1); // ein Dummy-Objektzeiger, außer du hast ein richtiges Objekt dafür
  PopupMenu1.Popup(P.X, P.Y);
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (29. Aug 2023 um 21:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 21:15
Wisst ihr, was daran auch noch schlimm ist, wenn jemand das garnicht zuweist?

Sie hätten wenigstewns NIL zuweisen müssen, denn
Delphi-Quellcode:
procedure TForm4.PopupMenu1Popup(Sender: TObject);
begin
  if Assigned(PopupMenu1.PopupComponent) then
    ShowMessage(PopupMenu1.PopupComponent.ClassName + ' ' + PopupMenu1.PopupComponent.Name)
  else
    ShowMessage('nil');
end;
und nun häng das Popup an diese Buttons und an diese oder eine andere Komponente.

* auf Button linksklicken = nil
* auf die Komponente oder Button rechtsklicken = Komponentenname
* nochmal auf Button linksklicken = NICHT nil


[add]
Vor allem gibt es Referenzen, welche man verwenden kann, denn .LeftButton und .RightButton werden rausgegeben.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (29. Aug 2023 um 21:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#10

AW: TButtonEdit, buttons und dropdown menu - wie Aufrufer finden?

  Alt 29. Aug 2023, 21:25
Ich habe es wie vorgeschlagen manuell gemacht und es klappt nun.
Zum Testen wird der Menu Text in das buttonededit control eingefügt.
Miniaturansicht angehängter Grafiken
2023-08-29_21-22-24.png  
  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:14 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