Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.20;
Скачать: CL | DM;

Вниз

Как удержать форму поверх всех окон?   Найти похожие ветки 

 
zeos   (2002-06-08 17:15) [0]

Только не говорите, что в инспекторе. Мне нужно организовать переключение (обычное состояние/поверх всех окон), чтобы форма при этом не перерисовывалась.


 
Song ©   (2002-06-08 17:24) [1]

Вы поймите что переключение снизу на верх по Z буферу приведёт к тому, что изображение должно перерисоваться полночтью/частично, иначе на окне будут куски других окон, которые раньше его закрывали. Я советую Вам книжки умные почитать, чтобы такие вопросы отпадали сами собой.
Кроме fsStayOnTop окно можно вытолкнуть наверх через SetWindowPos() как Вам уже посоветовал MBo.


 
zeos   (2002-06-08 17:29) [2]

Почему же в WinZip"e перерисовки нет!?


 
Song ©   (2002-06-08 18:21) [3]

Прорисовка есть всегда. В винзипе не смотрел, но видимо старое состояние просто перерисовывается принудительно.


 
MaximatorVeter ©   (2002-06-08 18:41) [4]


> zeos


> Song

Стоит заметить, что в этом случае форма вся видна (смена formStyle происходит по CheckBox на форме). Перерисовывать ее как бы и не надо. Но ведь она при этом так заманчиво подмигивает.

> zeos

Разве нельзя ей этого простить или у вас есть веские причины ...


 
zeos   (2002-06-08 19:52) [5]

>MaximatorVeter ©

Разве нельзя ей этого простить или у вас есть веские причины ...

Мне это очень не ндравиться.


 
Walker ©   (2002-06-09 03:24) [6]

где-то в старых своих исходниках я вот что отыскал:


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;


причём кроме этого пришлось писать собственные процедуры сворачивания окна и восстановления из значка


 
SPeller ©   (2002-06-09 06:38) [7]

if cb_AlwaysOnTop.Checked
then uFlags:=SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE
else uFlags:=SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE;

Весьма интересная конструкция...:)))))


 
sevylor ©   (2002-06-09 20:07) [8]

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 - то перерисовка, а если писать эти строки в лоб, то нет! Удачи.


 
Novarm   (2002-06-10 00:08) [9]

А не проще-ли:
Form1.FormStyle:=fsStayOnTop;
Form1.FormStyle:=fsNormal;

Лично я так всегда делал


 
Walker ©   (2002-06-10 01:34) [10]

to SPeller ©
ты прав, конструкция очень интересная :)
(я сам заметил только тогда, когда уже отослал сообщение)

а почему я так делал - толком не помню... для отладки наверное



Страницы: 1 вся ветка

Текущий архив: 2002.06.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-65066
Phil
2002-06-10 12:41
2002.06.20
Помогите!!!


4-65286
Chir
2002-04-20 21:19
2002.06.20
Параметры функции


3-64977
VAleksey
2002-05-24 07:25
2002.06.20
ODBC


1-65083
Reticent
2002-06-10 16:08
2002.06.20
Sender?!


8-65184
Королев
2002-02-06 14:07
2002.06.20
какая распайка у кабеля cc-208?