Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Serververbindung nach FormCreate (https://www.delphipraxis.net/205098-serververbindung-nach-formcreate.html)

lukdelphias 31. Jul 2020 09:27

Serververbindung nach FormCreate
 
Hallo liebes Forum,

Ich möchte gerne eine Serververbindung automatisch direkt noch der FormCreate aber noch vor der ersten Interaktion mit dem Programm einrichten.
Wie würdet ihr das ganze machen?
Bin gerade nicht so kreativ.

Grüße

KodeZwerg 31. Jul 2020 09:39

AW: Serververbindung nach FormCreate
 
Ein Ansatz wäre in der .dpr Datei vor dem ganzen Forms gedöns.

lukdelphias 31. Jul 2020 09:41

AW: Serververbindung nach FormCreate
 
Ich würde es schon ganz gerne mit in meine mainApp.pas reinbekommen... zumindest wäre mir das am liebsten wenn es denn eine Möglichkeit gibt:?

Dalai 31. Jul 2020 09:44

AW: Serververbindung nach FormCreate
 
TForm.OnShow?

Grüße
Dalai

Klaus01 31. Jul 2020 09:45

AW: Serververbindung nach FormCreate
 
Zitat:

When a form is being created and its Visible property is true, the following events occur in the order listed:

OnCreate
OnShow
OnActivate
OnPaint
Grüße
Klaus

lukdelphias 31. Jul 2020 09:48

AW: Serververbindung nach FormCreate
 
Keine schlechte Idee. Aber wenn ich OnShow richtige verstehe, wird der Code dort ausgeführt kurz bevor die GUI geöffnet wird ist das richtig?
Passieren sollte das ganze allerdings erst wenn die GUI bereits geöffnet ist, das hab ich am Anfang vergessen zu schreiben...
Seht ihr dafür eine Möglichkeit?

Grüße

lukdelphias 31. Jul 2020 09:51

AW: Serververbindung nach FormCreate
 
Also laut Klaus Tipp müsste ja OnShow ausgeführt werden wenn die GUI schon zu sehen ist oder?
Was ist davon jetzt richtig?

Grüße

mikhal 31. Jul 2020 09:52

AW: Serververbindung nach FormCreate
 
OnActivate sollte der richtige Ort sein - aber Vorsicht, sicherstellen, dass deine Verbindung nur beim ersten Aufruf gesetzt wird.

Grüße
mikhal

KodeZwerg 31. Jul 2020 10:01

AW: Serververbindung nach FormCreate
 
Zitat:

Zitat von mikhal (Beitrag 1470903)
OnActivate

Das wird doch gefeuert wenn man den Fokus vom Fenster verliert und wieder bekommt, oder? Bin mir da selbst gerade nicht sicher.

//edit
Zitat:

Use OnActivate to perform special processing when the form receives focus. A form becomes active when focus is transferred to it (when the user clicks on the form, for example).

Note: The OnActivate event of the application (TApplication), not the form, occurs when Windows switches control from another application.

lukdelphias 31. Jul 2020 10:06

AW: Serververbindung nach FormCreate
 
OnActivate sehe ich auch eher als nicht richtig da hier ein Mehrfachaufruf möglich ist. Bin mir aber auch nicht sicher wann OnShow ausgeführt wird:(

hoika 31. Jul 2020 10:13

AW: Serververbindung nach FormCreate
 
Hallo,

procedure TForm2.FormOnActivate;
begin
OnActivate:= nil;

Damit wird das OnActivate nur einmal aufgerufen ;)

DeddyH 31. Jul 2020 10:16

AW: Serververbindung nach FormCreate
 
Delphi-Quellcode:
procedure TDingensForm.OnActivate(Sender: TObject);
begin
  if not Verbunden then
    begin
      Verbinde;
      Verbunden := true;
    end;
end;
Damit kann das Ereignis so oft feuern, wie es will, Verbinde wird nur einmal ausgeführt.

lukdelphias 31. Jul 2020 10:18

AW: Serververbindung nach FormCreate
 
Delphi-Quellcode:
procedure TForm1.FormOnActivate;
begin
   LEdtMA.ReadOnly := true;
   LEdtAS.ReadOnly := true;
end;
zum testen habe ich das erstmal so geschrieben. Allerdings kann ich in den Textfelder die ganze Zeit schreiben. Heißt die procedure wird nicht ausgeführt. Aber warum?

mikhal 31. Jul 2020 10:27

AW: Serververbindung nach FormCreate
 
Öffne mal Notepad auf deinem Rechner und schiebe es über dein Programmfenster, wenn du es wieder wegziehst, sollte OnActivate gefeuert werden.

On Activate wird möglicherweise gefeuert bevor deine Editfelder erzeugt wurden...

Grüße
Mikhal

lukdelphias 31. Jul 2020 10:39

AW: Serververbindung nach FormCreate
 
Funktioniert jetzt. Vielen Dank an alle!

Gruß

scrat1979 31. Jul 2020 11:47

AW: Serververbindung nach FormCreate
 
Doch, das OnActivate eignet sich schon. Ich mache das in meinen Anwendungen auch. Wichtig ist nur ein entsprechendes Flag zu setzen welches nach dem ersten Aufruf gesetzt wird, damit es zukünftig nicht mehr aufgerufen wird.

Pseudocode

Delphi-Quellcode:
Procedure Form1.OnCreate
Begin
 FAppStart := True; // Variable in Form1
End;

Procedure Form1.OnActivate
Begin
 If FAppStart then begin
//  Hier Initialisierungen etc. ausführen
 FAppStart := False;

 End;
End;

Frickler 31. Jul 2020 13:21

AW: Serververbindung nach FormCreate
 
Ich nutze für sowas auch gerne ein eigenes Event, welches per PostMessage im OnShow aufgerufen wird:

Delphi-Quellcode:
const
  WM_AFTERSHOW = WM_USER + 50;

type
  TMainForm = class(TForm)
  [...]
  procedure WMAfterShow(var Msg: TMessage); message WM_AFTERSHOW;
  [...]
  end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  [...]
  PostMessage(Handle, WM_AFTERSHOW, 0, 0);
end;

procedure TMainForm.WMAfterShow(var Msg: TMessage);
begin
  MachWasImmerGetanWerdenMuss;
end;

KodeZwerg 31. Jul 2020 13:38

AW: Serververbindung nach FormCreate
 
Zitat:

Zitat von Frickler (Beitrag 1470940)
Ich nutze für sowas auch gerne ein eigenes Event, welches per PostMessage im OnShow aufgerufen wird

Das finde ich pers. bis jetzt die beste Lösung. Nichts gegen OnActivate mit den Abfrage-Bedingungen oder auf nil setzen (argh^^)

Delphi sagt:
Zitat:

Use OnShow to perform special processing when the form is shown (that is, when the form's Visible property is set to true).
Da es direkt nach Sichtbarkeit nur einmal feuert mit Deinem Code :cheers: (ich hoff die smileys haben corona abstand xD)

dummzeuch 31. Jul 2020 15:06

AW: Serververbindung nach FormCreate
 
Ich bin mir gerade unsicher, ob das zur Anforderung passt:

Als ich noch Datenbank-Programme schrieb, hatte ich immer ein Datenmodul im Programm, welches alle Datenzugriffs-Komponenten enthielt, und öffnete die Verbindung in dessen OnCreate Event. Dieses wurde dann als erstes "Formular" im Programm erzeugt, noch vor dem Hauptformular. Dadurch stand die Verbindung, bereits, wenn das Hauptformular erzeugt wurde.

Das ist aber schon bestimmt 10 Jahre her, keine Ahnung, ob das noch "State of the Art" ist.

scrat1979 31. Jul 2020 17:38

AW: Serververbindung nach FormCreate
 
Zitat:

Zitat von Frickler (Beitrag 1470940)
Ich nutze für sowas auch gerne ein eigenes Event, welches per PostMessage im OnShow aufgerufen wird:

Delphi-Quellcode:
const
  WM_AFTERSHOW = WM_USER + 50;

type
  TMainForm = class(TForm)
  [...]
  procedure WMAfterShow(var Msg: TMessage); message WM_AFTERSHOW;
  [...]
  end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  [...]
  PostMessage(Handle, WM_AFTERSHOW, 0, 0);
end;

procedure TMainForm.WMAfterShow(var Msg: TMessage);
begin
  MachWasImmerGetanWerdenMuss;
end;

Sieht - ohne Frage - sehr elegant aus. Aber was hat das Feuern dieses Events für einen Benefit statt direkt im OnShow-Event die entsprechenden Schritte (statt Postmessage) durchzuführen? Nach meinem Verständnis kommt es genau auf dasselbe raus. Es sei denn es passiert noch „etwas“ anderes.

Redeemer 31. Jul 2020 19:09

AW: Serververbindung nach FormCreate
 
Noch eine Alternative:

Timer nehmen mit Intervall 1. Erste Aktion im Timer-Event ist das Deaktivieren des Timers, dann Verbindung herstellen.

himitsu 31. Jul 2020 20:22

AW: Serververbindung nach FormCreate
 
Das OnShow wird nicht blockiert und die dranhängenden Funktionen laufen erstmal vollständig durch.
Wobei man so ein Event aber auch ins Create/OnCreate machen könnte,

Nja, Timer find ich immer bissl unpraktisch.
Delphi-Quellcode:
procedure TMainForm.FormShow(Sender: TObject);
begin
  TThread.ForceQueue(nil, procedure
    begin
      MachWasImmerGetanWerdenMuss;
    end);
end;
Funktionell das Gleiche wie PostMessage und Timer.


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