Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

MDI окна   Найти похожие ветки 

 
Sergey_b   (2006-09-28 11:31) [0]

Здравствуйте все.
Как свернуть дочернее окно на StatusBar?
Заранее благодарен.


 
Ketmar ©   (2006-09-28 11:39) [1]

никак.


 
clickmaker ©   (2006-09-28 11:40) [2]


> свернуть дочернее окно на StatusBar?

то есть?


 
zdm ©   (2006-09-28 11:41) [3]

StatusBar он не "Панель задач" как в винде


 
Palladin ©   (2006-09-28 11:42) [4]

скрыть его и нарисовать картинку на статусбаре


 
clickmaker ©   (2006-09-28 11:43) [5]

неужели... автор называет Панель задач статус баром?


 
zdm ©   (2006-09-28 11:48) [6]

Да кто его знает что он хотел, автор можно поподробней цель задачи объяснить?


 
Sergey_b   (2006-09-28 11:48) [7]

Прошу прощения, на панель задач.


 
zdm ©   (2006-09-28 11:49) [8]

о я ОРАКУЛ


 
Sergey_b   (2006-09-28 11:50) [9]

Чтобы свернутое окно было видно в виде иконки на Панели задач


 
Sergey_b   (2006-09-28 11:51) [10]


> Да кто его знает что он хотел, автор можно поподробней цель
> задачи объяснить?

Чтобы было красиво


 
Palladin ©   (2006-09-28 11:53) [11]

хем... проще на статусбар :)


 
Sergey_b   (2006-09-28 11:55) [12]


> хем... проще на статусбар :)

Как???


 
zdm ©   (2006-09-28 11:55) [13]

:)


 
zdm ©   (2006-09-28 11:56) [14]

[1]


 
Ketmar ©   (2006-09-28 11:56) [15]

>[11] Palladin(c) 28-Sep-2006, 11:53
>хем... проще на статусбар :)
однофигственно. ну подумаешь -- вместо отрисовки статусбара создать окошко со стилем WS_EX_APPWINDOW. ну и обрабатывать его сообщения. что там геморрой, что там. %-)


 
clickmaker ©   (2006-09-28 11:56) [16]


> [9] Sergey_b   (28.09.06 11:50)


procedure TForm1.CreateParams(var Params: TCreateParams); // должна быть объявлена как override;
begin
  inherited CreateParams(Params);

  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;


 
Palladin ©   (2006-09-28 11:58) [17]


> Ketmar ©   (28.09.06 11:56) [15]
> clickmaker ©   (28.09.06 11:56) [16]


аа... не работает при fsMDIChild... только что для прикола попытался... внутрь даже влазить нехочу... лентяво...


 
Sergey_b   (2006-09-28 12:02) [18]

Что это?
А есть форум для новорожденных?
Где про это можно почитать?

>
>
> procedure TForm1.CreateParams(var Params: TCreateParams);
>  // должна быть объявлена как override;
> begin
>   inherited CreateParams(Params);
>
>   Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
> end;


 
clickmaker ©   (2006-09-28 12:09) [19]


> Где про это можно почитать?

Delphi Help


 
Palladin ©   (2006-09-28 12:11) [20]


> Ketmar ©   (28.09.06 11:56) [15]

а... невнимательно прочитал... все равно коряво :) хотя Word так и работает... все таки проще на статусбар :)


 
Palladin ©   (2006-09-28 12:14) [21]


> хотя Word так и работает

не... вру... все таки access...


 
Игорь Шевченко ©   (2006-09-28 12:19) [22]

Дочерние окна на панель задач не сворачиваются в принципе.


 
saxon   (2006-09-28 12:42) [23]


> Игорь Шевченко ©   (28.09.06 12:19) [22]

хм .. а у access, как уже говорил

> Palladin ©   (28.09.06 12:14) [21]

что за окна такие?
или там как то хитро с "обыкновенными" работают, может знаете как?


 
Ketmar ©   (2006-09-28 12:42) [24]

>[22] Игорь Шевченко(c) 28-Sep-2006, 12:19
>Дочерние окна на панель задач не сворачиваются в
>принципе.
это понятно. я предлагал при сворачивании создавать новое окно, недочернее. ну и грохать потом. или нечно вроде этого. %-)


 
Palladin ©   (2006-09-28 12:45) [25]


> saxon   (28.09.06 12:42) [23]

в access вместе с дочерним окном создается еще одно, как предложил Ketmar, которое с WS_EX_APPWINDOW


 
saxon   (2006-09-28 12:46) [26]


> Palladin ©   (28.09.06 12:45) [25]

предполагаете или знаете?


 
Palladin ©   (2006-09-28 12:55) [27]

предполагаю, да и гдето в инете натыкался по этому поводу... статья или FAQ-ли про окна access"а и word"а...


 
clickmaker ©   (2006-09-28 12:57) [28]

можно взять Spy++ и проверить


 
Sergey_b   (2006-09-28 14:10) [29]

Огромное-е спасибо за содержательные ответы


 
Игорь Шевченко ©   (2006-09-28 14:27) [30]

Ketmar ©   (28.09.06 12:42) [24]


> это понятно. я предлагал при сворачивании создавать новое
> окно, недочернее. ну и грохать потом. или нечно вроде этого.
>  %-)


Криво, но пытается работать:

unit Child;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
 TForm2 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   FHSWindow: HWND;
   procedure WMSysCommand(var Message: TWmSysCommand); message WM_SYSCOMMAND;
 end;

var
 Form2: TForm2;

implementation

{$R *.DFM}

const
 AClassName = "HSFake";
var
 wc: WNDCLASSEXA;

function FakeWindowWndProc (Wnd: HWND; Message: UINT; wParam: WPARAM;
 lParam: LPARAM): LRESULT; stdcall;
var
 FormInstance: TForm2;
begin
 case Message of
 WM_NCCREATE:
   begin
     FormInstance := TForm2(
       PCreateStruct(LParam)^.lpCreateParams);
     SetWindowLongA(Wnd, 0, Integer(FormInstance));
   end;
 WM_SYSCOMMAND:
   begin
     Result := 0;
     FormInstance := TForm2(GetWindowLong(Wnd, 0));
     case wParam and $FFF0 of
     SC_RESTORE:
       begin
         ShowWindow(Wnd, SW_HIDE);
         ShowWindow(FormInstance.Handle, SW_SHOW);
         Exit;
       end;
     SC_MAXIMIZE:
       Exit;
     SC_CLOSE:
       begin
         ShowWindow(Wnd, SW_HIDE);
         FormInstance.Close;
         Exit;
       end;
     end;
   end;
 end;
 Result := DefWindowProcA(Wnd, Message, wParam, lParam);
end;

{ TForm2 }

procedure TForm2.WMSysCommand(var Message: TWmSysCommand);
begin
 if (FHSWindow <> 0) and ((Message.CmdType and $FFF0) = SC_MINIMIZE) then begin
   ShowWindow(Handle, SW_HIDE);
   ShowWindow(FHSWindow, SW_SHOWMINNOACTIVE);
 end else
   inherited;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
 if FHSWindow <> 0 then begin
   DestroyWindow(FHSWindow);
   FHSWindow := 0;
 end;
 FHSWindow := CreateWindowExA(0, AClassName, nil,
   WS_OVERLAPPEDWINDOW, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
   Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), HWND_DESKTOP, 0,
   HInstance, Self);
 Win32Check(FHSWindow <> 0);
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
 if FHSWindow <> 0 then
   DestroyWindow(FHSWindow);
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
end;

initialization
 FillChar (wc, SizeOf(wc), 0);
 wc.cbSize := SizeOf(wc);
 wc.lpszClassName := AClassName;
 wc.cbWndExtra := 4;
 wc.hInstance := HInstance;
 wc.lpfnWndProc := @FakeWindowWndProc;
 wc.hCursor := LoadCursor (0, IDC_ARROW);
 wc.hbrBackground := HBRUSH(GetStockObject(WHITE_BRUSH));
 RegisterClassExA (wc);
finalization
 UnregisterClassA(AClassName, HInstance);
end.


unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Menus;

type
 TForm1 = class(TForm)
   MainMenu1: TMainMenu;
   File1: TMenuItem;
   New1: TMenuItem;
   procedure New1Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation
uses
 Child;

{$R *.DFM}

procedure TForm1.New1Click(Sender: TObject);
begin
 with TForm2.Create(Application) do
   Show;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.051 c
4-1148931253
Ihor Osov'yak
2006-05-29 23:34
2006.10.15
win32 subsystem on win64, RegRestoreKey


1-1157014527
Ega23
2006-08-31 12:55
2006.10.15
TCustomTreeView.CreateWnd и DestroyWnd


2-1159195466
vyper
2006-09-25 18:44
2006.10.15
Как убить процесс


15-1158931825
stone
2006-09-22 17:30
2006.10.15
Премия за глупость


3-1155546946
.ruslan
2006-08-14 13:15
2006.10.15
00.00.0000 00:00:00 -> Сегодня, 00:00 (без сохранения)