Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 в потоках


не выдумывай, все работает


Наверх

Титульная страница Поиск, карта сайта Написать письмо