Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> модальное окошко, модальное окошко 
:(
    Опции темы
bassbuster
Дата 24.2.2004, 15:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











проблема следующего содержания: есть CustomControl, он появляется POPUp (типа лист в комбобоксе), так вот нужно скрывать это окошко если узер вдруг вздумает подвинуть форму. Ловить событие ACTIVATE не представляется возможным, потому, что фокус остается на родительской форме, и на контрол он попадать и не должен. Примерно понятно, что контрол должен стать модальным, но как CustomControl показать модально - ума неприложу...
Подскажите плиз, может кто знает как это сделать, буду очень признателен
  Вверх
bassbuster
Дата 25.2.2004, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 24.2.2004

Репутация: нет
Всего: нет



вобчем-то все аказалось несложно, жаль тока никто не смог помочь...
Ну если у кого нить возникнет вопрос, то - спроси меня как.
PM MAIL   Вверх
Medved
Дата 25.2.2004, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Ну запостите код...


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
bassbuster
Дата 25.2.2004, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 24.2.2004

Репутация: нет
Всего: нет



Ну, все по порядку:
для начала как сделать, чтоб CustomControl стал popup, нужно переопределить метод CreateParam

Цитата

procedure TComboList.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style xor WS_CHILD;
  Params.Style := Params.Style or WS_POPUP;
end;

тем самым убираем из стиля создания Child и ставим Popup
после этого значения Top и Left нужно задавать уже в Screen координатах
потом, если нам надо чтобы наш контрол показывался модально, т.е. как popup менюшка
нужно создать специальный метод, который нужно использовать вместо MyControl.Visible := True;
итак:

Цитата

procedure MyControl.ShowModal;
begin
  Visible := True;
  try
    repeat
      SendMessage(Application.Handle, WM_ENTERIDLE,MSGF_MENU , Handle);
          {Это мы посылаем нашему приложению сообщния, что оно сейчас простаивает,
          в принципе эта строчка необязательна}

    Application.HandleMessage;
          {Здесь мы говорим приложению, стоять и не обрабатывать новые сообщения}

      if (GetCapture<>Handle) then SetCapture(Handle);
          {Здесь мы говорим системе, что именно наш контрол должен получать сообщения
          от мышы, а не какой-то другой}

    until not Visible;
    {пока наш контрол видим цикл повторяется}

  finally
    ReleaseCapture;
    {возвращаем все на свои места}

  end;
end;


в этом цикле можно проверять любой параметр, необязательно видимость, главное, иметь возможность сменить его когда контрол должен пропасть с экрана

дальше остается только сделать чтото типа Visible := False; в обработчике сообщения WM_LMBUTTONDOWN
что интересно - в этом способе ненужно передавать фокус в наш компанент, так, что оснавная форма не не теряет активности (как сделать, чтоб фокус не передавался после клика по котролу мышью, надеюсь сами догадаетесь). и все, элементарно и действенно, правда это всего лишь основа, под свой конкретный случай скорее всего нужно будет сделать еще кое что...

PM MAIL   Вверх
Medved
Дата 25.2.2004, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Спасибо.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.