ich habe erst am Wochenende mit Lazarus angefangen und probiere momentan ein bisschen mit Threads rum. Das ganze Funktioniert auch schon ganz gut... das Problem ist nur, dass ich von den Threads keine Fortschrittsanzeige hinbekomme, d.h. wenn ich onwork aufrufe, dann erhalte ich den folgenden Fehler:
Code: Alles auswählen
unit1.pas(70,32) Error: Incompatible type for arg no. 1: Got "Class Of TObject", expected "TObject"
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, IdHTTP, ComCtrls, IdComponent;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
{ TMyThread }
TMyThread = class(TTHread)
client: TIdHTTP;
procedure Status(Sender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
private
test: string;
procedure ShowStatus;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: boolean);
end;
var
Form1: TForm1;
implementation
procedure TForm1.Button1Click(Sender: TObject);
var
MyThread: TMyThread;
begin
MyThread := TMyThread.Create(True);
MyThread.Resume;
end;
{ MyThread }
procedure TMyThread.ShowStatus;
begin
Form1.Label2.Caption:=test;
end;
procedure TMyThread.Execute;
var stream: TMemoryStream;
src: string;
begin
src := Form1.Edit1.Text;
client := TIdHTTP.Create(Application);
stream := TMemoryStream.Create;
client.OnWork:=Status(TObject, TWorkMode, Int64);
client.Get('http://domain.tld/datei.exe', stream);
stream.Seek(0, soFromBeginning);
stream.SaveToFile(src);
test := 'nur zum testen, ob der thread läuft';
Synchronize(@ShowStatus);
end;
procedure TMyThread.Status(Sender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
end;
constructor TMyThread.Create(CreateSuspended: boolean);
begin
FreeOnTerminate:= True;
inherited Create(CreateSuspended);
end;
initialization
{$I unit1.lrs}
end.
Lazarus: 0.9.26.1 Beta und Indy 10