Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unterschied: OnActivate und OnCreate (https://www.delphipraxis.net/24938-unterschied-onactivate-und-oncreate.html)

NeRoFiX 28. Jun 2004 21:22


Unterschied: OnActivate und OnCreate
 
Klärt mich mal bitte auf was genau der Unterschied ist, bin mir da nicht sicher ob ich was in OnActivate oder in OnCreate meines Formulares reincoden soll .. thx

Nicodius 28. Jun 2004 21:22

Re: Unterschied: OnActivate und OnCreate
 
wieder den focus bekommen und kreieren

alcaeus 28. Jun 2004 21:23

Re: Unterschied: OnActivate und OnCreate
 
OnCreate wird beim Erstellen des Forms aufgerufen, OnActivate jedes Mal sobald es den Focus erhält (AFAIK, ich kann mich aber auch täuschen)

Greetz
alcaeus

[edit]Zu langsam...[/edit]

SirThornberry 28. Jun 2004 21:25

Re: Unterschied: OnActivate und OnCreate
 
Wie die Bezeichnungen schon sagen: OnCreate = beim Create, also im Constructor und somit nur einmal. OnActivate eben beim aktivieren und kanns somit mehr als einmal aufgerufen werden

NeRoFiX 28. Jun 2004 21:36

Re: Unterschied: OnActivate und OnCreate
 
Leute, ihr seid zu schnell für diese Welt .. =) rasend schnelle Antworten hier im Forum.. big up!! .. danke habs gecheckt...

aber .. ehem .. da wir schon mal gerade dabei sind eine Folgefrage:

Warum funktioniert die close-anweisung darin nicht?

Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
    if not fileexists('main.exe')
 then showmessage('Programm muss sich im Hauptverzeichnis befinden');
 close;
end;
:?:

alcaeus 28. Jun 2004 21:38

Re: Unterschied: OnActivate und OnCreate
 
Close schließt das Form, welches zum Zeitpunkt von Create noch nicht existiert. Löse es über einen Timer, der in der OnShow eingeschaltet wird.

Greetz
alcaeus

Nicodius 28. Jun 2004 21:44

Re: Unterschied: OnActivate und OnCreate
 
stell dir vor das form create initialisiert nur ;)

phXql 28. Jun 2004 21:49

Re: Unterschied: OnActivate und OnCreate
 
du kannst auch ein Application.Terminate machen, dann schliests sich das programm auch (ich denke, das is das was du willst, oder?)

NeRoFiX 28. Jun 2004 21:50

Re: Unterschied: OnActivate und OnCreate
 
Zitat:

Zitat von alcaeus
Löse es über einen Timer, der in der OnShow eingeschaltet wird.

hmm.. hab nen timer noch nie in ne procedure direkt eingebunden ... würdest du mal bitte korrigieren oder vervollständigen:
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
    if not fileexists('main.exe')
 then showmessage('Programm muss sich im Hauptverzeichnis befinden');

 form1.OnShow.timer1.Interval[1000]  // <--- wie jetzt hier mit close??
end;

NeRoFiX 28. Jun 2004 21:52

Re: Unterschied: OnActivate und OnCreate
 
Zitat:

Zitat von phXql
du kannst auch ein Application.Terminate machen,

jo will ich ... hab aber auch noch nie damit gearbeitet... muss ich dann application.terminate('main.exe') eingeben??

-edit- lol nur application.terminate ist ausreichend stimmts ?? =) -edit-

alcaeus 28. Jun 2004 21:52

Re: Unterschied: OnActivate und OnCreate
 
leider falsch...
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  if not fileexists('main.exe') then
    showmessage('Programm muss sich im Hauptverzeichnis befinden');
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Timer1.Interval := 250;
  Timer1.Enabled := True;
end;
Im Objektinspektor musst du den Timer natürlich ausschalten

Greetz
alcaeus

NeRoFiX 28. Jun 2004 22:20

Re: Unterschied: OnActivate und OnCreate
 
hmmm... jetzt mal ne gute frage... ich hab jetzt das programm im hauptverzeichnis... starte es und es schliesst sich direkt wieder, aber genau das will ich doch verhindern mit der if-abfrage??? hab es mal mit dem dem application.terminate versucht:
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if not fileexists('main.exe')
  then showmessage('muss sich im hauptverzeichnis befinden');
  begin
  application.terminate; //  <--- soll sich nur schließen wenn programm nicht im hauptverzeichnis
  end;
end;
wieso schließt sich mein programm direkt wieder wenn die if bedingung ja garnicht relevant ist sobald sich die exe im hauptverzeichnis befindet ?? ... brauch ich noch sowas wie ein "else machnormalweiter" ?? sorry aber delphi hats wieder gepackt mich zu verwirren .. :gruebel:

S2B 28. Jun 2004 22:56

Re: Unterschied: OnActivate und OnCreate
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if not fileexists('main.exe') then
  begin
    showmessage('muss sich im hauptverzeichnis befinden');
    application.terminate; //  <--- soll sich nur schließen wenn programm nicht im hauptverzeichnis
  end;
end;
So müsste es gehen! :stupid:

PS: Ich würde noch zur Sicherheit den Dateipfad zur Datei angeben, also so:
Delphi-Quellcode:
if not fileexists(ExtractFilePath(application.exename) + 'main.exe') then
  begin [...]

NeRoFiX 28. Jun 2004 23:20

Re: Unterschied: OnActivate und OnCreate
 
Zitat:

Zitat von S2B
So müsste es gehen! :stupid:

nö .. so hatte ich's ja vorher ... macht den selben effekt: programm beendet sich obwohl es in diesem fall es sich nicht beenden soll ... ich bitte mal jeden das bei sich in nem projekt auszuprobieren .. ..

geht doch gegen die delphi-logik ... :|

S2B 28. Jun 2004 23:22

Re: Unterschied: OnActivate und OnCreate
 
Hast du das mit dem Pfad auch eingebaut :?:
Weiß zwar nicht, ob das was bringt, aber kann ja sein! :roll:

NeRoFiX 28. Jun 2004 23:39

Re: Unterschied: OnActivate und OnCreate
 
nein ohne phad-angabe .. der phad ist ja individuell ... mich würde mal ne einfach lösung interessieren falls es jemand hinbekommnt mit application.terminate in dieser if bedingung wie dann der quellcode aussieht... wie gesagt.. programm schliesst sich auch wenn die if-bedingung wahr oder unwahr ist...


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