AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Verbindung übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Verbindung übergeben

Ein Thema von Bowler · begonnen am 5. Aug 2004 · letzter Beitrag vom 5. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#1

Verbindung übergeben

  Alt 5. Aug 2004, 12:34
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
Christian Rüsken
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#2

Re: Verbindung übergeben

  Alt 5. Aug 2004, 12:42
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Verbindung übergeben

  Alt 5. Aug 2004, 12:42
Lege die TIdTCPClient-Komponente auf das Hauptformular und übergeb dem Login-Dialog nur eine Referenz dieser Komponente.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Verbindung übergeben

  Alt 5. Aug 2004, 12:44
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#5

Re: Verbindung übergeben

  Alt 5. Aug 2004, 12:45
@ 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?
Christian Rüsken
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#6

Re: Verbindung übergeben

  Alt 5. Aug 2004, 12:49
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#7

Re: Verbindung übergeben

  Alt 5. Aug 2004, 12:52
Klingt clever. 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.
Christian Rüsken
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Verbindung übergeben

  Alt 5. Aug 2004, 12:55
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#9

Re: Verbindung übergeben

  Alt 5. Aug 2004, 13:07
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.
Christian Rüsken
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Verbindung übergeben

  Alt 5. Aug 2004, 13:11
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 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