/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Thread problem
Fra : Ulrik Vadstrup


Dato : 23-08-01 18:59

Udsnit af min Thread erklæring og procedure....

type
TProgressUpdate = procedure(Sender: TObject; Progress: Integer);
TGetPatch = class(TThread)
Private
FProgressUpdate: TProgressUpdate;
Progress: Integer;
Procedure UpdateForm;
Protected
procedure Execute; override;
public
property OnProgressUpdate: TProgressUpdate read FProgressUpdate
write FProgressUpdate;
end;

procedure TfrmMain.UpdateProgress(Sender: TObject; Progress: Integer);
begin
frmMain.ProgressBar1.Position := Progress;
end;

Når jeg nu "Kalder" minn Thread på følgende måde, så kan jeg ikke compile,
jeg får fejl ved T.OnProgressUpdate

var
T: TGetPatch;
begin
vPathNewFile := fReadIni('PATH', 'NewFile');
T := TGetPatch.Create(True);
T.OnProgressUpdate := UpdateProgress;
T.Resume;
end;

Fejlen:
Incompatible types: regular procedure and method pointer

Nogen gode ideer ?

--
Med venlig hilsen
Ulrik Vadstrup



 
 
Claus Christiansen (23-08-2001)
Kommentar
Fra : Claus Christiansen


Dato : 23-08-01 21:01

"Ulrik Vadstrup" <vadstrup@post12.tele.dk> wrote in
news:9m3g4n$2m3t$1@news.cybercity.dk:

> Udsnit af min Thread erklæring og procedure....
>
> type
> TProgressUpdate = procedure(Sender: TObject; Progress: Integer);

skal være:
TProgressUpdate = procedure(Sender: TObject; Progress: Integer) of
object;

> TGetPatch = class(TThread)
> Private
> FProgressUpdate: TProgressUpdate;
> Progress: Integer;
> Procedure UpdateForm;
> Protected
> procedure Execute; override;
> public
> property OnProgressUpdate: TProgressUpdate read FProgressUpdate
> write FProgressUpdate;
> end;
<klip en hel masse>

Derudover skal du huske at kalde den metode du bruger til opdatering af
GUI'en via Synchronize, eventuel ved at lave endnu et mellemled, man ikke
på et eller andet tidspunkt kommer til at glemmer at anvende Synchronize
(Hvis jeg gætter rigtigt med hensyn til de andre metoder du har og det
gør jeg jo nok :) og såå burde jeg have husket 'of Object' tidliggere
sorry!).

procedure UpdateForm;
begin
if assigned(OnProgressUpdate) then OnProgressUpdate(...);
end;

procedure UpdateProgress;
begin
Synchronize(UpdateForm);
end;

proceudure Execute;
begin
//.. nu skal der være mulighed for at opdatere:
UpdateProgress;
end;

--
Claus Christiansen, <mailto:cch@unipeople.dk>

personal: http://www.bigfoot.com/~kruc/; pythia: http://www.pythia.dk
============================================--------------------------
"Computers are useless. They can only give you answers."
- Pablo Picasso (1881-1973)

Claus Christiansen (23-08-2001)
Kommentar
Fra : Claus Christiansen


Dato : 23-08-01 21:35

Claus Christiansen <kruc@bigfoot.com> wrote in
news:Xns9106DF79F9C6Dkrucsid@192.168.1.2:

<klip>
> Derudover skal du huske at kalde den metode du bruger til opdatering
> af GUI'en via Synchronize, eventuel ved at lave endnu et mellemled,
> man ikke på et eller andet tidspunkt kommer til at glemmer at anvende
> Synchronize (Hvis jeg gætter rigtigt med hensyn til de andre metoder
> du har og det gør jeg jo nok :) og såå burde jeg have husket 'of
> Object' tidliggere sorry!).

Hold kæft hvor kan jeg ikke stave i dag :) - nå men meningen fremgik vel!

/Claus

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste