Главная страница
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.009 c
1-65167
Lego
2002-06-08 02:35
2002.06.20
Проблема есть... Error: Out of memory...


14-65227
MisterBin
2002-05-17 11:01
2002.06.20
Кто смотрел фильм


1-65069
BofA
2002-06-09 15:56
2002.06.20
Вопрос по StringGrid у


3-64917
Dimaiv
2002-05-25 16:40
2002.06.20
Когда работаешь через TTable Delphi,


3-64950
alexus
2002-05-27 21:40
2002.06.20
БД на болванке