![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Добрый день.
Воюю с потоками, вроде ничего сложного всё понятно, но не могу решить одну задачу. Исходные данные Есть форма с двумя листбоксами. Есть модуль с классом потока(что предлагает делфя). В первом листбоксе к элементам привязаны объекты. Второй пустой. Задача Используя класс потока, перетащить обьекты из одного листбокса в другой. Проблема Не могу понять, каким образом я могу обратиться к компонентам из класса потока что в отдельном модуле. Т. е. метод execute должен каким то образом брать элементы из первого листбокса. Будь это 2 форма то, там понятно Form1.ListBox1 и поехали, но в случае с потоком обьект Form1 не доступен и напрямую обращение не возможно. Как вообще решаются такие банальные задачи, как вы действуете в подобной ситуации? |
|
#2
|
|||
|
|||
|
Сделай у класса потока 2 проперти для ЛистБоксов и перед запуском потока просто укажив них ссылки на нужные тебе компоненты.
Код:
TMyThread = class(TThread)
...
private
FLB1, FLB2 : TListBox;
public
property LB1 : TListBox read FLB1 write FLB1;
property LB2 : TListBox read FLB2 write FLB2;
end;
procedure TMyThread.Execute;
begin
If (LB1 <> Nil) And (LB2 <> Nil) Then
Begin
// Здесь делаем работу
End;
end;вызов: Код:
procedure TForm1.Button1Click(Sender : TObject); var T : TMyThread; begin T := TMyThread.Create(True); T.LB1 := ListBox1; T.LB2 := ListBox2; T.Resume; // Если надо попождать окончания выполнения, то // T.WaitFor; end; |