Minimize-tapahtumankäsittelijä

Rytmis 27.11.03 23:37

Reagoi ikkunan minimize-nappulan painamiseen

 Tekstiversio  Arvo: 2 (2 ääntä)  Äänestä: +  -
type
  TForm1 = class(TForm)
  procedure WM_SYSCOMMAND(Var SC: TWmSysCommand); message WM_SYSCOMMAND;

end;

implementation

procedure TForm1.WM_SYSCOMMAND(Var SC: TWmSysCommand);
begin
  // jos SysCommand on minimize eikä esim. close
  if SC.CmdType = SC_MINIMIZE then
  begin
    // reagoidaan tavalla tai toisella
    ShowMessage('Ohjelma minimoitu');
  end;
  // jatketaan eventin käsittely normaalisti
  inherited;
end;

{
  Lopussa tuleva inherited; on erityisen tärkeä, koska jos jätät sen pois,
joka ikinen SysCommand-tyyppinen viesti päättyy tuohon -- eikä esim.
formin close pääse koskaan tapahtumaan...
}

user137 20:18 29.11.03 
Ihan toimiva tuo näyttäis olevan, ja eiköhän tuosta uudetkin delphi-käyttäjät opi jotain windows viesteistä.
Tuonhan olis voinu tehdä helpommin TApplicationEvents komponentin onMinimize eventin avulla... mutta se lisää uses riville AppEvents tai vastaavaa.
Rytmis 14:23 30.11.03 
Ensisijaisesti tässä olikin kyse siitä miten päästään käsiksi niihin windows-viesteihin joita varten ei ole event handleria. Pitää tuohon TApplicationEventsiin perehtyä, sen olemassaolo on minulle uusi asia, mutta toisaalta kun tuon tekee ilman VCL:aa, niin säästää hieman sovelluksen koossa :)