HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[Delphi] Как вывести диалог из компонента?
  #1  
Старый 12.05.2010, 10:18
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
С нами: 8582863

Репутация: 69
По умолчанию [Delphi] Как вывести диалог из компонента?

Всем доброго времени суток! Вопрос такой. Как вывести диалог из компонента, причем вывести так, что выполнение дальнейшего кода продолжится, пока не закроешь диалог? Диалог примерно такой:

 
Ответить с цитированием

  #2  
Старый 12.05.2010, 10:41
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
С нами: 10653446

Репутация: 836


По умолчанию

ShowModal или что-то в таком духе. Дельфи почти забыл. Для форм был такой метод.
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #3  
Старый 12.05.2010, 10:58
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
С нами: 8582863

Репутация: 69
По умолчанию

как то не очень то хотелось бы пихать модуль Forms в компоент. Диалог должен состоять из панели.
 
Ответить с цитированием

  #4  
Старый 12.05.2010, 11:25
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
С нами: 10653446

Репутация: 836


По умолчанию

WinAPI?
Панель то ты куда-то должен поместить
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #5  
Старый 12.05.2010, 11:35
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
С нами: 8582863

Репутация: 69
По умолчанию

а будет ли грамотно, если в компоненте будет такой код:

Код:
uses frmDialogs;

...

function TidVKClient.Login(): boolean;
begin
  { код логина }
 // если капча, показать диалог
 Dlg.ShowModal; 
 { продолжение выполнения кода }
end;
 
Ответить с цитированием

  #6  
Старый 12.05.2010, 13:46
GhostOnline
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
С нами: 9152955

Репутация: 84
По умолчанию

Не хочешь подключать формс к своему классу - просто создай событие у своего компонента типа TidVKClient.OnCatcha. В обработчик этого события передавай stream с пикчей, а тот кто будет использовать твой компонент извне - будет обрабатывать событие, например либо капчу показать в модальном окне, либо отправить на антигейт и т.п.
 
Ответить с цитированием

  #7  
Старый 12.05.2010, 14:43
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
С нами: 8582863

Репутация: 69
По умолчанию

так ведь надо же еще выполнение код приостановить как то о_О
 
Ответить с цитированием

  #8  
Старый 12.05.2010, 15:53
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
С нами: 9162683

Репутация: 175
По умолчанию

ShowModal в данном случае будет нормально.
 
Ответить с цитированием

  #9  
Старый 12.05.2010, 15:57
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
С нами: 8582863

Репутация: 69
По умолчанию

так и сделал)) помог следующий код:

Код:
// ---- Вывод диалога ввода кода капчи ----
procedure TidVKClient.ShowCaptchaDialog(const captcha_sid: string);
var
  MS  : TMemoryStream;
  Jpg : TJpegImage;
begin
   Ms  := TMemoryStream.Create;
   Jpg := TJpegImage.Create;
   Get('http://vkontakte.ru/captcha.php?s=1&sid=' + captcha_sid, Ms);
   Ms.Position := 0;
   Jpg.LoadFromStream(ms);
   DlgForm.imgKey.Picture.Graphic := Jpg;
   Jpg.Free;
   Ms.Free;
   DlgForm.Caption := 'Enter Code';
   DlgForm.ShowModal;
end;
однако меня этот uses Forms; не улыбает вовсе
 
Ответить с цитированием

  #10  
Старый 12.05.2010, 16:38
Jingo Bo
Познающий
Регистрация: 25.10.2009
Сообщений: 97
С нами: 8707843

Репутация: 15
По умолчанию

Цитата:
однако меня этот uses Forms; не улыбает вовсе
Раз не нравится сделай панель в памяти по данным dfm файла твоего диалога(всё ручками), потом с winapi создавай обычное окно без заголовка и через Windows.SetParent на то окно лепи панельку.

P.S. Если уж делаешь компонент, то делай универсальнее и более гибкий код. Кстати вышеуказаный код должен быть в таким
Код:
// ---- Вывод диалога ввода кода капчи ----
procedure TidVKClient.ShowCaptchaDialog(const captcha_sid: string; const notice : String = 'Enter Code');
var
  MS  : TMemoryStream;
  Jpg : TJpegImage;
begin
   Ms  := TMemoryStream.Create;
   Jpg := TJpegImage.Create;
   try
     Get('http://vkontakte.ru/captcha.php?s=1&sid=' + captcha_sid, Ms);
     Ms.Position := 0;
     Jpg.LoadFromStream(ms); {при не правльных данных здесь может вылезть эксцепшн}
     //DlgForm.imgKey.Picture.Graphic := Jpg; {не верно, нужно делать через Assign, ибо будет утечка памяти и при хз что будет когда Jpg сделают Free}
     DlgForm.imgKey.Picture.Assign(Jpg); {Делфи под боком нет, так что не помню, на Graphic или сразу на Picture Assign делать)}
   finally  
     Jpg.Free;
     Ms.Free;
   end;
   DlgForm.Caption := notice;
   DlgForm.ShowModal;
end;
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Халявный интернет или как спрятаться надежнее чем VPN или SSH с цепочкой соксов. kodzero Статьи 20 06.08.2010 23:54
Халявный Интернет (для маленьких) stopxaker Статьи 91 20.04.2010 19:52
Помогите найти историю GrimmJow Болталка 11 05.04.2010 21:34
Как стать хакером! foreva Болталка 19 12.12.2007 00:12



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.