Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Verbindung übergeben (https://www.delphipraxis.net/27171-verbindung-uebergeben.html)

Bowler 5. Aug 2004 12:34


Verbindung übergeben
 
Hallo zusammen,

ich frage mich gerade, ob - und wenn ja, wie - es funktionieren kann, auf einem Form eine Verbindung mit einem IdTCPClient zu öffnen, dann diese Verbindung an ein anderes Formular zu übergeben, und das erste Formular wieder zu schliessen.

Hintergrund ist folgender.
Ich habe eine Anwendung gebastelt, mit welcher sich der User zuerst an einem Server authentifizieren muss. Dazu habe ich ein Login-Formular gemacht. Dieses Login-Formular erstelle ich in meinem Hauptprogramm, noch bevor Application.Run aufgerufen wird. Das Login-Form wird modal angezeigt. In dem Formular kann der User seinen Benutzer-Namen und das Passwort angeben, dann wird eine Verbindung hergestellt, die Daten übertragen, und dann kommt vom Server entweder OK oder NICHT OK zurück.
Entsprechend dieses Ergebnisses wird dann der modale Dialog entweder mit mrOK oder mrCancel geschlossen. Wenn der Dialog mir mrOK geschlossen wird, dann wird die Anwendung normal gestartet, ansonsten wird die Anwendung direkt wieder beendet.

Das funktioniert soweit ganz gut. Aber sobald das Login-Form geschlossen wird, ist auch die Verbindung zum Server dahin. Ist es möglich, diese Verbindung aufrecht zu erhalten, und dann an das Main-Form zu übergeben? Sodass das Main-Form dann auch über diese bereits authentifizierte Verbindung mit dem Server kommunizieren kann, um z.B. Berechtigungsdaten abzufragen.

Ich glaube in C, bzw. bei den WinSocks konnte man das Handle der Sock übergeben, und damit weiterarbeiten. Ist das mit Indy auch irgendwie möglich?

ich hoffe ich mich verständlich ausgedrückt..:-)

Gruß
Christian

Phoenix 5. Aug 2004 12:42

Re: Verbindung übergeben
 
Es reicht, das Objekt selber zu übergeben, das hauptformular darf die Komponente im destructor aber nicht löschen. Das heisst wiederum, das Du die Komponente entweder dynamisch erzeugen musst oder aber den Parent auf das neue Form umbiegen musst.

Dann sollte das eigentlich kein Prolem sein.

Bernhard Geyer 5. Aug 2004 12:42

Re: Verbindung übergeben
 
Lege die TIdTCPClient-Komponente auf das Hauptformular und übergeb dem Login-Dialog nur eine Referenz dieser Komponente.

Bernhard Geyer 5. Aug 2004 12:44

Re: Verbindung übergeben
 
Zitat:

Zitat von Phoenix
.. oder aber den Parent auf das neue Form umbiegen musst.

Parent bringt nichts. Der Owner ist für die Freigabe zuständig. Der Parent ist nur für die Z-Order der Controls zuständig Z.B. das Button auf Panel liegt und nicht direkt auf dem Formular. In beiden Fällen ist aber das Formular für die Speicherfreigabe zuständig.

Bowler 5. Aug 2004 12:45

Re: Verbindung übergeben
 
@ Phoenix: Danke, das hört sich schonmal gut an. Auf die Idee war ich nun noch gar net gekommen....irgendwie, obwohl sie ja recht logisch ist.

@ Bernhard Geyer: das geht nicht, da zu der Zeit, wie der Login-Dialog ausgeführt wird, das Hauptform noch gar nicht erstellt wurde.

Würde es funktionieren, wenn ich die Komponente in dem Hauptprogramm erzeuge, dann erst ans Login übergebe, und danach ans Mainform?

Phoenix 5. Aug 2004 12:49

Re: Verbindung übergeben
 
Eine Idee wäre, z.B. ein Datenmodul zu erstellen, das die Verbindung beeinhaltet. Dieses Datenmodul und dessen Verbindung könnte dann sowohl vom Login- als auch vom Hauptformular verwendet werden.

Bowler 5. Aug 2004 12:52

Re: Verbindung übergeben
 
Klingt clever. :lol: THX. Also einfach die Verbindung in einen Container (Datenmodul) stellen, und dann darauf zugreifen. Stimmt, ist ja im Grunde das gleiche, wie die Verbindung zu einer Datenbank. Ein positiver Nebeneffekt ist noch, dass man es tatsächlich nur mit einer Verbindung zu tun hat, und nich durcheinander kommen kann.

Bernhard Geyer 5. Aug 2004 12:55

Re: Verbindung übergeben
 
Zitat:

Zitat von Bowler@
das geht nicht, da zu der Zeit, wie der Login-Dialog ausgeführt wird, das Hauptform noch gar nicht erstellt wurde.

Würde es funktionieren, wenn ich die Komponente in dem Hauptprogramm erzeuge, dann erst ans Login übergebe, und danach ans Mainform?

Sollte eigentlich gehen. Aber das dein Hauptformular nicht als ersters erzeugt wird?
Du mußt jedoch darauf achten, das am Programmende irgendjemand dafür sorgt, das die Komponente wieder freigegeben wird.

Bowler 5. Aug 2004 13:07

Re: Verbindung übergeben
 
das ganze sieht im Hauptprogramm etwa so aus (habe gerade kein Delphi da, deswegen nur aus dem Gedächtnis):

Delphi-Quellcode:
program MeineAnwendung;

uses ....

begin
  Application.Initialize;

  with Tfrm_login.create(nil) do
  begin
    if showModal=mrOK then
    begin
      Free;
      Application.CreateForm(tfrm_main...);
      Application.Run;            
    end else
    begin
      Free;
      Application.Terminate;
    end;
  end;

end.
Es wird also die Anwendung initialisiert. Dann wird das frm_login erstellt, und mit ShowModal angezeigt. Wenn das Result mrOK ist, dann wird das Formular wieder freigegeben, die anderen Forms werden erstellt und die App wird gestartet. Ansonsten wird die App beendet. Das funktioniert soweit.

Bernhard Geyer 5. Aug 2004 13:11

Re: Verbindung übergeben
 
Ich halte zwar nicht viel davon die dpr-Unit entsprechend zu erweitern, aber was solls

Delphi-Quellcode:
program MeineAnwendung;

uses ....
var
  TCPClient: IdTCPClient;
begin
  Application.Initialize;

  TCPClient := IdTCPClient.Create(nil);

  with Tfrm_login.create(nil) do
  begin
    Client := TCPIPClient;
    if showModal=mrOK then
    begin
      Free;
      Application.CreateForm(tfrm_main...);
      Application.Run;            
    end else
    begin
      Free;
      Application.Terminate;
    end;
  end;

  Application.CreateForm(TMainForm, MainForm);
  MainForm.Client := TCPClient;
  Application.Run;

  TCPClient.Free;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.
Seite 1 von 2  1 2      

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