- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls;
type
{ TPaintThread1 }
TPaintThread1 = class (TThread)
public
procedure Execute; override;
end;
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
PaintBox1: TPaintBox;
PaintBox2: TPaintBox;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
private
{ private declarations }
a : TThread;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TPaintThread1 }
procedure TPaintThread1.Execute;
var
x, y, r: Integer;
begin
while true do with form1.PaintBox1.Canvas do
begin
x:= Random(3 * form1.PaintBox1.Width div 4);
y:= Random(3 * Form1.PaintBox1.Height div 4);
r:= random(3 * form1.PaintBox1.Width div 4);
Brush.Color:= Random($FFFF);
Pen.Color:= Random($FFFF);
EllipseC(x, y, r, r);
end;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
a:= TPaintThread1.Create(false);
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
a.Terminate;
end;
initialization
{$I unit1.lrs}
end.
Судя по работе никакой многопотоковости нет и в помине, поскольку кнопки формы перестают работать после запуска потока, и завершается программа только командой kill. В чём может быть дело?