Здравствуйте всем,перейду к сути вопроса.В C++Builder есть компанент который прячет прграмму в трей (с течение времени меняет её иконку и т.д. вобшем красота), мне хотелось бы узнать можно ли в Delphi 5 тоже сотворить что-то подобное.Заранее спасибо
procedure TForm1.ControlWindow(var Msg: TMessage); begin if Msg.WParam = SC_MINIMIZE then begin Ic(1, Application.Icon); ShowWindow(Handle, SW_HIDE); end else inherited; end;
procedure TForm1.IconMouse(var Msg: TMessage); var p: tpoint; begin GetCursorPos(p); case Msg.LParam of WM_LBUTTONUP, WM_LBUTTONDBLCLK: begin Ic(2,Application.Icon); ShowWindow(Application.Handle,SW_SHOW); ShowWindow(Handle,SW_SHOW); end; WM_RBUTTONUP: begin PopupMenu1.Popup(p.X, p.Y); PostMessage(Handle, WM_NULL, 0, 0) end; end; SetForegroundWindow(Handle); end;
Все равно все работает не так как мне бы хотелось. 1. В каждой форме приходиться встовлять этот код и каждая оддельная форма сворачиваеься в оодельную иконку в треии. 2. Не получаеться чтобы программа при запуске сразу была свернута в трей(тоесть для того чтобы она свернулась приходиться нажимать кнопку свертывания формы) 3. В панели около "пуск" программа не исчезает (она сворачиваеться в трей и продолжает висеть в в панели около кнопки пуск) 4. А есть какойнибуть более лекгий код свертывания в трей или нету. Ну так вот может ктонибуть поможет мне оптимизировать код свертывания в трей? Вот код моей программы:(приведен без процедур свертывания в трей)
var skupoy,osnovnoy,standart,samuray,vip:integer; vnesh,vnutren:integer; vivod:real; s:string;
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.ComboBox1Change(Sender: TObject); begin skupoy:=0; osnovnoy:=0; standart:=0; samuray:=0; vip:=0; if combobox1.ItemIndex=0 then skupoy:=1; ComboBox.Visible:=true; if combobox1.ItemIndex=1 then osnovnoy:=1; ComboBox.Visible:=true; if combobox1.ItemIndex=2 then standart:=1; ComboBox.Visible:=true; if combobox1.ItemIndex=3 then samuray:=1; ComboBox.Visible:=true; if combobox1.ItemIndex=4 then vip:=1; combobox1.top:=-1; end;
procedure TForm1.ComboBoxChange(Sender: TObject); begin vnesh:=0; vnutren:=0; if ComboBox.ItemIndex=0 then vnesh:=1; GroupBox1.Visible:=true; if ComboBox.ItemIndex=1 then vnutren:=1; GroupBox1.Visible:=true; GroupBox1.Enabled:=true; end;
procedure TForm1.Button11Click(Sender: TObject); begin vivod:=0; GroupBox2.Visible:=true; label1.caption:=''; label2.Caption:=''; if s='' then label2.Caption:='Текст : )' else begin if (skupoy=1) and (vnesh=1) then vivod:=strtofloat(s)*2; if (skupoy=1) and (vnutren=1) then vivod:=strtofloat(s)*0.05; if (osnovnoy=1) and (vnesh=1) then vivod:=strtofloat(s)*1.8; if (osnovnoy=1) and (vnutren=1) then vivod:=strtofloat(s)*0.05; if (standart=1) and (vnesh=1) then vivod:=strtofloat(s)*1.5; if (standart=1) and (vnutren=1) then vivod:=strtofloat(s)*0.05; if (samuray=1) and (vnesh=1) then vivod:=strtofloat(s)*1.25; if (samuray=1) and (vnutren=1) then vivod:=strtofloat(s)*0.05; if (vip=1) and (vnesh=1) then vivod:=strtofloat(s)*0.98; if (vip=1) and (vnutren=1) then vivod:=strtofloat(s)*0.05; label1.Caption:=floattostr(vivod)+'р'; edit1.clear;end; end;
procedure TForm1.Button13Click(Sender: TObject); begin edit1.Clear; end;
procedure TForm1.Button1Click(Sender: TObject); begin edit1.SelText:='1'; end;
procedure TForm1.Button2Click(Sender: TObject); begin edit1.SelText:='2'; end;
procedure TForm1.Button3Click(Sender: TObject); begin edit1.SelText:='3'; end;
procedure TForm1.Button4Click(Sender: TObject); begin edit1.SelText:='4'; end;
procedure TForm1.Button5Click(Sender: TObject); begin edit1.SelText:='5'; end;
procedure TForm1.Button6Click(Sender: TObject); begin edit1.SelText:='6'; end;
procedure TForm1.Button7Click(Sender: TObject); begin edit1.SelText:='7'; end;
procedure TForm1.Button8Click(Sender: TObject); begin edit1.SelText:='8'; end;
procedure TForm1.Button9Click(Sender: TObject); begin edit1.SelText:='9'; end;
procedure TForm1.Button10Click(Sender: TObject); begin edit1.SelText:='0'; end;
procedure TForm1.Button12Click(Sender: TObject); begin edit1.SelText:=','; end;
procedure TForm1.Edit1Change(Sender: TObject); begin s:=edit1.Text; end;
procedure TForm4.FormCreate(Sender: TObject); type TaPInAddr = Array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var i:Integer; phe: PHostEnt; pptr: PaPInAddr; Buffer: Array[0..63] of Char; GInitData: TWSAData; begin label4.Caption:='Время соединения'+inttostr(t2)+'ч'+inttostr(t1)+'мин'+inttostr(t1)+'сек'; form4.Visible:=false; WSAStartup($101, GInitData); GetHostName(Buffer, SizeOf(Buffer)); phe := GetHostByName(buffer); if phe = nil then Exit; pPtr := PaPInAddr(phe^.h_addr_list); I := 0; while pPtr^[I] <> nil do begin Tlabel(FindComponent('label'+IntToStr(i+1))).caption:=inet_ntoa(pptr^[I]^); Inc(I); end; if label2.Caption='' then label1.Caption:=' '; if label2.Caption<>''then label1.caption:=' '; WSACleanup; end; procedure TForm4.Timer1Timer(Sender: TObject); begin Timer1.Enabled:=true; t1:=t1+1; if t1=60 then t2:=t2+1; t1:=0; if t2=60 then t3:=t3+1; t2:=0; end;
end.
Вообщем то задумка такова. При запуске программа висит в треи пока не будет соединения с интернетом с определнным диапозоном ip адрессов. После того как соединение определяеться программа должна сома развернуться и вы дать сообщение (Адресс данного соединения тариф (определяеться по ip) реальное время, Длительность потключения интернета. Если Интернет отключен то программа овтамотически равертываеться и сообщает об этом. На иконке в трее есть три пункта Выход переход на другую форму и статистика. (Тоесть основное время программа проволит в треии). Извините конечно что я здесь привел весь кот (Возможно он написан более сложно для восприятия и его можно написать легче) Заренее спасибо