![]() |
Button bleibt gedrückt während Funktion durchläuft
Hi,
ich habe eine Art Login-Form bei mir in meinem Projekt. Wenn ich den Login-Button drücke, verbindet sich das Programm über die idHTTP Komponente der Indy-Tools mit einem Server und überprüft die Login-Daten. Dies dauert manchmal ein bisschen und ich habe den unschönen Nebeneffekt, dass der Login-Button während der gesamten Überprüfung gedrückt bleibt. Wie kann ich das verhindert? Ich habe bereits ein Application.ProcessMessages; vorangestellt, aber das Problem konnte ich damit leider nicht beheben. Ich hoffe einer von euch hat einen guten Tipp für mich. |
Re: Button bleibt gedrückt während Funktion durchläuft
Lager das Verbinden in einen Thread aus.
|
Re: Button bleibt gedrückt während Funktion durchläuft
Was ist aber, wenn ich auf das Verbinden reagieren muss? Sprich:
Delphi-Quellcode:
Login-Button:
procedure TLoginThread.Execute;
begin case LoginErgebnis of log_Erfolg: begin // Funktionen end; log_Misserfolg: ShowMessage('Login fehlgeschlagen!'); end; end;
Delphi-Quellcode:
Denn trotz Auslagerung kommt es nicht zum gewünschten Ergebnis.
procedure TfrmLogin.btnLoginClick(Sender: TObject);
var loginThread : TLoginThread; begin loginThread := TLoginThread.Create(True); loginThread.Execute; end; |
Re: Button bleibt gedrückt während Funktion durchläuft
Login-Button:
Delphi-Quellcode:
Denn trotz Auslagerung kommt es nicht zum gewünschten Ergebnis.[/quote]
procedure TfrmLogin.btnLoginClick(Sender: TObject);
var loginThread : TLoginThread; begin loginThread := TLoginThread.Create(True); loginThread.Execute; end; Du verwendest ja die Thread-Klasse nicht dazu die Funktion in einem eigenen Thread auszuführen. erzeuge mal die Tread-Klasse mit Parameter Suspended=False im Konstruktor und lies dir mal die Onlinehilfe zu TThread. |
Re: Button bleibt gedrückt während Funktion durchläuft
Zitat:
Delphi-Quellcode:
(Wobei natürlich der Ursache auf den Grund gegangen werden sollte...)
SendMessage(Button1.Handle, BM_SETSTATE, 0, 0);
|
Re: Button bleibt gedrückt während Funktion durchläuft
Ich hab den Konstruktur nun mit False aufgerufen, aber da bekomme ich eine Fehlermeldung von der idHTTP Komponente: Socket Error.
Onlinehilfe habe ich mir durchgelesen, ich würde aber gerne einen objektorientieren Thread benutzen. Darf ich nicht einfach Funktionen in einem Thread aufrufen? Wieso kommt es in meinem Fall zum Socket Error, wenn es ansonsten (auch wenn der Button gedrückt bleibt) funktioniert? |
Re: Button bleibt gedrückt während Funktion durchläuft
Zitat:
Zitat:
|
Re: Button bleibt gedrückt während Funktion durchläuft
Disable den Button vor dem Application.ProcessMessage
Das löst ein Neuzeichnen des Buttons aus. Nach dem Funktionsaufruf kannst Du ihn dann wieder enablen. Grüße // Martin PS: Auch :wink: |
Re: Button bleibt gedrückt während Funktion durchläuft
Zitat:
Danke! So werde ich´s machen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr. |
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 by Thomas Breitkreuz