AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Button bleibt gedrückt während Funktion durchläuft
Thema durchsuchen
Ansicht
Themen-Optionen

Button bleibt gedrückt während Funktion durchläuft

Ein Thema von Yheeky · begonnen am 14. Sep 2008 · letzter Beitrag vom 15. Sep 2008
Antwort Antwort
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Button bleibt gedrückt während Funktion durchläuft

  Alt 14. Sep 2008, 12:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Button bleibt gedrückt während Funktion durchläuft

  Alt 14. Sep 2008, 13:00
Lager das Verbinden in einen Thread aus.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#3

Re: Button bleibt gedrückt während Funktion durchläuft

  Alt 14. Sep 2008, 17:20
Was ist aber, wenn ich auf das Verbinden reagieren muss? Sprich:

Delphi-Quellcode:
procedure TLoginThread.Execute;
begin
case LoginErgebnis of
    log_Erfolg:
     begin
     // Funktionen
     end;
    
   log_Misserfolg: ShowMessage('Login fehlgeschlagen!');
end;
end;
Login-Button:
Delphi-Quellcode:
procedure TfrmLogin.btnLoginClick(Sender: TObject);
var
  loginThread : TLoginThread;
begin
  loginThread := TLoginThread.Create(True);
  loginThread.Execute;
end;
Denn trotz Auslagerung kommt es nicht zum gewünschten Ergebnis.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: Button bleibt gedrückt während Funktion durchläuft

  Alt 14. Sep 2008, 17:34
Login-Button:
Delphi-Quellcode:
procedure TfrmLogin.btnLoginClick(Sender: TObject);
var
  loginThread : TLoginThread;
begin
  loginThread := TLoginThread.Create(True);
  loginThread.Execute;
end;
Denn trotz Auslagerung kommt es nicht zum gewünschten Ergebnis.[/quote]

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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: Button bleibt gedrückt während Funktion durchläuft

  Alt 14. Sep 2008, 17:36
Zitat von Yheeky:
dass der Login-Button während der gesamten Überprüfung gedrückt bleibt.
Quick & dirty SendMessage(Button1.Handle, BM_SETSTATE, 0, 0); (Wobei natürlich der Ursache auf den Grund gegangen werden sollte...)
Thomas
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#6

Re: Button bleibt gedrückt während Funktion durchläuft

  Alt 15. Sep 2008, 08:33
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?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Button bleibt gedrückt während Funktion durchläuft

  Alt 15. Sep 2008, 08:42
Zitat von Yheeky:
Darf ich nicht einfach Funktionen in einem Thread aufrufen?
Nicht alle Klassen sind Thread-Kompatible da die VCL nicht Threadesave ist bzw. Win32-API ThreadAffinität hat.

Zitat von Yheeky:
Wieso kommt es in meinem Fall zum Socket Error, wenn es ansonsten (auch wenn der Button gedrückt bleibt) funktioniert?
Da wären Indy-Anwender gefragt ob man die Indy so einfach in Threads verwenden kann.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#8

Re: Button bleibt gedrückt während Funktion durchläuft

  Alt 15. Sep 2008, 08:43
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
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#9

Re: Button bleibt gedrückt während Funktion durchläuft

  Alt 15. Sep 2008, 09:02
Zitat von mschaefer:
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
Das ist im Grunde ne gute Idee!
Danke! So werde ich´s machen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:31 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