Hallo,
ich habe hier bei einem Program ein eigenartiges Phänomen.
Ich habe einen
VCL-Thread erstellt:
Delphi-Quellcode:
type
TFindFilesThread = class(TThread)
private
{ Private-Deklarationen }
public
Files: TStrings;
folder: string;
attribs: Integer;
protected
procedure Execute; override;
end;
procedure TFindFilesThread.Execute;
begin
Files := GetFolder(folder,attribs);
end;
Und rufe ihn auf:
Delphi-Quellcode:
procedure TForm2.BScanClick(Sender: TObject);
begin
if DirectoryExists(EPath.Text) then
begin
with TFindFilesThread.Create(true) do
begin
folder := EPath.Text;
attribs := faAnyFile;
OnTerminate := OnThreadTerminate;
Resume;
end;
Anim.Active := true;
end
else
ShowMessage('Bitte gültigen Pfad angeben!');
Beep;
end;
Das OnTerminate fange ich ab:
Delphi-Quellcode:
procedure TForm2.OnThreadTerminate(Sender: TObject);
var b: TBitmap32;
s:
string;
begin
BList.Bitmaps.Clear;
for s
in (Sender
as TFindFilesThread).Files
do
try
b := TBitmap32.Create;
b.LoadFromFile(EPath.Text + '
\' + s);
BList.Bitmaps.Add.Bitmap.Assign(b);
ImageNames.Add(s);
except
Continue;
end;
LNumFiles.Caption := inttostr((Sender
as TFindFilesThread).Files.Count);
LNumImages.Caption := inttostr(BList.Bitmaps.Count);
if BList.Bitmaps.Count > 0
then
begin
BFirst.Enabled := false;
BPrev.Enabled := false;
BNext.Enabled := true;
BLast.Enabled := true;
LImagePos.Caption := '
0';
BFirst.Tag := 0;
BPrev.Tag := 0;
BNext.Tag := 1;
BLast.Tag := BList.Bitmaps.Count -1;
ISlide.Bitmap.Assign(BList.Bitmap[0]);
LFilename.Caption := ImageNames[0];
end;
Anim.Active := false;
PostMessage(
Handle,WM_THREADFREE,Integer(Sender),Integer(Sender));
end;
Das Beep aus dem BScanClick kommt sofort an - die Form blockiert aber solange, bis der thread fertig ist. Warum?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1