Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.01.2010, 09:19
madhamster madhamster вне форума
Прохожий
 
Регистрация: 06.06.2009
Сообщения: 4
Репутация: 10
Вопрос Обращение к компонентам формы из стороннего модуля.

Добрый день.

Воюю с потоками, вроде ничего сложного всё понятно, но не могу решить одну задачу.


Исходные данные

Есть форма с двумя листбоксами.
Есть модуль с классом потока(что предлагает делфя).

В первом листбоксе к элементам привязаны объекты.
Второй пустой.

Задача

Используя класс потока, перетащить обьекты из одного листбокса в другой.

Проблема

Не могу понять, каким образом я могу обратиться к компонентам из класса потока что в отдельном модуле.

Т. е. метод execute должен каким то образом брать элементы из первого листбокса. Будь это 2 форма то, там понятно Form1.ListBox1 и поехали, но в случае с потоком обьект Form1 не доступен и напрямую обращение не возможно.

Как вообще решаются такие банальные задачи, как вы действуете в подобной ситуации?
Ответить с цитированием
  #2  
Старый 19.01.2010, 13:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,094
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Сделай у класса потока 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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:43.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025