Показать сообщение отдельно
  #1  
Старый 06.09.2011, 17:31
x2088 x2088 вне форума
Прохожий
 
Регистрация: 05.09.2011
Сообщения: 6
Репутация: 10
По умолчанию Нестандартное окно: как это реализовать?

ОКНО БЕЗ ЗАГОЛОВКА

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  BorderStyle := bsSizeable; //alNone; - растягиваемое / нерастягиваемое окно;
  SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and
   not WS_CAPTION or WS_BORDER);
  Height := Height - GetSystemMetrics(SM_CYCAPTION);
  Refresh;
end;

ТАСКАЕМ ОКНО ЗА LABEL

Код:
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const sc_dragmove = $f012;
begin
  releasecapture;
  Form1.Perform(wm_syscommand, sc_dragmove, 0);
end;

РАЗВОРАЧИВАЕМ И ВОССТАНАВЛИВАЕМ ОКНО БЕЗ ЗАГОЛОВКА

Код:
  public
    { Public declarations }
    WinPrp: array [1..4] of Integer;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  If Form1.Align <> alClient
     Then begin
          WinPrp[1] := Form1.Left;
          WinPrp[2] := Form1.Top;
          WinPrp[3] := Form1.Width;
          WinPrp[4] := Form1.Height;
          Form1.Align := alClient;
          end
     Else begin
          Form1.Align := alNone;
          Form1.Left   := WinPrp[1];
          Form1.Top    := WinPrp[2];
          Form1.Width  := WinPrp[3];
          Form1.Height := WinPrp[4];
          end;
end;

СВЕРНУТЬ В ТАСКБАР ОКНО БЕЗ КНОПКИ

Код:
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_SHOW);       // показываем форму окна;
  Application.MainForm.Show;                     // забираем фокус в окно;
  ShowWindow(Application.Handle, WM_SETFOCUS);   // забираем фокус на таскбар;
  ShowWindow(Application.Handle, BM_SETSTATE);   // кликаем;
  ShowWindow(Application.Handle, WM_KILLFOCUS);  // отдаём фокус системе;
end;

СНОСИМ КНОПКУ В ТАСКБАРЕ ПО НЕЧЁТНЫМ КЛИКАМ И СВАРАЧИВАЕМ В ТРЕЙ ПО ЧЁТНЫМ

Код:
Application.MainFormOnTaskbar := False; //в проекты :: посмотреть исходник;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
  If Tag <> 1
     Then begin
          ShowWindow(Application.Handle, SW_HIDE);
          Tag := 1;
          end
     Else begin
          TrayIcon1.Visible := True;
          Application.MainForm.Hide;
          Tag := 0;
          end;
end;

ВЫНИМАЕМ ОКНО ИЗ ТРЕЯ ПО ДАБЛКЛИКУ И ПОКАЗЫВАЕМ ЕГО КНОПКУ В ТАСКБАРЕ

Код:
Application.MainFormOnTaskbar := False; //в проекты :: посмотреть исходник;

procedure TForm1.TrayIcon1DblClick(Sender: TObject);
begin
  TrayIcon1.Visible := False; //True;
  Application.MainForm.Show;
  ShowWindow(Application.Handle, SW_SHOW); //кнопка в таскбаре;
end;

ОКНО ПОВЕРХ ВСЕХ ОКНОН С НИЗКИМ ПРИОРИТЕТОМ

Код:
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
  If FormStyle <> fsStayOnTop
     Then begin
          FormStyle := fsStayOnTop;
          end
     Else begin
          FormStyle := fsNormal;
          end;
end;
Ответить с цитированием