Registriert seit: 19. Apr 2003
1.291 Beiträge
Delphi 2005 Professional
|
Re: Verzeichniss kopieren, aber "Abbrechen" deakti
13. Dez 2006, 01:25
Ich habe es jetzt mit einem Thread gelöst
Aufruf:
Delphi-Quellcode:
...
ThreadRunning := True;
AppExiting := False;
TFindWnd.Create(False);
CopyDir(DataDir + '*', 'C:\Test');
AppExiting := True;
while ThreadRunning = True do
Application.ProcessMessages;
...
Thread:
Delphi-Quellcode:
unit thread_FindWnd;
interface
uses
Classes, SysUtils, Windows, frm_Copydata;
type
TFindWnd = class(TThread)
private
{ Private-Deklarationen }
procedure GetState;
procedure Done;
protected
procedure Execute; override;
end;
var
AppExiting: boolean;
implementation
{ Wichtig: Methoden und Eigenschaften von Objekten in visuellen Komponenten dürfen
nur in einer Methode namens Synchronize aufgerufen werden, z.B.
Synchronize(UpdateCaption);
und UpdateCaption könnte folgendermaßen aussehen:
procedure WebUpdate.UpdateCaption;
begin
Form1.Caption := 'Aktualisiert in einem Thread';
end; }
{ WebUpdate }
procedure TFindWnd.GetState;
begin
AppExiting := frm_CopyData.AppExiting;
end;
procedure TFindWnd.Done;
begin
frm_CopyData.ThreadRunning := False;
end;
procedure TFindWnd.Execute;
var
wnd: HWND;
textlength: Integer;
Text: PChar;
mycap: string;
CText: array[0..255] of char;
begin
wnd := 0;
try
while wnd = 0 do
begin
Synchronize(GetState);
if AppExiting then
Exit;
wnd := windows.GetForegroundWindow;
GetClassName(wnd, CText, 255);
if StrPas(CText) = ' #32770' then
begin
wnd := FindWindowEx(wnd, 0, ' Button', nil);
windows.GetWindowText(wnd, CText, 255);
if StrPas(CText) = ' OK' then
wnd := 0;
if wnd <> 0 then
windows.EnableWindow(wnd, False);
end
else
wnd := 0;
end;
finally
Synchronize(Done);
end;
end;
end.
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
|
|
Zitat
|