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

Вниз

Сворачивание вторичной формы на панель задач   Найти похожие ветки 

 
uli   (2005-05-17 08:45) [0]

Уважаемые мастера! Подскажите, как можно сделать, чтобы вторичная форма сворачивалась не в угол экрана, а на панель задач.


 
Thaddy   (2005-05-17 10:05) [1]

var
point:Tpoint;

begin
Point:=form1.panel.client2screen(makepoint(panel.left,panel.top);
Form2.setposition(Point.x,point,y);


 
uli   (2005-05-19 08:28) [2]

То есть на форме должна лежать Panel? Он у меня на нее ругается...


 
Uli   (2005-05-19 08:29) [3]

Или надо подключить дополнительный модуль?


 
Uli   (2005-05-19 10:08) [4]

Буду очень благодарна за небольшой рабочий пример, так как из данного отрывка кода ничего не могу понять.


 
Thaddy   (2005-05-19 20:50) [5]

And in your email....

{
program Projectfrom;
 Kol,
 Unitfrm1 in "Unitfrm1.pas";
begin
 NewForm1( Form1, applet);
 Run(Applet);
end.
*********************************************
}
unit Unitfrm1;

interface
uses
 Windows, Messages, Kol;

type

PForm1=^TForm1;
TForm1=object(Tobj)
 Form:pControl;
 Pnl:Pcontrol;
public
end;

PForm2=^TForm2;
TForm2=object(Tobj)
 Form:pControl;
public
end;

procedure NewForm1( var Result: PForm1; AParent: PControl );

var
 Form1:pForm1;
 Form2:pForm2;

implementation

procedure NewForm2( var Result: PForm2; AParent: PControl );
var
 point:Tpoint;
begin
 New(Result,Create);
 with Result^ do
 begin
   Form:= NewForm(Applet,"small form").SetSize(100,300);
   Form.Add2AutoFree(Result);
   form.color:=clWhite;
   form.exStyle:=ws_ex_toolwindow;
   form.StayOnTop:=true;
 end;
end;

procedure NewForm1( var Result: PForm1; AParent: PControl );
var
 Point:TPoint;
begin
 New(Result,Create);
 with Result^ do
 begin
   Applet:=Newapplet("Test");
   Form:= NewForm(Applet,"Main Form").SetSize(400,400).centeronparent.Tabulate;
   Form.Add2AutoFree(Result);
   Pnl:=Newpanel(form,esRaised).setalign(caRight);
   Newform2(Form2,Applet);
   point:=form1.form.Client2screen(Makepoint(pnl.left,pnl.top));
   Form2.form.setposition(Point.x,point.y);
 end;
end;

end.


 
ECM ©   (2005-05-20 12:38) [6]

function TForm2.KOLForm1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;

begin
 Result := FALSE;
 if Msg.message = WM_SYSCOMMAND then begin
   if Msg.wParam =  SC_MINIMIZE then begin
       Form.ExStyle := Form.ExStyle or WS_EX_APPWINDOW;
       ShowWindow(Form.Handle,SW_HIDE);
   end;
 end;
end
....Только убрать его сбросом WS_EX_APPWINDOW почему-то не удается...:(
Наверное только через ITaskBarList->DeleteTab


 
fghfg   (2005-05-20 13:24) [7]

> Уважаемые мастера! Подскажите, как можно сделать, чтобы
> вторичная форма сворачивалась не в угол экрана, а на панель
> задач.

я не мастер, но, имхо, достаточно просто обнулить св-во parent:
SetParent (Form2.Handle, 0).


 
fghfg   (2005-05-20 13:27) [8]

...той формы, которая не хочет сворачиваться. :)


 
ECM ©   (2005-05-20 16:59) [9]

fghfg   (20.05.05 13:24) [7]
имхо, достаточно просто обнулить св-во parent:
SetParent (Form2.Handle, 0).

Да...это тоже работает...но, имхо, WS_EX_APPWINDOW работает оперативнее (по краней мере во время OnMinimize SetParent(..,0) не приводит к появлению кнопки на TaskBar сразу - надо еще ткнуть мышью в кнопку основного окна (смотрел на ХР)). Да и Parent может использоваться где-нибудь в программе...
...Восстановление Parent-а - через SetParent опять же не позволяет убрать кнопку с TaskBar когда она уже не нужна...
Из "спортивного интереса", может кому пригодится, следующий  код сворачивает вторичное окно в TaskBar и убирает его из TaskBar-а при восстановлении:

uses ActiveX;

const
 CLSID_TaskBarList: TCLSID = "{56FDF344-FD6D-11d0-958A-006097C9A090}";
 IID_ITaskBarList: TGUID = "{56FDF342-FD6D-11d0-958A-006097C9A090}";

type
 ITaskBarList = interface(IUnknown)
 ["{56FDF342-FD6D-11d0-958A-006097C9A090}"]
   function HrInit(): HResult; stdcall;
   function AddTab(WND: HWND): HResult; stdcall;
   function DeleteTab(WND: HWND): HResult; stdcall;
   function ActivateTab(WND: HWND): HResult; stdcall;
   function SetActiveAlt(WND: HWND): HResult; stdcall;
 end;
...
function TForm2.KOLForm1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
var
 cmdShow: Integer;
 iTBList: ITaskBarList;
begin
 Result := FALSE;
 if Msg.message = WM_SYSCOMMAND then begin
   Case Msg.wParam of
     SC_MINIMIZE,SC_MAXIMIZE,SC_RESTORE: begin
//        SetParent(Form.Handle,0);
       Form.ExStyle := Form.ExStyle or WS_EX_APPWINDOW;
       if Msg.wParam = SC_MAXIMIZE then cmdShow := SW_MAXIMIZE
       else if Msg.wParam = SC_RESTORE then cmdShow := SW_RESTORE
       else cmdShow := SW_MINIMIZE;
       ShowWindow(Form.Handle,cmdShow);

       CoInitialize(nil);
       CoCreateInstance(CLSID_TaskBarList,nil,CLSCTX_ALL,IID_ITaskBarList,iTBList);
       if Assigned(iTBList) then begin
         if Msg.wParam = SC_MINIMIZE then iTBList.AddTab(Form.Handle)
         else iTBList.DeleteTab(Form.Handle);
         iTBList := nil;
       end;
       CoUninitialize();

     end;
   end;
 end;
end;




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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
14-1134418095
Knight
2005-12-12 23:08
2006.01.08
Кто знает, как перекрыть кислород?


3-1131961081
Kurillka
2005-11-14 12:38
2006.01.08
Как сгруппировать след. запрос?


8-1122551843
BFG9k
2005-07-28 15:57
2006.01.08
Масштабирование роликом мыши


2-1135071433
thvfrjd
2005-12-20 12:37
2006.01.08
Вопрос по ADOStoredProc


5-1120679553
SpyBoy
2005-07-06 23:52
2006.01.08
Разбиение ListBox а