Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поверх всех окон [D7, Win95/98, WinXP]


Страницы:   1 2

Димыч ©   (2006-11-08 15:02:00) 

Как реализовать включение и выключение функции поверх всех окон.


Ketmar   (2006-11-09 01:00:00) [1]

>[21] RASkov 8-Nov-2006, 21:27
>Наверное RecreateWnd ченить или RecreateHandle.
>Собсно там все посмотреть можно...
ну лениво мне смотреть. кто знает (или любознателен) -- тот понял. %-)


DVM   (2006-11-08 23:10:00) [2]

Распечатать окно на принтере, наклеить на монитор.


RASkov   (2006-11-08 21:31:00) [3]

> или OnShow вызовет AV

Т.е. не AV а Raise;
Cannot change Visible in OnShow


RASkov   (2006-11-08 21:27:00) [4]

На FormCreate ошибки нет

procedure TForm1.FormCreate(Sender: TObject);
begin
 FormStyle:=fsStayOnTop;
 CheckBox1.Checked:=True;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if CheckBox1.Checked then FormStyle:=fsStayOnTop else FormStyle:=fsNormal;
end;

И при смене моргает некрасиво... И установка в OnActivate или OnShow вызовет AV

> не всё так просто. StayOnTop вызывает RecreateForm() (или
> как она там зовётся?). некрасиво это.

Наверное RecreateWnd ченить или RecreateHandle.
Собсно там все посмотреть можно...

А вот это работает везде и не моргает:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);     - Установка StayOnTop
SetWindowPos (Handle, HWND_NOTOPMOST , 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); - Normal


[14] Димыч ©   (08.11.06 15:42)
> SetWindowPos ( form1. Handle, HWND_NOTOPMOST , 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); - правда не помогло

Может то, что я выделил, в этом проблема...


Димыч   (2006-11-08 16:41:00) [5]

Блин хоть по таймеру запускай.


Ketmar   (2006-11-08 16:35:00) [6]

не всё так просто. StayOnTop вызывает RecreateForm() (или как она там зовётся?). некрасиво это.


Димыч   (2006-11-08 16:33:00) [7]


> RASkov   (08.11.06 15:33) [9]
> >Димыч, А StayOnTop не помогает?


Спасибо за совет, открыл глаза. Ну не знал я что это так просто. Вот только теперь проблема, из файла загружаются настройки приложения, среди которых есть параметр "оставаться поверх всех", пробовал при загрузке приложения применять свойство fomrstyle и в oncreate  и в onactivate и в onshow везде ошибка вылетает, куда же запихать


Ketmar   (2006-11-08 15:43:00) [8]

>[14] Димыч(c) 8-Nov-2006, 15:42
>правда не помогло
ищи у себя баг. я повторю: у меня работает.


RASkov   (2006-11-08 15:43:00) [9]


> мне просто интересно как он умудряется быть вообще "поверх
> всех окон, которые поверх всех окон" :)

Он крут.


Ketmar   (2006-11-08 15:43:00) [10]

>[13] Palladin(c) 8-Nov-2006, 15:41
>сотрем то понятно, мне просто интересно как он умудряется
>быть вообще "поверх всех окон, которые поверх всех окон" :)
а вот такой хитрый, зараза. %-)


Димыч   (2006-11-08 15:42:00) [11]

SetWindowPos (form1.Handle, HWND_ NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); - правда не помогло


Palladin   (2006-11-08 15:41:00) [12]


> Ketmar ©   (08.11.06 15:34) [11]

сотрем то понятно, мне просто интересно как он умудряется быть вообще "поверх всех окон, которые поверх всех окон" :)


Ketmar   (2006-11-08 15:36:00) [13]

>[10] Димыч(c) 8-Nov-2006, 15:33
>не помогло
а почему у меня опять сработало? я что-то снова сделал не так???


Ketmar   (2006-11-08 15:34:00) [14]

>[7] Palladin(c) 8-Nov-2006, 15:31
>Task Manager все равно победит :)
а мы его сотрём. %-)

>[9] RASkov 8-Nov-2006, 15:33
>че торчит??
всё торчит.

>>Димыч, А StayOnTop не помогает?
лёгкие пути -- это скучно.


Димыч   (2006-11-08 15:33:00) [15]

Спасибо, точно торчит, я так понял все дело в SWP_NOMOVE or SWP_NOSIZE.
А как теперь сделать это окно опять "обычны смертным", не поверх всех окон. Сделал вот так

 SetWindowPos (form1.Handle, HWND_NOTOPMOST , 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);


не помогло


RASkov   (2006-11-08 15:33:00) [16]


> вот торчит, зараза

че торчит?? программа? окно? или...? :)

>Димыч, А StayOnTop не помогает?


Anatoly Podgoretsky   (2006-11-08 15:31:00) [17]

> Димыч  (08.11.2006 15:24:04)  [4]

> Нужно что моя программа оставалась всегда по верх всех остальных приложений.

Чего захотел, а если другая программа тоже это желает? Будете друг другу морду бить?


Palladin   (2006-11-08 15:31:00) [18]


> Ketmar ©   (08.11.06 15:25) [5]

Task Manager все равно победит :)


Ketmar   (2006-11-08 15:25:00) [19]

вот торчит, зараза, сверху. упорно. запускаю что-то -- а оно всё равно сверху.


Ketmar   (2006-11-08 15:25:00) [20]

почему-то у меня всё работает. SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);, ага?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо