Форум: "WinAPI";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
ВнизМанипулирование с заголовком формы Найти похожие ветки
← →
МитяЙ2 (2003-07-07 04:31) [0]Здравствуйте, Мастера.
Подскажите как убрать заголовок формы
....
потом что-то сделать
....
И вновь показать заголовок формы.
← →
Evgeny V (2003-07-07 05:33) [1]x=GetWindowLong(Form1->Handle,GWL_STYLE);
x&=~WS_CAPTION;// убрать заголовок
SetWindowLong(Form1->Handle,GWL_STYLE,x);
x|=WS_CAPTION;// показать заголовок заголовок
SetWindowLong(Form1->Handle,GWL_STYLE,x);
код на си, x&=~WS_CAPTION; в паскле x:=x AND (NOT WS_CAPTION);,
x|=WS_CAPTION; в паскале x:=x OR WS_CAPTION; (паскаль знаю плохо, возможно расшифровал с ошибкой, извини)
← →
Митяй2 (2003-07-07 07:31) [2]Спасибо, попробую...
← →
Митяй2 (2003-07-08 17:57) [3]Попробовал, и вот что получилось:
При выполнении:
WindInfo:=GetWindowLong(Form1.Handle,GWL_STYLE);
WindInfo:=WindInfo AND NOT(WS_CAPTION);
SetWindowLong(Form1.Handle,GWL_STYLE,WindInfo);
Заголовок становиться ТОЛЬКО НЕДОСТУПНЫМ, но видим.
А так же окно не прорисовывается с краев, не прорисовка видна
в областях шириной слева и справа, и высотой сверху и снизу
всего ОДИН пиксел.
При выполнении:
WindInfo:=GetWindowLong(Form1.Handle,GWL_STYLE);
WindInfo:=WindInfo OR(WS_CAPTION);
SetWindowLong(Form1.Handle,GWL_STYLE,WindInfo);
Заголовок принимает первоначальные свойства.
← →
Th (2003-07-08 18:37) [4]
Form.BorderStyle:=bsNone;
...Do something...
Form.BorderStyle:=bsSizeable; // or other
Если надо, чтобы исчезал ТОЛЬКО заголовок, а sizeable border (thickframe в терминологии windows)оставался, то так:
Form.BorderStyle:=bsNone;
SetWindowLong(Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE)+WS_THICKFRAME);
SendMessage(Handle,CM_BORDERCHANGED,0,0);
...Do something...
Form.BorderStyle:=bsSizeable; // or other
To Митяй2
Попробуйте после вызова SetWindowLong делать следующее:
SendMessage(Handle,CM_BORDERCHANGED,0,0);
Мне помогло в свое время
← →
Митяй2 (2003-07-09 05:39) [5]Разобрался - нужно ещё менять высоту формы:
procedure TFmAuto.HideTitlebar;
var Save : Longint;
begin
if BorderStyle=bsNone then Exit;
Save:=GetWindowLong(Handle, GWL_STYLE);
if (Save and WS_CAPTION)=WS_CAPTION then
begin
case BorderStyle of
bsSingle, bsSizeable : SetWindowLong(Handle, GWL_STYLE, Save and (Not WS_CAPTION) or WS_BORDER);
bsDialog : SetWindowLong(Handle, GWL_STYLE, Save and (Not WS_CAPTION) or DS_MODALFRAME or WS_DLGFRAME);
end;
Height:=Height-GetSystemMetrics(SM_CYCAPTION);
Refresh;
End;
end;
procedure TFmAuto.ShowTitlebar;
var Save : Longint;
begin
if BorderStyle=bsNone then Exit;
Save:=GetWindowLong(Handle, GWL_STYLE);
if (Save and WS_CAPTION)<>WS_CAPTION then
begin
case BorderStyle of
bsSingle,bsSizeable : SetWindowLong(Handle, GWL_STYLE, Save or WS_CAPTION or WS_BORDER);
bsDialog : SetWindowLong(Handle, GWL_STYLE, Save or WS_CAPTION or DS_MODALFRAME or WS_DLGFRAME);
end;
( SM_CYCAPTION) Разобрался - нужно ещё менять высоту формы:
procedure TFmAuto.HideTitlebar;
var Save : Longint;
begin
if BorderStyle=bsNone then Exit;
Save:=GetWindowLong(Handle, GWL_STYLE);
if (Save and WS_CAPTION)=WS_CAPTION then
begin
case BorderStyle of
bsSingle, bsSizeable : SetWindowLong(Handle, GWL_STYLE, Save and (Not WS_CAPTION) or WS_BORDER);
bsDialog : SetWindowLong(Handle, GWL_STYLE, Save and (Not WS_CAPTION) or DS_MODALFRAME or WS_DLGFRAME);
end;
Height:=Height-GetSystemMetrics(SM_CYCAPTION);
Refresh;
End;
end;
procedure TFmAuto.ShowTitlebar;
var Save : Longint;
begin
if BorderStyle=bsNone then Exit;
Save:=GetWindowLong(Handle, GWL_STYLE);
if (Save and WS_CAPTION)<>WS_CAPTION then
begin
case BorderStyle of
bsSingle,bsSizeable : SetWindowLong(Handle, GWL_STYLE, Save or WS_CAPTION or WS_BORDER);
bsDialog : SetWindowLong(Handle, GWL_STYLE, Save or WS_CAPTION or DS_MODALFRAME or WS_DLGFRAME);
end;
Height:=Height+getSystemMetrics(SM_CYCAPTION);
Refresh;
end;
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c