Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизFindComponent в потоке! Найти похожие ветки
← →
Le! (2004-06-23 09:16) [0]народ подскажите! не работает FindComponent в потоках! реально ли это исправить??
← →
Digitman © (2004-06-23 09:17) [1]
> не работает FindComponent в потоках
не выдумывай, все работает
← →
Le! (2004-06-23 09:19) [2]да не работает! пишет неизвестно что это такое!!
← →
Digitman © (2004-06-23 09:24) [3]
> да не работает
работает
> пишет неизвестно что это такое
а какое это имеет отношение к "работает" или "не работает" ?
до ран-тайм еще и дело не доходит и никаких потоков еще и в помине нет, это тебе компилятор по рукам дает
FindComponent - это метод объекта
раз это метод объекта, нужно показать компилятору, метод какого конкретно объекта ты вознамерился вызывать, компилятор не обязан догадываться об этом, вот и дает тебе отлуп
← →
Anatoly Podgoretsky © (2004-06-23 11:33) [4]Le! (23.06.04 09:19) [2]
Что так и будем перкликаться - работает/не работает.
← →
Тимохов © (2004-06-23 11:37) [5]ОФФ
> Что так и будем перкликаться - работает/не работает.
как в анекдоте:
два милиционера в машине:
-выгляни, посмотри мигалка работает?
второй выглядывает
-работает, не работает, работает, не работает, работает, не работает...
← →
Igorek © (2004-06-23 13:29) [6]Разговор ни о чем.
Le, приведи код или четче сформулируй проблему.
← →
Le! (2004-06-30 08:46) [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.
← →
Anatoly Podgoretsky © (2004-06-30 08:55) [8]FindComponent начинается с TComponent
← →
Digitman © (2004-06-30 09:07) [9]
> Le! (30.06.04 08:46) [7]
> если переместить ее содержимое под Экзекуте
> то он не знает что тако Финдкомпонент!
разумеется не знает
потому что класс Alex не является потомком класса TComponent
← →
Le! (2004-06-30 09:08) [10]Но вот этот пример работает!
← →
Le! (2004-06-30 09:13) [11]потому что класс Alex не является потомком класса TComponent
а как это исправить?? реально ли?
← →
Digitman © (2004-06-30 09:13) [12]
> Le! (30.06.04 09:08) [10]
> Но вот этот пример работает!
не "работает", а успешно компилируется !
потому что в этом случае обращение к методу FindComponent происходит в контексте метода Click объекта класса TForm1, а этот класс есть непрямой наследник класса TComponent
← →
Digitman © (2004-06-30 09:28) [13]
> как это исправить?? реально ли?
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;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c