/ 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
TThread og en ShowMessage - det kan man ik~
Fra : Esben Piltoft


Dato : 10-03-03 18:24

Koden herunder giver en "Canvas does not allow drawing" fejl.

Hvorfor det? Hvor går det galt ?
Er det fordi man slet ikke må gøre det (på den måde)??

Skriver man til en label går det uden problemer.... (
Form1.Label1.Caption := 'test';)

Nogen der kan fortælle mig hvad jeg gør galt ??

På forhånd tak
Esben

**********************************************
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

type
TTest = class(TThread)
protected
procedure Execute; override;
end;

var
Form1: TForm1;
myTest : TTest;

implementation
{$R *.DFM}

procedure TTest.Execute;
begin
FreeOnTerminate := true;
ShowMessage('TEST');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
myTest := TTest.Create(false);
end;

 
 
Klaus Petersen (10-03-2003)
Kommentar
Fra : Klaus Petersen


Dato : 10-03-03 22:27

> Nogen der kan fortælle mig hvad jeg gør galt ??

Jeg kan give et bud.

> procedure TForm1.Button1Click(Sender: TObject);
> begin
> myTest := TTest.Create(false);
Sleep (10);
> end;

Indsættelse af den sleep der gør at det virker, så der er noget der tyder,
at du har et synkroniseringsproblem.

Måske prøver programmet at tegne på det samme canvas 2 steder fra?

Anyways... her kommer den pæne løsning.

Klaus.

<delphi kode>

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

type
TTest = class(TThread)
protected
procedure Execute; override;
procedure ShowAMessage;
end;

var
Form1: TForm1;
myTest : TTest;

implementation
{$R *.DFM}

procedure TTest.ShowAMessage;
begin;
ShowMessage('TEST');
end;

procedure TTest.Execute;
begin
FreeOnTerminate := true;
self.Synchronize( showAmessage );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
myTest := TTest.Create(false);
end;

end.

</slut delphi kode>



Esben Piltoft (11-03-2003)
Kommentar
Fra : Esben Piltoft


Dato : 11-03-03 12:00

Nå, det er det Synchronize skal bruges til. Det løser vist også en del
andre problemer jeg har haft :)

Jeg takker mange gange.
- Esben

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste