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?

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
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.962 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 29. Aug 2023, 19: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
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

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

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

  Alt 29. Aug 2023, 19: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.378 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 29. Aug 2023, 20: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;
Ein Therapeut entspricht 1024 Gigapeut.

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

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

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

  Alt 29. Aug 2023, 20: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.
Ein Therapeut entspricht 1024 Gigapeut.

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

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

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

  Alt 29. Aug 2023, 20:25
Ich habe es wie vorgeschlagen manuell gemacht und es klappt nun.
Zum Testen wird der Menu Text in das buttonededit control eingefügt.
Angehängte Grafiken
Dateityp: png 2023-08-29_21-22-24.png (28,3 KB, 23x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 29. Aug 2023, 20:31
Im onLeftButtonClicked besser mnuMarker.PopupComponent := TButtonedEdit(Sender).LeftButton; nutzen,
falls/wenn sie den Bug im nächsten Jahrtausend repariert haben

Und dann kannst du auch if TPopupMenu(Sender).PopupComponent = DeinButtonedEdit.LeftButton then ...


Und Quellcode bitte als [delphi] ... [/delphi].
Aus dem Foto kann man keine Namen rauskopieren
und unten, in der Übersicht, sieht man deinen Code auch nicht, um nochmal reinzusehn.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Aug 2023 um 20:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.652 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 29. Aug 2023, 22:03
Ich hatte es schon in der DP-EN gepostet: Kannst du bitte einen QP-Eintrag aufmachen? Es gibt schon einen ähnlichen Eintrag für SplitButtons RSP-33837
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:38 Uhr.
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