Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi was macht eigentlich FormActivate (https://www.delphipraxis.net/1446-macht-eigentlich-formactivate.html)

Helmut 27. Nov 2002 19:28


was macht eigentlich FormActivate
 
Hallo.

Ich hab in meinem Programm
procedure TForm1.FormActivate(Sender: TObject);

ohne eigentlich zu wissen was die eigentlich macht. :oops:
Jetzt brauch ich wahrscheinlich einen Ersatz für diese funktion, da formactivate anscheinend nur einmal geht.

Also ich hab 2 Forms.

Form2 startet zuerst, dort gibt der benutzer einstellungen an. Dann wird form1 aufgerufen. In form 1 werden in der prozedur formactivate verschiedene Werte festgelegt, die aber auch auf einen Knopfdruck festgelegt werden sollen.

Also meine Frage ist erstmal: wann wird formactivate aktiv? Immer wnen ich mit der maus auf die form klicke, oder imemr wenn ich es von minimized auf maximized stelle?
Kann ich über einen knopfdruck form1.formactivate aufrufen? (weil ich will nicht den ganzen quellext nochmal extra auf einen Button legen...)

mfg
Helmut [es ist schon peinlich der Starter der obersten zwei threats zu sein... :oops: :lol: ]

RomanK 27. Nov 2002 19:32

Zitat:

Helmut [es ist schon peinlich der Starter der obersten zwei threats zu sein... ]
Nein, wenn jemand Fragen stellt dann muss er sich in unserem Forum nicht schämen!! 8)

Das sollte helfen:
http://www.delphipraxis.net/viewtopic.php?t=200

Luckie 27. Nov 2002 19:45

Form1.Activate wird immer dann ausgeführt, wenn dein Fenster aktiviert wird, also aus der Taskbar wiederhergestellt wird oder wieder den Focus erhält.

Helmut 27. Nov 2002 21:03

Ah, danke! Hat mir auf jedne fall weitergeholfen.

Ich habe in der activate-prozedur einigen code drin der nur aufgerufen werden soll wenn die form1 auf visible gesetzt wird. (in form2 ist die prozedur drin die auf einen knopfdruck die form1 visible macht, allerdings erhalte ich zugriffsverletzungen wenn ich den code aus der activate-prozedur dort reinsetze).

Hm... jemand eine Idee? :roll: :roteyes:

mfg
Helmut

Christian Seehase 27. Nov 2002 21:33

Moin Helmut,

das setzen der Eigenschaft Visible auf eines Formulares korrespondiert mit dem Ereignis OnShow (visible := true) bzw. OnHide (visible := false).

Helmut 28. Nov 2002 06:47

ahh, genau das hab ich gesucht! :D Danke!

mfg
Helmut

Christian Seehase 28. Nov 2002 12:48

Moin Luckie,

also bei mir wird OnActivate nur einmal aufgerufen.
Bei Aktivieren, oder Wiederstellen aus der Taskleiste passiert das nicht.
Wohl auch ein Grund, warum ich bislang keinen sinnvollen Verwendungszweck für dieses Ereignis gefunden habe ;-)

NiLS-Da-BuBi 29. Nov 2002 09:27

Hmm genau das Ereigniss such ich gerade... Ich habe neben meinem Hauptprogramm ein kleines Fenster mit Informationen das soll aber immer oben links neben dem Hauptprogramm sein. Da hab ich eine kleine Funktion die da heisst: Reposition - die macht nichts weiter als die "Top" Values gleich zusetzen und dann noch left zu bestimmen. So nun bewegt der User aber das Hauptprogramm - dann müsste ja wieder Repostition aufgerufen werden damit mein kleines Infofenster neu positioniert wird... Wo schreib ich das am besten rein? Momentan hab ich es in der OnMouseMove Ereignissroutine des Hauptfensters... bin ich aber nicht sooooo zufrieden mit - da gibts doch sicher was passenderes, oder?

Christian Seehase 29. Nov 2002 10:30

Moin Nils,

ist zwar noch verbesserungsfähig, aber so ginge es.
Man fängt die Message WM_MOVING ab, die gesendet wird, wenn das Fenster bewegt wird.
LParam ist dann der Pointer auf ein Rect Struktur, die die jeweils aktuellen Koordinaten enthält.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
  protected
    procedure WndProc(var msg : TMessage); override;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses Unit2;

{$R *.DFM}

procedure TForm1.WndProc(var msg : TMessage);

var
  prtWork : PRect;

begin
  if msg.Msg = WM_MOVING then
  begin
    prtWork   := PRect(msg.LParam);
    Form2.Top := prtWork.Top;
    Form2.Left := prtWork.Left-Form2.Width;
  end;
  inherited WndProc(msg);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Form2.Top := self.Top;
  Form2.Left := self.Left - Form2.Width;
  Form2.Show;
end;

NiLS-Da-BuBi 5. Dez 2002 07:51

Danke Chris. Das ist ja wirklich TOP... Wurde sofort in meine Code-Sammlung aufgenommen und auch schon angewendet. Hab auch sofort negativ Feedback bekommen da bei eingaben im Hauptfenster der Focus immer zum Sub-Fenster sprang - aber das hab ich mittlerweile auch in den griff bekommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 Uhr.
Seite 1 von 2  1 2      

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