Помогите пожалуйста! Задача в Delphi, как решить ее?
b.реализован потоковый тип с полем name, который в бесконечном цикле проставляет в lname значение своего поле name.
c.по нажатию первой кнопки создается экземпляр потокового типа (b пункт) c именем name="first". по нажатию второй кнопки создается экземпляр потокового типа (b пункт) c именем name="second"
Цитата: ellor!
Сделать всё в точности, как написано в алгоритме.
В точности не получится, никому не известен TLable )))))
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TLabelThread = class(TThread)
private
FName: string;
FOutControl: TLabel;
FOutText: string;
protected
procedure Execute; override;
procedure UpdateLabel;
public
constructor Create(AName: string;
var ALabel: TLabel; CreateSuspended: Boolean);
property Name: string read FName;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
T1, T2: TLabelThread;
procedure ThreadTerminate(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if (T1 <> nil) and not T1.Terminated then
T1.Terminate
else
begin
T1 := TLabelThread.Create('first', Label1, True);
T1.OnTerminate := ThreadTerminate;
T1.FreeOnTerminate := True;
T1.Resume;
Button1.Caption := 'Begining';
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if (T2 <> nil) and not T2.Terminated then
T2.Terminate
else
begin
T2 := TLabelThread.Create('second', Label1, True);
T2.FreeOnTerminate := True;
T2.OnTerminate := ThreadTerminate;
T2.Resume;
Button2.Caption := 'Begining';
end;
end;
procedure TForm1.ThreadTerminate(Sender: TObject);
begin
if TLabelThread(Sender).Name = 'first' then
Button1.Caption := 'Stopped';
if TLabelThread(Sender).Name = 'second' then
Button2.Caption := 'Stopped';
end;
{ TLabelThread }
constructor TLabelThread.Create(AName: string; var ALabel: TLabel;
CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
FName := AName;
FOutControl := ALabel;
FOutText := FName;
end;
procedure TLabelThread.Execute;
begin
while not Terminated do
begin
sleep(100);
Synchronize(UpdateLabel);
end;
end;
procedure TLabelThread.UpdateLabel;
begin
FOutControl.Caption := FOutText;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TLabelThread = class(TThread)
private
FName: string;
FOutControl: TLabel;
FOutText: string;
protected
procedure Execute; override;
procedure UpdateLabel;
public
constructor Create(AName: string;
var ALabel: TLabel; CreateSuspended: Boolean);
property Name: string read FName;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
T1, T2: TLabelThread;
procedure ThreadTerminate(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if (T1 <> nil) and not T1.Terminated then
T1.Terminate
else
begin
T1 := TLabelThread.Create('first', Label1, True);
T1.OnTerminate := ThreadTerminate;
T1.FreeOnTerminate := True;
T1.Resume;
Button1.Caption := 'Begining';
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if (T2 <> nil) and not T2.Terminated then
T2.Terminate
else
begin
T2 := TLabelThread.Create('second', Label1, True);
T2.FreeOnTerminate := True;
T2.OnTerminate := ThreadTerminate;
T2.Resume;
Button2.Caption := 'Begining';
end;
end;
procedure TForm1.ThreadTerminate(Sender: TObject);
begin
if TLabelThread(Sender).Name = 'first' then
Button1.Caption := 'Stopped';
if TLabelThread(Sender).Name = 'second' then
Button2.Caption := 'Stopped';
end;
{ TLabelThread }
constructor TLabelThread.Create(AName: string; var ALabel: TLabel;
CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
FName := AName;
FOutControl := ALabel;
FOutText := FName;
end;
procedure TLabelThread.Execute;
begin
while not Terminated do
begin
sleep(100);
Synchronize(UpdateLabel);
end;
end;
procedure TLabelThread.UpdateLabel;
begin
FOutControl.Caption := FOutText;
end;
end.
Сделать всё в точности, как написано в алгоритме.
Пункт а ты надеюсь можеш выполнить?
По подробней опиши что там за тип и что он в цикле делает
Хорошо, спасибо большое. Ну как задание звучит, так и написал