Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "KOL";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
2-1135149994
chelovek
2005-12-21 10:26
2006.01.08
Новый компонент.


6-1127661263
AlCache
2005-09-25 19:14
2006.01.08
IdHTTP1.Get, я что-то делаю неправильно?


2-1135033586
ZeeM
2005-12-20 02:06
2006.01.08
Функции пребразования StrToFloat, StrToInt и др.


14-1134543656
КаПиБаРа
2005-12-14 10:00
2006.01.08
Цифровой фотик за 10000 руб


14-1134588021
Гарри Поттер
2005-12-14 22:20
2006.01.08
WinInstall софтина из Win2000





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский