Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Пустой заголовок формы (http://forum.oszone.net/showthread.php?t=214375)

Malfatto 30-08-2011 00:03 1742159

Пустой заголовок формы
 
Всем доброй ночи.

Как убрать заголовок у формы так, чтобы на панели задач надпись по-прежнему оставалась?

То есть форма с пустым заголовком (Caption = ''), а кнопка на панели задач заголовок имеет.

Delirium 30-08-2011 03:51 1742211

Не подскажу насчет делфи, в C# делается примерно так - http://www.codeproject.com/KB/cs/Cus...mByArijit.aspx .
Можно изменить цвет текста заголовка, чтобы он сливался с фоном.
На делфи вроде бы так: http://stackoverflow.com/questions/2...ions-title-bar

Malfatto 30-08-2011 06:15 1742223

Цитата:

Цитата Delirium
Можно изменить цвет текста заголовка, чтобы он сливался с фоном. »

очень странный метод, к тому же, на той же windows 7 это очень просто обнаружить.

Malfatto 30-08-2011 21:44 1742834

всё, я таки придумал решение:

блок 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 ясно что делают.


Время: 23:14.

Время: 23:14.
© OSzone.net 2001-