Methode beim Programmstart ausführen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
wernkrau38
Beiträge: 28
Registriert: Di 8. Mär 2016, 11:46
OS, Lazarus, FPC: Windows10
CPU-Target: Win64

Methode beim Programmstart ausführen

Beitrag von wernkrau38 »

In dem beigefügten kleinen Beispiel möchte ich erreichen, daß die Methode Button1
auch schon beim Start des Programms ausgeführt wird.
Was auch ginge: bei den ButtonEvents ONClick und ONEnter eintragen. Dann wird es beim erhalten des Focus ausgeführt.

Aber gibt es nicht eine grundsätzliche Möglichkeit dafür wie in der letzten Zeile der Beep?
Dateianhänge
Start.zip
(3.15 KiB) 66-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Methode beim Programmstart ausführen

Beitrag von theo »

Du solltest das in einem Ereignis des Formulars machen.
z.B. OnCreate, OnShow, OnActivate.

wennerer
Beiträge: 607
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Methode beim Programmstart ausführen

Beitrag von wennerer »

Hallo wernkrau38,
ich weiß natürlich nicht was letztlich dein Ziel ist. Aber wie Theo schon schrieb bieten sich da OnCreate, OnShow, OnActivate an. Im OnCreate kann es dir halt passieren das Daten die du gerne verarbeiten möchtest noch nicht vorliegen. Die anderen Beiden können mehrmals durchlaufen werden. Da kann es dann notwendig sein die mehrmalige Ausführung deines Codes mit einem Flag zu verhindern. Kommt halt drauf an. Eventuell nützt dir mein kleines Beispiel etwas.

Viele Grüße
Bernd
Dateianhänge
project1.zip
(105.53 KiB) 67-mal heruntergeladen

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Methode beim Programmstart ausführen

Beitrag von Socke »

Es gibt auch noch die Möglichkeit, ein Event einmalig beim OnShow zu durchlaufen.

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  AddHandlerFirstShow(@Button1Click);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Hallo');
end;  
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wernkrau38
Beiträge: 28
Registriert: Di 8. Mär 2016, 11:46
OS, Lazarus, FPC: Windows10
CPU-Target: Win64

Re: Methode beim Programmstart ausführen

Beitrag von wernkrau38 »

Ja, das habe ich gesucht.
Man muß sich halt von der historischen Pascal-Programmierung lösen und streng in Objekten und Ereignissen denken.
Herzlichen Dank an Euch alle!

wennerer
Beiträge: 607
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Methode beim Programmstart ausführen

Beitrag von wennerer »

@Socke: Danke für AddHandlerFirstShow. Das kannte ich noch nicht, werde es ab jetzt aber gern benutzen.

Viele Grüße
Bernd

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Methode beim Programmstart ausführen

Beitrag von m.fuchs »

Eigentlich könnte es dafür mal ein eigenes Ereignis im OI geben. OnFirstShow oder sowas. Das ist ja ein recht häufiges Problem.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

siro
Beiträge: 758
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Methode beim Programmstart ausführen

Beitrag von siro »

Ich habe das in meinem Button auch schon länger drin,
dafür gibt es die Eigenschaft FirstClick bei mir:

Wenn Taste down, dann wird nach Loaded OnClick aufgerufen
sofern die Eigenschaft FirstClick auf TRUE steht

Code: Alles auswählen

const DefaultFirstClick = TRUE;  

Type TSiroButton = class(TCustomControl)
  private
    FFirstClick   : Boolean;         // wenn Taste down wird nach Loaded OnClick aufgerufen     

  property FirstClick : Boolean read FFirstClick write FFirstClick   default DefaultFirstClick;

  protected
    procedure Loaded; override;

end;

procedure TSiroButton.Loaded;
begin
  inherited;
  // der erste Klick beim Starten der Anwendung wird manuell ausgelöst
  // sofern FirstClick auf TRUE steht
  if down and FirstClick and Assigned(OnClick) then OnClick(self);
end;
@Socke: AddHandlerFirstShow(@Button1Click); kannte ich auch noch nicht. Danke
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Antworten