Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi kl. Problem mit button und OnClick (https://www.delphipraxis.net/121745-kl-problem-mit-button-und-onclick.html)

bodenheim 3. Okt 2008 17:20


kl. Problem mit button und OnClick
 
Hallo,
ich habe dieses ästhetische Problem, dass wenn ich einen button clicke eine Aktion ausgelöst wird,
die mehrere Minuten dauert und in dieser Zeit bleibt der button gedrückt, und kommt erst wenn fertig wieder rauf.

Möchte aber dass der button erst wieder raufschnappt, und dann wird der Vorgang ausgelöst..
Wie geht das, eine Idee? Danke

mkinzler 3. Okt 2008 17:23

Re: kl. Problem mit button und OnClick
 
Führe die Aktion in einem weiteren Thread durch

Helmi 3. Okt 2008 17:24

Re: kl. Problem mit button und OnClick
 
Hallo,

da hätte ich mehrere Lösungsvorschläge im Angebot:

1. Den Code in einen Thread auslagern
2. Im Code des OnClicks des Buttons "Application.ProcessMessages" aufrufen
3. das Ganze in OnKeyUp verlagern

Bei Angebot 2 und 3 bleibt dir aber trotzdem die Application hängen.

bodenheim 3. Okt 2008 17:33

Re: kl. Problem mit button und OnClick
 
Zitat:

Zitat von Helmi
Hallo,

da hätte ich mehrere Lösungsvorschläge im Angebot:

1. Den Code in einen Thread auslagern

weiss ich nicht wie das geht, was ist das??

2. Im Code des OnClicks des Buttons "Application.ProcessMessages" aufrufen
klappt nicht

3. das Ganze in OnKeyUp verlagern
klappt nicht



Bei Angebot 2 und 3 bleibt dir aber trotzdem die Application hängen.


bodenheim 3. Okt 2008 17:37

Re: kl. Problem mit button und OnClick
 
mein OnClick löst eine längere procedure aus, muss ich die ganze procedure also in einen thread verlagern..
muss ich mal nachlesen wie das geht.

new32 3. Okt 2008 17:53

Re: kl. Problem mit button und OnClick
 
Zu den Threads:

Delphi-Quellcode:
function ThreadProc(p:Pointer):DWORD; stdcall; //* @Apollonius: TNX */
begin                    //* dieser code wird Thread ausgeführt           */
  MessageBox(0, 'Hallo', '', MB_OK);
  Sleep(10000);          //* Thread schläft; Hauptprogramm arbeitet weiter */
  result:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var tid:DWORD;
  hThread:THANDLE;
begin
  hThread:=CreateThread(nil, 0, @ThreadProc, nil, 0, tid);
  CloseHandle(hThread);
end;
mfg

Apollonius 3. Okt 2008 17:55

Re: kl. Problem mit button und OnClick
 
Du hast das stdcall vergessen. Allerdings sollte man im Allgemeinen lieber BeginThread verwenden.

bodenheim 3. Okt 2008 21:46

Re: kl. Problem mit button und OnClick
 
Zitat:

Zitat von new32
Zu den Threads:

Delphi-Quellcode:
function ThreadProc(p:Pointer):DWORD; stdcall; //* @Apollonius: TNX */
begin                    //* dieser code wird Thread ausgeführt           */
  MessageBox(0, 'Hallo', '', MB_OK);
  Sleep(10000);          //* Thread schläft; Hauptprogramm arbeitet weiter */
  result:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var tid:DWORD;
  hThread:THANDLE;
begin
  hThread:=CreateThread(nil, 0, @ThreadProc, nil, 0, tid);
  CloseHandle(hThread);
end;
mfg

Hallo nochmal,
aber das nun so gemacht, klappt auch ganz gut bis zum Ende, da bekomme ich einen
Anwendungsfehler: Code 1400 Ungültiges Fensterhandle ??
Wie muss mand die function denn im Kopf deklarieren?
Danke nochmal

bodenheim 4. Okt 2008 14:19

Re: kl. Problem mit button und OnClick
 
Thema hat sich erledigt; danke nochmal für die Hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 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-2025 by Thomas Breitkreuz