Ereignis für Startprozedur
Ereignis für Startprozedur
Hallo,
kann mir jemand das Ereignis nennen welches man benutzen muss um nach dem Start einer Anwendung sofort etwas laufen zu lassen.
Dabei sollte das Hauptfenster schon voll aufgebaut auf dem Bildschirm zu sehen sein.
Bei "OnPaint" ist das Hauptfenster noch nicht vollständig.
Bei "OnCreate", "OnShow", "OnActivate", .. ist das Fenster noch nicht zu sehen und erscheint erst nach Ablauf der Startprozedur.
Hartmut
kann mir jemand das Ereignis nennen welches man benutzen muss um nach dem Start einer Anwendung sofort etwas laufen zu lassen.
Dabei sollte das Hauptfenster schon voll aufgebaut auf dem Bildschirm zu sehen sein.
Bei "OnPaint" ist das Hauptfenster noch nicht vollständig.
Bei "OnCreate", "OnShow", "OnActivate", .. ist das Fenster noch nicht zu sehen und erscheint erst nach Ablauf der Startprozedur.
Hartmut
- af0815
- Lazarusforum e. V.
- Beiträge: 6835
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Ereignis für Startprozedur
Bsp: In OnActivate einen Timer starten (und gegen nochmaliges Aufrufen verriegeln) und dann in der Timerprozedure das was man will starten.
OnActivate ist deshalb gut, weil es unmittelbar vor jedem aktivwerden des Fensters kommt.
OnActivate ist deshalb gut, weil es unmittelbar vor jedem aktivwerden des Fensters kommt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Ereignis für Startprozedur
Ich würde es so machen:
Code: Alles auswählen
procedure TForm1.Async(Data: PtrInt);
begin
ShowMessage('test');
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Application.QueueAsyncCall(@Async,0);
end;
Re: Ereignis für Startprozedur
mit PostMessage eine message schicken.. an form.handle
oder einen normalen timer (der ist auch message basiert) mit 0ms verwenden (im formShow aktivieren) und beim execute wieder deaktivieren)
edit: QueueAsyncCall schaut eleganter aus, gibt es aber unter delphi nicht (falls da ein kriterium wäre...)
oder einen normalen timer (der ist auch message basiert) mit 0ms verwenden (im formShow aktivieren) und beim execute wieder deaktivieren)
edit: QueueAsyncCall schaut eleganter aus, gibt es aber unter delphi nicht (falls da ein kriterium wäre...)
Re: Ereignis für Startprozedur
Hallo theo und die anderen,theo hat geschrieben:Ich würde es so machen:
Code: Alles auswählen
procedure TForm1.Async(Data: PtrInt); begin ShowMessage('test'); end; procedure TForm1.FormShow(Sender: TObject); begin Application.QueueAsyncCall(@Async,0); end;
vielen Dank für die schnellen Anworten.
Welche von den Prozeduren muss ich an "OnActivate" hängen?
Vielen Dank Hartmut
Re: Ereignis für Startprozedur
Wie meinst du das?Kegel hat geschrieben: Welche von den Prozeduren muss ich an "OnActivate" hängen?
OnShow -> procedure TForm1.FormShow(Sender: TObject);
Re: Ereignis für Startprozedur
Hallo theo,theo hat geschrieben:Wie meinst du das?Kegel hat geschrieben: Welche von den Prozeduren muss ich an "OnActivate" hängen?
OnShow -> procedure TForm1.FormShow(Sender: TObject);
jetzt funktioniert es - vielen Dank - habe die (meine) FormShow an "OnShow" (in der IDE) hinterlegt.
Beim Compilieren komm zwar "Hint Parameter Data not used" aber das ist egal.
Und so ricthig verstehen tu ich es auch noch nicht.
Vielen Dank Hartmut
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Ereignis für Startprozedur
Du kannst meines Wissens durch Komplierschalter auch die Ausgabe von Hinweisen verhindern.
@Theo
Wie wäre es, deinen Tipp in die "Wissens-DB" einzubringen ? Das ist zwar keine Standard Frage, aber dafür gibt es ja bereits andere Foren. Ich meine diesen hier "http://www.lazarusforum.de/viewtopic.php?f=21&t=1043&view=unread#unread"
@Theo
Wie wäre es, deinen Tipp in die "Wissens-DB" einzubringen ? Das ist zwar keine Standard Frage, aber dafür gibt es ja bereits andere Foren. Ich meine diesen hier "http://www.lazarusforum.de/viewtopic.php?f=21&t=1043&view=unread#unread"
MFG
Michael Springwald
Michael Springwald
Re: Ereignis für Startprozedur
Da gibt's schon was im Wiki:pluto hat geschrieben: Wie wäre es, deinen Tipp in die "Wissens-DB" einzubringen ?
http://wiki.lazarus.freepascal.org/Asynchronous_Calls" onclick="window.open(this.href);return false;
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Ereignis für Startprozedur
Noch eine Variante: Ich verbinde Application.OnIdle in OnCreate und innerhalb der DoIdle()-Methode setze ich dann Application.OnIdle auf nil.
-
- 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: Ereignis für Startprozedur
Es gibt auch einen Event-Handler, der nur beim ersten Aufruf eines Formulars ausgeführt wird. OnFromShow wird bei jedem Anzeigen ausgeführt (minimieren, verstecken, etc.).
Dazu braucht man nur eine Funktion vom Typ TNotifyEvent und man muss diese Funktion manuell (in OnCreate oder im Constructor) registrieren:
Dazu braucht man nur eine Funktion vom Typ TNotifyEvent und man muss diese Funktion manuell (in OnCreate oder im Constructor) registrieren:
Code: Alles auswählen
procedure TForm1.FirstShow(Sender: TObject);
begin
// was getan werden muss
end;
procedure TForm1.OnCreate(Sender: TObject); // muss mit OnCreate verknüpft sein
begin
Self.AddHandlerFirstShow(@FirstShow);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Ereignis für Startprozedur
Ich hätte ja einfach eine Boolean Variable genommen und sie unter z.b. onActivate gepackt und dort auf True gestellt. bei OnCrete würde ich sie mit False belegen.
MFG
Michael Springwald
Michael Springwald
-
- 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: Ereignis für Startprozedur
Wie wir sehen, führen viele Wege nach Rom und einige sogar zu einem Segmentation Fault (also die Klippe runter oder so) 

MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: Ereignis für Startprozedur
Meines Wissens wird FormShow nur beim ersten Anzeigen und bei Show(); bzw. Visible:=true; aufgerufen.Socke hat geschrieben:OnFromShow wird bei jedem Anzeigen ausgeführt (minimieren, verstecken, etc.).
Andere Fälle sind mir nicht bekannt.
Für ein Hauptfenster also normalerweise nur beim Start.
Ist also unbedenklich für Hauptfenster, wenn man es nicht hidet, was eigentlich nie der Fall sein sollte.