AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ist ein deaktivierter Button nicht wirklich deaktiviert?
Thema durchsuchen
Ansicht
Themen-Optionen

Ist ein deaktivierter Button nicht wirklich deaktiviert?

Ein Thema von taaktaak · begonnen am 12. Aug 2008 · letzter Beitrag vom 13. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#1

Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 12:01
Moin, Moin.

Mit einem Button rufe ich eine Methode auf, die Dateien scannt; das kann manchmal 'ne Weile dauern. Deshalb wird der Button im OnClick zunächst deaktiviert, danach die Methode aufgerufen und schließlich der Button wieder aktiviert. Ziel ist, dass mehrfache Klicks nervöser Anwender auf den Button während der Abarbeitung des Scans nicht dazu führen, dass der Scan mehrfach aufgerufen wird.

Leider geschieht aber genau dies: Klicke ich 3x während des Scans auf den deaktivierten Button, wird der Scan insgesamt 4x ausgeführt

Seltsam, gibt es da so etwas wie einen "Mausklickpuffer" der automatisch geleert wird, wenn der Button wieder aktiviert wird? Oder welchen Denkfehler mache ich da gerade?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 12:10
Hilft es, vor dem "Enabled := True" des Buttons ein Application.ProcessMessages einzubauen?
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 12:13
Evtl. könnte es schon reichen, im Scan ab und zu
-> Application.ProcessMessage;
aufzurufen.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 12:16
man könnte auch den Scan in einen Thread auslagern, dann würde nicht nur die Hauptanwendung nicht einfrieren, sondern man könnte von modernen Mehrkern-CPUs Gebrauch machen
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#5

Re: Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 12:23
Das in einen Thread zu packen ist natürlich auch 'ne Idee!

Aber: Gleich der erste Tip hilft bereits! Vor dem enabled:=true ein application.processmessages und es funktioniert wie erwartet!

Aber wieso?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 12:27
Weil die Anwendung dann die Ereignisse aus der Warteschlange abarbeitet (und diese daraus entfernt) und in dem Moment der Schalter ja noch deaktiviert ist.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#7

Re: Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 12:29
Ja, natürlich - es wird quasi der "Mausklickpuffer" geleert.
Vielen Dank für die Antworten
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

Re: Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 14:06
Andere Möglichkeit: Beim Starten FScanning := True setzen und vorher überprüfen auf

if not FScanning then Hat u.a. den Vorteil, dass wenn der Button von einem anderen Programm aus enabled wird, der Scannvorgang nicht mehrfach gestartet wird.
Thomas
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#9

Re: Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 14:34
Tja, das hatte ich auch so gedacht und es bereits ausprobiert bevor ich hier die Frage gestellt hatte: Nur, es funktioniert ebenfalls nur, wenn das "ProcessMessages" verwendet wird.
Aber: Danke für die Überlegung!
Ralph
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: Ist ein deaktivierter Button nicht wirklich deaktiviert?

  Alt 12. Aug 2008, 14:49
Zitat von taaktaak:
Seltsam, gibt es da so etwas wie einen "Mausklickpuffer" der automatisch geleert wird, wenn der Button wieder aktiviert wird?
Jeder Prozess hat seine eigene Message Warteschlange.
Solange der Prozess keine Windows Messages aus der Warteschlange entgegennimmt, bleiben alle Mausklicks und Tasteneingaben gespeichert.
Hier zwei Funktionen, um alle Mausklicks und Tasteneingaben zu entfernen:
Delphi-Quellcode:
function ClearKeyboardBuffer:Integer;
var
   Msg: TMsg;
begin
   Result := 0;
   while PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) do
      Inc(Result);
end;
function ClearMouseBuffer:Integer;
var
   Msg: TMsg;
begin
   Result := 0;
   while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) do
      Inc(Result);
end;
Andreas
  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 20:02 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