![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FindComponent в потоке!
Le! © (2004-06-23 09:16:00)народ подскажите! не работает FindComponent в потоках! реально ли это исправить??
Digitman (2004-06-30 09:28:00) [1]
> как это исправить?? реально ли?
type
Alex = class(TThread)
index: integer;
a:integer;
procedure UpdateLabel;
private
{ Private declarations }
protected
procedure Execute; override;
end;
procedure Alex.DoClick;
begin
Form1.Click(Index,a);
UpdateLabel;
end;
procedure Alex.Execute;
begin
index:=1;
a:=Pot;
Repeat
Synchronize(Click);
Inc(index);
Sleep(0);
until index>10000;
end;
Le! (2004-06-30 09:13:00) [2]потому что класс Alex не является потомком класса TComponent
а как это исправить?? реально ли?
Digitman (2004-06-30 09:13:00) [3]
> Le! (30.06.04 09:08) [10]
> Но вот этот пример работает!
не "работает", а успешно компилируется!
потому что в этом случае обращение к методу FindComponent происходит в контексте метода Click объекта класса TForm1, а этот класс есть непрямой наследник класса TComponent
Le! (2004-06-30 09:08:00) [4]Но вот этот пример работает!
Digitman (2004-06-30 09:07:00) [5]
> Le! (30.06.04 08:46) [7]
> если переместить ее содержимое под Экзекуте
> то он не знает что тако Финдкомпонент!
разумеется не знает
потому что класс Alex не является потомком класса TComponent
Anatoly Podgoretsky (2004-06-30 08:55:00) [6]FindComponent начинается с TComponent
Le! (2004-06-30 08:46:00) [7]Вот код, очень интересная штука! так вот там просндура Клик совсем не нужна но если переместить ее содержимое под Экзекуте то он не знает что тако Финдкомпонент!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Psock;
type
Alex = class(TThread)
index: integer;
procedure UpdateLabel;
private
{ Private declarations }
protected
procedure Execute; override;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Click(Index,pot:integer);
private
{ Private declarations }
aa:Alex;
public
{ Public declarations }
end;
var
Form1: TForm1;
Pot:integer;
implementation
{$R *.DFM}
procedure TForm1.Click(Index,pot:integer);
begin
TLabel(FindComponent('label' + IntToStr(pot))).caption:=IntToStr(Index);
If Index=10000 then TLabel(FindComponent('label' + IntToStr(pot))).caption:='';
If Index=10000 then RemoveComponent(TLabel(FindComponent('label' + IntToStr(pot))));
Application.ProcessMessages;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
For Pot:=1 to 20 do
If not(FindComponent('label' + IntToStr(Pot)) is Tlabel) then begin
TLabel.Create(Self).Name := 'Label' + IntToStr(Pot);
with TLabel(FindComponent('label' + IntToStr(Pot))) do
begin
Left := 150;
Top := Pot * 20;
Parent := self;
Caption:='0';
end;
Break;
end;
aa:=Alex.Create(true);
aa.Resume;
aa.Priority:=tpNormal;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
aa.Terminate;
aa.Free;
end;
procedure Alex.Execute;
var a:integer;
begin
index:=1;
a:=Pot;
Repeat
Form1.Click(Index,a);
//Synchronize(UpdateLabel);
Inc(index);
Application.ProcessMessages;
until index>10000;
Application.ProcessMessages;
end;
procedure Alex.UpdateLabel;
begin
end;
end.
Igorek (2004-06-23 13:29:00) [8]Разговор ни о чем.
Le, приведи код или четче сформулируй проблему.
Тимохов (2004-06-23 11:37:00) [9]ОФФ
> Что так и будем перкликаться - работает/не работает.
как в анекдоте:
два милиционера в машине:
-выгляни, посмотри мигалка работает?
второй выглядывает
-работает, не работает, работает, не работает, работает, не работает...
Anatoly Podgoretsky (2004-06-23 11:33:00) [10]Le! (23.06.04 09:19) [2]
Что так и будем перкликаться - работает/не работает.
Digitman (2004-06-23 09:24:00) [11]
> да не работает
работает
> пишет неизвестно что это такое
а какое это имеет отношение к "работает" или "не работает" ?
до ран-тайм еще и дело не доходит и никаких потоков еще и в помине нет, это тебе компилятор по рукам дает
FindComponent - это метод объекта
раз это метод объекта, нужно показать компилятору, метод какого конкретнообъекта ты вознамерился вызывать, компилятор не обязан догадываться об этом, вот и дает тебе отлуп
Le! (2004-06-23 09:19:00) [12]да не работает! пишет неизвестно что это такое!!
Digitman (2004-06-23 09:17:00) [13]
> не работает FindComponent в потоках
не выдумывай, все работает