Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2013, 02:40   #1
darkleo
Пользователь
 
Регистрация: 11.12.2012
Сообщений: 20
По умолчанию Messagedlg в отдельном потоке как запустить со всеми параметрами?

Всем привет.

Помогите пожалуйста решить проблему.
К сожалению не очень дружу в потоках или просто запутался.

Есть поток. Он запускается и прекрасно работает.
Из этого потока надо вызвать messagedlg в отдельном потоке и получить результат....

хотелось сделать в таком виде...

if form7.mesagedlg_thread('Работаем?', mtWarning,[mbYes,mbNo],0)=mrYes then
begin
....
end;

где в mesagedlg_thread все данные через синхронизацию передаются вдругой поток где функция выполнает нормальный messagedlg....

поток так пытался создать

Код:
TMDlg = class(TThread)
   private

   protected
      procedure Execute; override;
      function message_dlg_thread(const m_str: string; dialog: TMsgDlgType; butt: TMsgDlgButtons; hlp: Longint): Integer;

   public
   m_str:string;
   dialog:TMsgDlgType;
   butt:TMsgDlgButtons;
   hlp:longint;

   end;
Вызвать пытался так
Код:
function tform7.messagedlg_t(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx:Longint):Integer;
begin

      DLGThread:=TMDlg.Create(true);
      DLGThread.Priority := tpnormal;
      DLGThread.FreeOnTerminate:=true;
      DLGThread.m_str:=msg;
      DLGThread.dialog:=dlgtype;
      DLGThread.butt:=buttons;
      DLGThread.hlp:=helpctx;
      BloadThread.Resume;

end;
Код:
procedure TMDlg.Execute;
begin
Synchronize(message_dlg_thread);  - ?????????????????????????????????
DLGThread.Terminate;
end;
Немогу никак правильно описать в потоке функцию чтоб Synchronize мог ее запустить...
Получилось только простой вариант без результатов и с передачей в поток только текста... а хотелось бы все и кнопки и тип и результат обратно =(

Буду очень признателен за подсказки, ссылки на почитать и прочее полезное...

Последний раз редактировалось darkleo; 13.03.2013 в 02:45.
darkleo вне форума Ответить с цитированием
Старый 13.03.2013, 06:51   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Цитата:
Код:
if form7.mesagedlg_thread('Работаем?', mtWarning,[mbYes,mbNo],0)=mrYes then
 begin
 ....
 end;
У Вас логика где-то страдает. Какой поток, если Вы хотите чтобы ответ пришёл _сразу_ ? Код главного потока выполняется без остановки (для него самого) и ему надо будет возвращённый результат сразу читать, а при работе в потоке - нет этого результата - и неизвестно, когда он будет.
Потоки по своей сути вещи асинхронные и желаемого не добиться таки образом.

Цитата:
Немогу никак правильно описать в потоке функцию чтоб Synchronize мог ее запустить...
Получилось только простой вариант без результатов и с передачей в поток только текста... а хотелось бы все и кнопки и тип и результат обратно =(
Так и есть - необходимый для синхронайза метод - процедура без параметров. Всю работу с вводом-выводом данных обычно ведут через поля класса потока (что у Вас, кстати изображено, непонятно в чём у Вас тут сложности, если Вы уже задействовали эту модель, походу мало погуглили, или недопоняли чего гуглили).
Возврат же данных из потока обычно делают Callback'ом - надо будет Вам почитать, как с этим работать.
В общем виде Вы будете запускать поток, указывать ему данные с какими работать, в т.ч. колбэк-метод, а в колбэк-методе получать результат работы потока (ну поток ессно должен будет этот колбэк при своей работе вызвать).

Читать - http://forum.vingrad.ru/forum/topic-60076.html

Имха - делать поток для диалога - очень странное занятие, Вы либо не говорите, что у потока ещё какие-то функции, либо не совсем правильно спроектировали решение задачи.

Последний раз редактировалось phomm; 13.03.2013 в 06:53.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Swing в отдельном потоке oleg_kn Общие вопросы по Java, Java SE, Kotlin 0 08.07.2012 21:51
WinAPI.Как запустить программу с параметрами? ANtonP Помощь студентам 1 26.12.2010 03:02
Загрузка в отдельном потоке Crystallon Общие вопросы Delphi 4 05.10.2010 15:15
всплывающее окно(в отдельном потоке) Virus191288 Компоненты Delphi 8 21.01.2010 13:41
Загрузка данных в отдельном потоке Dj_smart Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 18.01.2010 23:29