| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Popup Panel |
| Автор: Superklug 12.12.2008, 00:18 | ||
| Доброго всем времени суток! Мне необходимо сделать всплывающее окно. Изначально я просто создал еще одну форму. Показывал ее когда надо и скрывал по событию OnDeactivate. В этом есть ряд недостатков, поэтому я решил создать компонент TPanel и показывать его как отдельное окно. Помогите пожалуйста с реализацией... Чтобы разрешить "всплывать" за пределы формы, в качестве родителя указываю рабочий стол:
Теперь, на сколько я знаю, нужно установить какие-то параметры с помощью функций SetWindowLong и SetWindowPos. А вот какие не знаю =( Надеюсь на вашу помощь... P.S. В правильном ли я направлении пошел вообще? |
| Автор: Superklug 12.12.2008, 00:43 |
| Вычитал, что нужно установить: а) стили окна WS_BORDER | WS_EX_PALETTEWINDOW;//SetWindowLong б) стиль класса окна CS_SAVEBITS; //SetWindowWord С пунктом а) все понятно. А вот как использовать SetWindowWord не знаю((( |
| Автор: Superklug 12.12.2008, 13:31 | ||||
Ну вот так например
Ведь любой контрол - это тоже окно. Поэтому, на сколько я понимаю, мы можем отобразить его как угодно... Еще недавно разбирался в компоненте, у которого "всплывает" TListBox. Там такой код:
Указать в качестве родителя рабочий стол у меня получилось. А как присвоить окну параметр CS_SAVEBITS не знаю =( В случае со второй формой есть несколько неудобств... Например при ее появлении, главная форма становится неактивной( А с фреймами я вообще никогда не работал... mrbrooks, помогите реализовать хотя бы какой-нибудь вариант. Заранее огромное спасибо! |
| Автор: mrbrooks 12.12.2008, 15:26 |
| Superklug, да здесь можно решить сколь угодно разными способами. Так пойдет? |
| Автор: Superklug 12.12.2008, 15:43 |
| mrbrooks, мне нужно немного не то. Фактически это PopupMenu, только боле продвинутый... Т.е. представляет собой не просто список элементов, а группу контролов. Он должен пропадать так же как и любое всплывающее меню. Т.е. при щелчке вне меню либо нажатии Esc. Вы, на сколько я понял, использовали вторую форму. При ее появлении, главная форма становится неактивной. Как этого избежать? |
| Автор: xvr 12.12.2008, 15:45 | ||||||
Нет, если мсье не мазохист конечно
|
| Автор: mrbrooks 12.12.2008, 15:52 |
| xvr, я ему аналогичное и скинул в архиве Добавлено через 29 секунд И никаких ShowModal - ов - чес слово |
| Автор: Superklug 12.12.2008, 21:23 |
| mrbrooks, xvr, прочитайте первый пост... Я так уже делал. Меня не устроил результат. Как сделать так, чтобы при всплывании второго окна, первое осталось активным? |
| Автор: xvr 13.12.2008, 17:06 | ||
Поставь второй форме флаг fsStayOnTop в проперть FormStyle, сделай ей Show(), затем снова активизируй первую форму(SetFocus()) |
| Автор: Superklug 13.12.2008, 22:57 | ||
Если так сделать, то первая форма будет неприятно "мигать". И еще при щелчке на вторую форму она, разумеется, станет активной... А может с помощью SetWindowLong можно какие нибудь параметры окна установить, чтобы оно неактивным было? Или подскажите как пользоваться функцией SetWindowWord... |
| Автор: xvr 13.12.2008, 23:06 | ||||
Попробуйте BorderStyle в bsToolWindow |