Til hermandsens sidste kommentar.. Der er absolut ikke noget galt med ApplicationEvents handleren eller Application.Minimize:=MinMinimerProcedure , men hvorfor kan man kun minimere én gang? Når jeg klikker på Minimérknappen første gang afvikler den ganske rigtigt koden som den skal (i mit tilfælde minimérer den formen til System Tray), men anden gang jeg klikker på kanppen, sker der intet.. Hvorfor? Det sker både når jeg bruger ApplicationEvents handleren, og når jeg laver ovenstående linie.
var FormPop3Snoop: TFormPop3Snoop; AppHint : PChar;
implementation
{$R *.dfm}
procedure TFormPop3Snoop.InitializeNID; begin ShowWindow(Application.Handle,SW_HIDE); Icon.Handle:=LoadIcon(HInstance,'MAINICON'); nid.cbSize:=sizeof(nid); nid.wnd:=Handle; nid.uID:=1; nid.uCallBAckMessage:=wm_IconMessage; nid.hIcon:=Icon.Handle; nid.uFlags:=nif_Message or nif_Icon or nif_Tip; StrCopy(nid.szTip,AppHint); Shell_NotifyIcon(NIM_ADD,@nid); end;
procedure TFormPop3Snoop.IconTray(var msg: TMessage); var Pt: TPoint; begin if Msg.lParam=wm_rbuttondown then begin GetCursorPos(Pt); PopupMenu.Popup(Pt.x,Pt.y); end; if Msg.lParam=wm_lbuttondblclk then Options1Click(self); end;
procedure TFormPop3Snoop.Options1Click(Sender: TObject); begin nid.uFlags:=0; Shell_NotifyIcon(NIM_DELETE,@nid); ShowWindow(Handle,sw_ShowNormal); SetForegroundWindow(Handle); Show; end;
procedure TFormPop3Snoop.FormDestroy(Sender: TObject); begin nid.uFlags:=0; Shell_NotifyIcon(NIM_DELETE,@nid); end;
procedure TFormPop3Snoop.FormCreate(Sender: TObject); begin AppHint:='Pop3Snoop'; InitializeNID; end;
procedure TFormPop3Snoop.FormShow(Sender: TObject); begin InitializeNID; ShowWindow(Application.Handle,SW_HIDE); end;
procedure TFormPop3Snoop.FormClose(Sender: TObject; var Action: TCloseAction); begin if MessageBox(0,'Exit Pop3Snoop and stop monitoring E-Mail server?','Quit',mb_IconExclamation+mb_YesNo)=IDNO then Action:=caNone; end;
procedure TFormPop3Snoop.ApplicationEventsMinimize(Sender: TObject); begin InitializeNID; ShowWindow(Handle,SW_HIDE); end;
Hmmm.. Ja, du har ret. Jeg har fjernet alle ShowWindow(Application.Handle,SW_HIDE);, så det kun er under InitializeNID den gemmer Application.Handle... Men jeg forstår det stadigvæk ikke.. InitializeNID giver jo nærmest sig selv. Den eneste linie under ApplicationEventsMinimize er min InitializeNID sætning, og skulle den ikke bare køre den hver gang jeg klikker på Minimize knappen på min form? Jeg er lidt på herrens mark her..
Hmmm.. Jeg har sat den til at lade være med at minimere min form til System Tray under ApplicationEvents1OnMinimize, og har fået den til at vise en besked i stedet for. Når jeg nu klikker på minimize knappen på min form, minimerer den formen til Task Bar'en. Den viser først min besked, når jeg klikker på formen's "knap" i Task Bar'en.. Hvorfor dog det? Var det ikke meningen at ApplicationEvents1OnMinimize skal eksekveres i det man trykker på minimize knappen?
Jeg fatter det virkelig ikke! Argh! Jeg har sat et breakpoint ind, og programmet stopper som det skal, efter AppEvnt'en er aktiveret. Jeg har været det hele igennem, og det SKULLE virke... :( Men nej. Det er som om at knappen virker første gang, og derefter virker den ikke! Slet ikke...
Jeg har fundet din fejl... Den tror simpelthen stadig at programmet et minimeret... Du skal kalde Application.Restore-proceduren når programmet kommer tilbage fra tray, så virker det! ;)
Heeey, vi har jo en hel poet i dig! ;) Nå, men selv tak da... Er glad for at kunne hjælpe! :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.