![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как удержать форму поверх всех окон? [D3, Win95/98]
zeos © (2002-06-08 17:15:00)Только не говорите, что в инспекторе. Мне нужно организовать переключение (обычное состояние/поверх всех окон), чтобы форма при этом не перерисовывалась.
Walker (2002-06-10 01:34:00) [1]to SPeller ©
ты прав, конструкция очень интересная :)
(я сам заметил только тогда, когда уже отослал сообщение)
а почему я так делал - толком не помню... для отладки наверное
Novarm (2002-06-10 00:08:00) [2]А не проще-ли:
Form1.FormStyle:=fsStayOnTop;
Form1.FormStyle:=fsNormal;
Лично я так всегда делал
sevylor (2002-06-09 20:07:00) [3]procedure TForm1.CheckBox4Click(Sender: TObject);
begin
if CheckBox4.Checked then
SetWindowPos(Handle, hwnd_TopMost, 0, 0, 0, 0, swp_NoMove + swp_NoSize)
else
SetWindowPos(Handle, hwnd_NoTopMost, 0, 0, 0, 0, swp_NoMove + swp_NoSize);
end;
Что интересно, то же самое описано в Forms.pas, но действительно, если указывать Form1.Style=fsOnTop - то перерисовка, а если писать эти строки в лоб, то нет! Удачи.
SPeller (2002-06-09 06:38:00) [4]if cb_AlwaysOnTop.Checked
then uFlags:=SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE
else uFlags:=SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE;
Весьма интересная конструкция...:)))))
Walker (2002-06-09 03:24:00) [5]где-то в старых своих исходниках я вот что отыскал:
procedure TFrm_Options.cb_AlwaysOnTopClick(Sender: TObject);
var
uFlags: Cardinal;
hWndInsertAfter: HWND;
begin
if cb_AlwaysOnTop.Checked
then uFlags:=SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE
else uFlags:=SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE;{}
if cb_AlwaysOnTop.Checked
then hWndInsertAfter:=HWND_TOPMOST
else hWndInsertAfter:=HWND_NOTOPMOST;
SetWindowPos(Application.Handle,hWndInsertAfter,
0, 0, 0, 0, uFlags);
end;
причём кроме этого пришлось писать собственные процедуры сворачивания окна и восстановления из значка
zeos (2002-06-08 19:52:00) [6]>MaximatorVeter ©
Разве нельзя ей этого простить или у вас есть веские причины ...
Мне это очень не ндравиться.
MaximatorVeter (2002-06-08 18:41:00) [7]
> zeos
> Song
Стоит заметить, что в этом случае форма вся видна (смена formStyle происходит по CheckBox на форме). Перерисовывать ее как бы и не надо. Но ведь она при этом так заманчиво подмигивает.
> zeos
Разве нельзя ей этого простить или у вас есть веские причины ...
Song (2002-06-08 18:21:00) [8]Прорисовка есть всегда. В винзипе не смотрел, но видимо старое состояние просто перерисовывается принудительно.
zeos (2002-06-08 17:29:00) [9]Почему же в WinZip"e перерисовки нет!?
Song (2002-06-08 17:24:00) [10]Вы поймите что переключение снизу на верх по Z буферу приведёт к тому, что изображение должно перерисоваться полночтью/частично, иначе на окне будут куски других окон, которые раньше его закрывали. Я советую Вам книжки умные почитать, чтобы такие вопросы отпадали сами собой.
Кроме fsStayOnTop окно можно вытолкнуть наверх через SetWindowPos() как Вам уже посоветовал MBo.