Форум: "Основная";
Текущий архив: 2002.06.20;
Скачать: [xml.tar.bz2];
Вниз
Как удержать форму поверх всех окон? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c