Avatar billede Max Novice
24. august 2002 - 22:28 Der er 18 kommentarer og
1 løsning

Minimér applikation, og gør det så igen.. :)

Hej igen alle..
Syntes lige det var så lang tid siden jeg havde stillet jer et spørgsmål.. :)

Læs venligst http://www.eksperten.dk/spm/240331 ..

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.

Mvh.
/Mnc
Avatar billede hermandsen Juniormester
25. august 2002 - 11:14 #1
Hej igen! :)
Det virker da fint ved mig...

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Minimize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
  ShowMessage('HEST!');
end;

end.

Den siger HEST! hver gang... :/

Hvad laver du i din OnMinimize-event?
Avatar billede Max Novice
25. august 2002 - 14:58 #2
procedure TFormPop3Snoop.ApplicationEvents1Minimize(Sender: TObject);
begin
  InitializeNID;
  ShowWindow(Handle,SW_HIDE);
end;

/Mnc
Avatar billede hermandsen Juniormester
25. august 2002 - 15:11 #3
Hvad så når du får programmet tilbage fra tray?
Avatar billede Max Novice
25. august 2002 - 15:15 #4
Når jeg viser formen igen, er det som om den har glemt min ApplicationEvent, og når jeg så klikker på Minimize-knappen, sker der igenting...

/Mnc
Avatar billede hermandsen Juniormester
25. august 2002 - 15:19 #5
Laver du ShowWindow(Handle, SW_SHOW); når du viser formen igen?
Avatar billede Max Novice
25. august 2002 - 15:21 #6
ShowWindow(Handle,sw_ShowNormal);
  SetForegroundWindow(Handle);
  Show;
Avatar billede hermandsen Juniormester
25. august 2002 - 15:40 #7
Hmmm...
Hvad gør InitializeNID; ? Er det noget fra en komponent eller hvor har du det fra?
Avatar billede Max Novice
25. august 2002 - 15:42 #8
du får lige hele koden :
Avatar billede Max Novice
25. august 2002 - 15:42 #9
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ImgList, Menus, ShellAPI, NMsmtp, Psock,
  NMpop3, ComCtrls, Buttons, AppEvnts;

const
  wm_IconMessage = wm_User;

type
  TFormPop3Snoop = class(TForm)
    PopupMenu: TPopupMenu;
    Exit1: TMenuItem;
    Options1: TMenuItem;
    Checkformailnow1: TMenuItem;
    Mails1: TMenuItem;
    none1: TMenuItem;
    SendSnoopMail1: TMenuItem;
    About1: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    NMPOP3: TNMPOP3;
    NMSMTP: TNMSMTP;
    OpenEMailprogram1: TMenuItem;
    N4: TMenuItem;
    ApplicationEvents: TApplicationEvents;
    PageControl: TPageControl;
    TabSheetPop3Snoop: TTabSheet;
    TabSheetProfiles: TTabSheet;
    TabSheetAbout: TTabSheet;
    PanelHints: TPanel;
    procedure Options1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ApplicationEventsMinimize(Sender: TObject);
  private
    { Private declarations }
  public
    nid: TNotifyIconData;
    procedure InitializeNID;
    procedure IconTray(var Msg: TMessage); message wm_IconMessage;
  end;

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;

end.
Avatar billede hermandsen Juniormester
25. august 2002 - 15:48 #10
Hmmm... Se lige det her:

procedure TFormPop3Snoop.FormShow(Sender: TObject);
begin
  InitializeNID;
  ShowWindow(Application.Handle,SW_HIDE);
end;

Er det meningen at den skal gemme AppHandle på FormShow?

Og under InitializeNID; kører du allerede ShowWindow(Application.Handle, SW_HIDE);

Er det meningen begge steder?

Ellers må du køre lidt debugging med nogle breakpoints rundt omkring...
Avatar billede Max Novice
25. august 2002 - 16:50 #11
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..

/Mnc
Avatar billede hermandsen Juniormester
25. august 2002 - 17:44 #12
Og det virker stadig ikke... :/

Hmmm... Prøv at indsætte et breakpoint under dine Minimize-procedure og se om den når der til anden gang...
Avatar billede Max Novice
25. august 2002 - 18:10 #13
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?
Avatar billede hermandsen Juniormester
25. august 2002 - 18:58 #14
Så vidt jeg ved, så er det vist først bagefter at din event køres, men prøv at indsætte et breakpoint og se hvornår din kode bliver kørt...
Avatar billede Max Novice
25. august 2002 - 20:21 #15
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...

Hvis du vil kan jeg sende projektet til dig?

/Mnc
Avatar billede hermandsen Juniormester
25. august 2002 - 22:14 #16
Tjooo, jeg skal da se hvad jeg kan gøre! :)
hermandsen@softhome.net
Avatar billede hermandsen Juniormester
25. august 2002 - 23:56 #17
Haløjsovs...

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! ;)
Avatar billede Max Novice
26. august 2002 - 01:55 #18
Alt er smukt, og fuglene kvidrer. Mange tak for hjælpen hermandsen. Pointsene flyver..

/Mnc
Avatar billede hermandsen Juniormester
26. august 2002 - 07:48 #19
Heeey, vi har jo en hel poet i dig! ;)
Nå, men selv tak da... Er glad for at kunne hjælpe! :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester