Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [FMX] wie Button.Click aufrufen? (https://www.delphipraxis.net/217747-%5Bfmx%5D-wie-button-click-aufrufen.html)

himitsu 30. Aug 2025 07:08

Delphi-Version: 12 Athens

[FMX] wie Button.Click aufrufen?
 
Moin Moin,

was ist bitte der offizielle Weg, ein Button.Click im FMX auszulösen?
Das ist ja protected, als wenn jemand nicht wöllte, dass man es macht. (nicht ausversehn vergessen, denn auch andere Methoden sind protected, selbst in anderen Komponenten)

* In der VCL ist auch Vieles im TCustomIrgendwas noch protected, aber wird TIrgendwas dann public oder gar published. (nur hier nicht)
* ja, ich kann Casten
* könnte anderes Aufrufen, was wiederum Click aufruft, aber die sind auch ALLE protected
* SendMessage/PostMessage/Perfom fällt auch aus
* eine Action anhängen und da ein Excecute
* einen Mausklick auslösen/simmulieren (auf der echten Maus, weil auch MouseDown und Co. ebenfalls protected sind)
* manuell ganz persönlich draufklicken
* oder direkt die OnClick-Methode aufrufen
* ...

Kann doch nicht sein, dass bisher nur wenige sowas machen wollten? :gruebel:
Aber bin wenigstens nicht der Einzige.
https://stackoverflow.com/questions/...-in-firemonkey

Cypheros 30. Aug 2025 09:17

AW: [FMX] wie Button.Click aufrufen?
 
Das ist einer der Gründe warum ich FMX ungern einsetze. Es fühlt sich einfach so fremd an. Viele Selbstverständlichkeiten beim Arbeiten mit VCL, sind unter FMX unnötig kompliziert oder wenig nicht intuitiv.

Allerdings sollte man auch keine umfangreichen Prozeduren in Events packen, sondern dazu eine eigene Prozedur schreiben, die dann über den Event (OnClick) oder eben einer anderen Routine aufgerufen werden kann. Ist vielleicht eine erzieherische Maßnahme von Emba :wink:

jaenicke 30. Aug 2025 10:18

AW: [FMX] wie Button.Click aufrufen?
 
Zitat:

Zitat von himitsu (Beitrag 1551335)
was ist bitte der offizielle Weg, ein Button.Click im FMX auszulösen?
Das ist ja protected, als wenn jemand nicht wöllte, dass man es macht.

Da das kein sauberer Code ist, finde ich es schon gut, dass es diesen Weg nicht gibt. Ich finde es im Gegenteil äußerst fragwürdig, dass es das in der VCL gibt.

Dieses ganze Klammern von zu viel Code direkt an GUI-Elemente ist leider ein negativer Effekt der WYSIWYG-IDE. Sauber ist, wenn man im Klick-Event eine sauber benannte Methode aufruft, die auch aussagt, was dort passiert. Und noch besser ist, wenn diese gar nicht in der gleichen Unit liegt, bzw. zumindest der Logik-Teil außerhalb der GUI-Logik woanders liegt. Und die ruft man dann überall auf, wo das passieren soll.

Wenn man diese Trennung von GUI und Logik sauber macht, vermisst man auch nicht Methoden wie Click.

himitsu 30. Aug 2025 10:27

AW: [FMX] wie Button.Click aufrufen?
 
Dort ist nicht viel drin, aber zu Debugzwecken wollte ich das vorhin nun einfach beim Start automatisch ausgelöst haben. :oops:

quasi
Delphi-Quellcode:
procedure TFormMain.FormShow(Sender: TObject);
begin
  if IsDebuggerPresent then
    ButtonStart.Click;
end;
und nun ist das einfach
Delphi-Quellcode:
ButtonStartClick(nil);
was ich aber noch schlimmer finde, als das oben.



Das ist aktuell ein kleines Testprojekt, was nur aus einem Grid, einem Button und zwei drei Prozeduren plus dem OnShow besteht.

jaenicke 30. Aug 2025 12:23

AW: [FMX] wie Button.Click aufrufen?
 
Zitat:

Zitat von himitsu (Beitrag 1551339)
und nun ist das einfach
Delphi-Quellcode:
ButtonStartClick(nil);
was ich aber noch schlimmer finde, als das oben.

Ist es ja auch, aber es geht mit kaum mehr Aufwand ja auch sauber, Testprojekt hin oder her:
Delphi-Quellcode:
procedure TFormMain.StartRunningCalculation;
begin

end;

procedure TFormMain.ButtonStartClick(Sender: TObject);
begin
  StartRunningCalculation;
end;

procedure TFormMain.FormShow(Sender: TObject);
begin
  if IsDebuggerPresent then
    StartRunningCalculation;
end;


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