Entwickler-Ecke

Internet / Netzwerk - Bei Programmschließung seite aufrufen


hibbert - Fr 29.08.03 19:33
Titel: Bei Programmschließung seite aufrufen
Hi,
wenn ich mein Programm schließe, soll noch eine Seite im TWebbrowser aufgerufen werden

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
webbrowser1.Navigate('http://meineseite.login.php?user=ich&logout=true');
end;

Das ist ja noch recht einfach, aber das Programm soll erst geschlossen werden, wenn diese Seite komplett geladen wurde.

thx hibbert


kongreddgrass - Fr 29.08.03 21:50

Hi,
mach mal

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if
webbrowser1.Navigate('http://meineseite.login.php?user=ich&logout=true');
then
begin
close;
end;
end;


Müsste richtig sein

Gruß
Mike

PS: Ich glaube, dass so bei if...then was dazu gehört.


hibbert - Fr 29.08.03 22:11

Hi,
also bei deinem Vorschlage bekomme ich diese Fehlermeldung:
Zitat:
[Error] Unit1.pas(750): Type of expression must be BOOLEAN

und ich weiß auch warum:
kongreddgrass hat folgendes geschrieben:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if
webbrowser1.Navigate('http://meineseite.login.php?user=ich&logout=true');
then
begin
close;
end;
end;

in der Zeile nach dem If ist am ende der Zeile ein ";", was da nicht stehen darf :wink: auch wenn ich diese entferne, wirft der Compiler mir eine Fehlermeldung aus:
Zitat:

[Error] Unit1.pas(750): Type of expression must be BOOLEAN

Ok, also hab ich das umgestellt:

Delphi-Quelltext
1:
2:
3:
4:
if webbrowser1.Navigate('http://meineseite.login.php?user=ich&logout=true')=true then
  begin
  close;
  end;

und schonwieder eine Fehlermeldung:
Zitat:
[Error] Unit1.pas(750): Incompatible types

Was nun ?

thx hibbert


Ex0rzist - Sa 30.08.03 02:46

Da es anscheinend nur um das Ausloggen geht, kannst du doch einfach
anstatt dem WebBrowser lieber die Indy-HTTP-Komponente verwenden.

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
IdHTTP1.Get('http://meineseite.login.php?user=ich&logout=true');
end;


hibbert - Sa 30.08.03 19:59

DANKE!!

thx hibbert


FeG - Sa 30.08.03 22:46

Hi,

nochmal zum Anfangsproblem:
Das:
Zitat:
if webbrowser1.Navigate('http://meineseite.login.php?user=ich&logout=true')=true then

KANN gar nicht gehen!

Die Hilfe verrät warum: Navigate ist eine Prozedur, und Prozeduren haben keinen Rückgabewert!! Nur Funktionen...

Also kann man auch nicht auf =true prüfen...

MfG,
FeG


Terra23 - Sa 30.08.03 23:30

... stimmt. Das Zauberwort heißt OnDocumentComplete und ist ein Ereignis des WebBrowsers. Es würde so gehen:


Delphi-Quelltext
1:
2:
3:
<span style="font-weight: bold">OnCloseQuery</span> {Form}
CanClose:=False;
WebBrowser1.Navigate('http://www.auq.de');


und dann


Delphi-Quelltext
1:
2:
<span style="font-weight: bold">OnDocumentComplete</span> {Browser}
Close;


Wenn das zu schwierig ist, warum rufst du dann nicht die Seite per ShellExecute auf? Dann wird das alles erst nach Close aufgerufen, denn ich verstehe irgendwie nicht, was du bezweckst, wenn das Tool nach dem Ladevorgang sofort beendet wird..


FeG - Sa 30.08.03 23:34

Terra23 hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
OnCloseQuery {Form}
CanClose:=False;
WebBrowser1.Navigate('http://www.auq.de');

Na damit viel Spaß... Das Programm schließt nie... Da braucht's schon noch ne boolean-Variable, die solange auf "false" steht, bis OnDocumentComplete ausgelöst wurde...
Zitat:
denn ich verstehe irgendwie nicht, was du bezweckst, wenn das Tool nach dem Ladevorgang sofort beendet wird..

Ich allerdings auch nicht...

MfG,
FeG


Ex0rzist - So 31.08.03 04:25

Ich nehme an, dass Hibbert den User ausloggen will, wenn er das Programm schliesst. Der Rückgabewert der Seite ist hierbei egal.
Es kommt nur darauf an, dass der Server das logout=true erhält.


FeG - So 31.08.03 10:25

Ex0rzist hat folgendes geschrieben:
Es kommt nur darauf an, dass der Server das logout=true erhält.

Eben, und deswegen müsste er (wenn er das im eigenen Programm und nicht über ShellExecute machen will), darauf warten, dass die Seite vollständig geladen wird, da sonst der Logout nicht durchgeführt wird.

Auch ShellExecute wäre in dem Fall problematisch, da der User ja einfach das aufgehende Browserfenster schließen könnte...

MfG,
FeG


hibbert - So 31.08.03 14:33

ok, ich habe eine PHP Seite auf meinem Server, die mit einer MySQL Datenbank zusammenarbeitet.
Wenn man das Programm schließt, dann wird die PHP Seite aufgerufen, die Variabeln Username und Logout=true werden Übergeben und die Einträge in der MYSQL Datenbank werden geändert --> Der User ist ausgeloggt.
Der Rest der PHP Seite ist leer, es ist also egal ob der User die Seite sieht oder nicht.

Da ich es nicht geschafft habe Delphi direkt mit meiner MySQL Datenbank zu verknüfen habe ich das eben so gemacht. :wink:

Hibbert


Ex0rzist - So 31.08.03 14:40

FeG hat folgendes geschrieben:
... und deswegen müsste er (wenn er das im eigenen Programm und nicht über ShellExecute machen will), darauf warten, dass die Seite vollständig geladen wird, da sonst der Logout nicht durchgeführt wird.


Wozu? Angenommen auf der Logout-Seite sind viele Grafiken. Wozu müssen die geladen werden?
Der User ist ausgeloggt, sobald der Server die entsprechenden Befehle per GET erhalten hat. Das, was der User anschliessend lädt, ist für den eigentlichen Logoutvorgang völlig irrelevant.