Показать полную графическую версию : [решено] Пустой заголовок формы
Malfatto
30-08-2011, 00:03
Всем доброй ночи.
Как убрать заголовок у формы так, чтобы на панели задач надпись по-прежнему оставалась?
То есть форма с пустым заголовком (Caption = ''), а кнопка на панели задач заголовок имеет.
Delirium
30-08-2011, 03:51
Не подскажу насчет делфи, в C# делается примерно так - http://www.codeproject.com/KB/cs/CustomizedFormByArijit.aspx .
Можно изменить цвет текста заголовка, чтобы он сливался с фоном.
На делфи вроде бы так: http://stackoverflow.com/questions/2018930/change-the-color-of-the-applications-title-bar
Malfatto
30-08-2011, 06:15
Можно изменить цвет текста заголовка, чтобы он сливался с фоном. »
очень странный метод, к тому же, на той же windows 7 это очень просто обнаружить.
Malfatto
30-08-2011, 21:44
всё, я таки придумал решение:
блок interface:
TTaskBarButton = class(TObject)
private
FCaption: String;
FHandle: HWND;
procedure SetCaption(ACaption: String);
public
property Caption: String read FCaption write SetCaption;
property Handle: HWND read FHandle;
procedure Show;
procedure Hide;
constructor Create;
destructor Destroy; override;
end;
блок implementation:
procedure TTaskBarButton.SetCaption(ACaption: String);
begin
FCaption:=ACaption;
SetWindowText(Handle,ACaption);
end;
procedure TTaskBarButton.Show;
begin
ShowWindow(FHandle,SW_SHOW);
end;
procedure TTaskBarButton.Hide;
begin
ShowWindow(FHandle,SW_HIDE);
end;
function TaskBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if Msg <> WM_SYSCOMMAND then Result:=DefWindowProc(hWnd,Msg,wParam,lParam) else Result:=0;
end;
constructor TTaskBarButton.Create;
var
WindowClass: TWndClass;
begin
inherited;
WindowClass.style:=CS_HREDRAW or CS_VREDRAW;
WindowClass.lpfnWndProc:=@TaskBarProc;
WindowClass.cbClsExtra:=0;
WindowClass.cbWndExtra:=0;
WindowClass.hInstance:=HInstance;
WindowClass.hIcon:=LoadIcon(0,'MAINICON');
WindowClass.hCursor:=LoadCursor(0,IDC_ARROW);
WindowClass.hbrBackground:=COLOR_BTNFACE;
WindowClass.lpszMenuName:=nil;
WindowClass.lpszClassName:='TTaskBarButton';
Windows.RegisterClass(WindowClass);
FHandle:=CreateWindowEx(WS_EX_APPWINDOW,'TTaskBarButton',nil,WS_POPUP,0,0,0,0,0,0,HInstance,nil);
end;
destructor TTaskBarButton.Destroy;
begin
Windows.UnregisterClass('TTaskBarButton',HInstance);
inherited;
end;
объявить переменную (в блоке interface, разумеется):
var
TaskBarButton: TTaskBarButton;
в класс формы добавить (причём добавить для каждой формы, где отличается заголовок):
protected
procedure CreateParams(var Params: TCreateParams); override;
реализация:
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent:=TaskBarButton.Handle;
end;
в основном файле программы сразу после begin:
TaskBarButton:=TTaskBarButton.Create;
TaskBarButton.Caption:='Заголовок';
в конце вставить
TaskBarButton.Free;
чтобы сменить заголовок - используйте TaskBarButton.Caption.
методы Show/Hide ясно что делают.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.