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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Плавающее окошко, некоторые проблемы 
:(
    Опции темы
Somebody32
Дата 15.2.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Overclocker
*


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

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



Решил создать плавающее окошко как например в DownloadMaster и многих менеджерах закачек, но столкнулся с некоторыми проблемами:

1) если ставить bsNone, то окно нельзя двигать
2)программа из-за активной формы постоянно висит в таскбаре
3) даже если ставить fsOntop, то окно перекрывается другими.

У кого есть хоть малейшие знания по данным проблемам, прошу поделиться.

P.S. В поиске искал, ничего не нашёл.
PM MAIL ICQ   Вверх
Romikgy
Дата 15.2.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Somebody32 @ 15.2.2006, 16:42 Найти цитируемый пост)
если ставить bsNone, то окно нельзя двигать

Можно
Цитата(Somebody32 @ 15.2.2006, 16:42 Найти цитируемый пост)
программа из-за активной формы постоянно висит в таскбаре

Можно спятать с таскбара
Цитата(Somebody32 @ 15.2.2006, 16:42 Найти цитируемый пост)
даже если ставить fsOntop, то окно перекрывается другими.

А это странно, должно быть всегда сверху


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
bems
Дата 15.2.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Цитата(Somebody32 @ 15.2.2006, 17:42 Найти цитируемый пост)
1) если ставить bsNone, то окно нельзя двигать
WM_NCHITTEST
Цитата(Somebody32 @ 15.2.2006, 17:42 Найти цитируемый пост)
2)программа из-за активной формы постоянно висит в таскбаре
ShowWindow(Application.handle,SW_HIDE)
Цитата(Somebody32 @ 15.2.2006, 17:42 Найти цитируемый пост)
3) даже если ставить fsOntop, то окно перекрывается другими.
действительно странно...

Это сообщение отредактировал(а) bems - 15.2.2006, 19:55


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Somebody32
Дата 16.2.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Overclocker
*


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

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



bems, нет, оно появляется, но если нажать на окно другой программы, то оно перекроется, как этого избежать?
PM MAIL ICQ   Вверх
_hunter
Дата 16.2.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



никак. для TopMost окон применяются все те же правила z-order' а.
те программы, у которых окно выше всех ( скорее всего ) используют свои алгоритмы отрисовки.
можеш попробовать два таких окна перекрыть -- посмотри что будет...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 16.2.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Просто нужно показывать свое окно в неактивном режиме.
Код

var
  wnd: HWND;
begin
    wnd := GetForegroundWindow;
    Show;
    FormStype := fsStayOnTop;
    SetForegroundWindow(wnd);
    SetActiveWindow(wnd);
end;

PM MAIL   Вверх
Somebody32
Дата 16.2.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Overclocker
*


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

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



Snowy, и это прописать в главную форму при вызове окошка? Или куда?
PM MAIL ICQ   Вверх
Snowy
Дата 16.2.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Это нудно прописать вместо Form2.Show.
Добавлено @ 16:08
По сути это то же Form2.Show, только возвращает фокус обратно окну, которое было активно до этого.
Тогда наше окно останется поверх, т.к. пользователю просто не нужно будет кликать по другому окну.
PM MAIL   Вверх
Somebody32
Дата 16.2.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Overclocker
*


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

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



Snowy, всё, работает, пасиб, но только вот не разобрался с перемещением окна, не хочет оно.
PM MAIL ICQ   Вверх
Snowy
Дата 16.2.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



PM MAIL   Вверх
Somebody32
Дата 16.2.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Overclocker
*


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

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



Огромное спасибо! Вопрос решен!
PM MAIL ICQ   Вверх
Somebody32
Дата 17.2.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Overclocker
*


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

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



Snowy, что-то рано я радовался... окошко всё равно исчезает под другими.. показываю его так
Код

if Checkbox1.Checked=True then
begin
   wnd := GetForegroundWindow;
   Form8.Show;
   FormStyle := fsStayOnTop;
   SetForegroundWindow(wnd);
   SetActiveWindow(wnd);
   ShowWindow(Application.handle,SW_HIDE);
end;


Но оно исчезает, не пойму...
PM MAIL ICQ   Вверх
Snowy
Дата 17.2.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



А зачем это:
Цитата(Somebody32 @ 17.2.2006, 17:38 Найти цитируемый пост)
ShowWindow(Application.handle,SW_HIDE);
?

Цитата(Somebody32 @ 17.2.2006, 17:38 Найти цитируемый пост)
Но оно исчезает, не пойму...
Что исчезает? Плавающее окошко?
Видимо у тебя главная форма тоже fsStayOnTop.
В дизайне убери с плавающего окошка fsStayOnTop. Поставь обычный fsNormal.
Еще можешь в конце попробовать добавить Form8.BringToFront;
PM MAIL   Вверх
z-END
Дата 17.2.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



fsStayOnTop действительно имеет толи фичу толи баг, но в некоторых случаях, при повторной активации приложения, окно действительно перестает быть "поверх всех"


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 17.2.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Код
if Checkbox1.Checked=True then
var
  wnd: HWND;
begin
  ShowWindow(Application.handle,SW_HIDE);
  wnd := GetForegroundWindow;
  with Form8 do
  begin
    Show;
    FormStyle := fsStayOnTop;
    BringToFront;
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,
                SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
  end;
  SetForegroundWindow(wnd);
  SetActiveWindow(wnd);
end;

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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