![]() |
|
|
Регистрация | << Правила форума >> | 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; |