Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Application.OnActivate... (https://www.delphipraxis.net/3634-application-onactivate.html)

Ricane 22. Mär 2003 17:11


Application.OnActivate...
 
Moin,

meine Frage ist für die meisten sicherlich sehr einfach, aber ich kriege es leider nicht auf die Reihe...

Ich möchte nur das Event "Application.OnActivate" auslösen, kriege es aber nicht hin ...

Was nun sprach Zeus?


Grüsse,

Ricane

Chewie 22. Mär 2003 17:23

Zeus hat durch das Orakel gesprochen:

Zitat:

Das Ereignis OnActivate wird ausgelöst, wenn eine Anwendung aktiv wird.

property OnActivate: TNotifyEvent;

Beschreibung

Auf Basis von OnActivate können Sie eine Ereignisbehandlungsroutine programmieren, mit der Sie bei der Aktivierung der Anwendung bestimmte Aktionen durchführen können.

Eine Anwendung wird aktiv, wenn sie ausgeführt wird oder der Fokus von einer anderen Windows-Anwendung zu einem beliebigen Fenster der Anwendung wechselt.

Ricane 22. Mär 2003 17:26

Mmhhh.....

soweit war ich ehrlich gesagt auch schon. Ich gucke auch zuerst immer in die Hilfe und wenn da nix gescheites drin steht, wende ich mich ans Forum ...

Ä bisschle konkräta büdde !


Greetz,

Ricane

Salomon 22. Mär 2003 17:30

Form1 auswählen -> Object Inspector -> Events -> ein Doppelklick bei "OnActivate" .
Meinst du das?

Chewie 22. Mär 2003 17:39

Du sagtest, du wolltest dieses Ereignis auslösen. Für mich heißt das, du willst, dass die Ereignisroutine, die du in Application.OnActivate geschrieben hast, ausgelöst wird. Und laut der Hilfe ist das jedesmal der Fall, wenn deine Anwendung wieder den Fokus bekommt.

Christian Seehase 22. Mär 2003 23:55

Moin Chewie,

nicht ganz.
Wenn das Programm den Focus erhält wird das OnActivate des Application Objektes ausgelöst (das des Formulares nur einmal zu Beginn).
Hintergrund des Ganzen ist, dass ein jedes fensterorientiertes Delphiprogramm aus mindestens zwei Fenstern besteht.
Zum einen ein unsichtbares Fenster (das des Application Objektes) und das, diesem untergeordnete, Hauptformular (z.B. Form1).

Soll also nun bei jedem Aktvieren des Programmes etwas passieren, so muss man Application.OnActivate eine entsprechende Routine zuornden, und nicht Form1.OnActivate.

Chewie 23. Mär 2003 13:12

Zitat:

Zitat von Christian Seehase
Soll also nun bei jedem Aktvieren des Programmes etwas passieren, so muss man Application.OnActivate eine entsprechende Routine zuornden, und nicht Form1.OnActivate.

Was verstehst du jetzt genau unter "Aktivieren"? Das Starten des Programmes oder das "Den-Fokus-Bekommen"?
Ich werde nämlich (leider) aus deinem Post nicht allzu schlau.

Daniel B 23. Mär 2003 13:27

Zitat:

Zitat von Chewie
Was verstehst du jetzt genau unter "Aktivieren"? Das Starten des Programmes oder das "Den-Fokus-Bekommen"?
Ich werde nämlich (leider) aus deinem Post nicht allzu schlau.

Beides. Beim Programmstart erhält das Programm ja auch den Fokus.
Du kannst es einfach ausprobieren, schreibe im OnActivate des Formulares einfach mal eine ShowMessage('');, dann wirst Du schon sehen wie oft es kommt. Beim hin und her schalten zwischen programmen, Minimieren, Maximieren, einfach mal damit Spielen.

Grüsse, Daniel :hi:

Chewie 23. Mär 2003 13:29

Eben. Nur verstehe ich dann Christian Seehases Post nicht.

Daniel B 23. Mär 2003 14:05

Jetzt hab ich ein bisschen Schmarrn erzählt.
OnActivate tritt eigentlich nur einmal ein, so ähnlich wie OnCreate. Nur, OnActivate tritt auch noch ein wenn die Anwendung(also TApplication) den Fokus erhält, aber nicht das Formular.

Oder auch anders gesagt:
Kontrolle wird von einem Fenster aus einer anderen Anwendung zu einem Fenster dieser Anwendung übertragen wird.

Grüsse, Daniel :hi:

Ricane 23. Mär 2003 14:06

Also,

vielleicht habe ich mich ja auch etwas undeutlich ausgedrückt...

Das Ereignis
Code:
procedure TForm1.FormActivate(Sender: TObject);
begin

end;
ist nicht gemeint. Dann wird nur beim starten der Form das Event ausgelöst. Ich möchte aber das das Ereignis jedesmal ausgelöst wird, wenn die Form den Fokus erhält. Das wäre dann
Code:
Application.OnActivate
aber wie bindet man das ein ...


Grüsse,

Ricane

Ricane 23. Mär 2003 14:21

Ahh ....

jetzt habe ich es zufällig selbst gefunden. Es gibt ein Steuerelement welches sich um diese Events kümmert. Das Element heisst "ApplicationEvents"


Grüsse,

Ricane

jbg 23. Mär 2003 16:15

Zitat:

Zitat von Christian Seehase
Wenn das Programm den Focus erhält wird das OnActivate des Application Objektes ausgelöst (das des Formulares nur einmal zu Beginn).

Um es mit deinen eigenen Worten zu sagen: "nicht ganz"
Wenn man nur 1 Formular hat, dann stimmt deine Aussage. Hat man hingegen mehrere Formulare, so wird TForm.OnActivate sehr wohl häufiger aufgerufen.

Snoopy240871 16. Apr 2003 16:48

ApplicationActivate
 
:dancer:

Also wenn ich richtig vermute was du meinst ist dies ganz einfach...


1. Füge zuerst im "FormCreate" Ereignis den folgenden Code ein

procedure TForm1.FormCreate(Sender: TObject);
begin
with Application do
begin
OnMinimize:=ApplicationMinimize;
OnRestore:=ApplicationRestore;
OnActivate:=ApplicationActivate;
end;
end

2. Erzeuge dann unter "Private" die entsprechenden Prozedur Deklarationen

procedure ApplicationMinimize(Sender: TObject);
procedure ApplicationRestore(Sender: TObject);
procedure ApplicationActivate(Sender:TObject);

3. Anschließend im Implementation's teil entsprechend die Ereignisse füllen


procedure TForm1.ApplicationActivate(Sender: TObject);
begin
ShowMessage('Mein Anwendung wurde grade aktiviert !');
end;

entsprechendes gilt für ApplicationRestore und ApplicationMinimize
Gruß Martin...


end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz