Autor Téma: Obnovení aplikace po minimalizaci - help  (Přečteno 1538 krát)

Offline Trooper68

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
    • Verze Delphi: XE 10.3
Obnovení aplikace po minimalizaci - help
« kdy: 02-08-2019, 10:30:57 »
Dobrý den, potřebuji poradit. Mám projekt s hlavním Form1 a vedlejším Form2 (není modal). Chtěl bych aby pokud minimalizuji form2 aby se minimalizovala celá aplikace - to mi funguje přes onResize :

Kód: Delphi [Vybrat]
  1. procedure TForm2.FormResize(Sender: TObject);
  2. begin
  3.   if (windowstate = wsMinimized) and (form1.windowstate <> wsminimized) then form1.windowstate := wsminimized;
  4. end;
  5.  
Pak bych chtěl aby při obnovení aplikace z lišty se otevřely jak Form1 tak i Form2. Když to nijak neošetřím, tak se otevře jen Form1, Když to řeším následně v onResize na Formu1 :

Kód: Delphi [Vybrat]
  1. procedure TForm1.FormResize(Sender: TObject);
  2. begin
  3.   if (windowstate = wsnormal) and (form2.windowstate = wsminimized) then form2.WindowState := wsnormal;
  4. end;
  5.  
... tak to poprvé jen zabliká a zůstane minimalizované a otevřu aplikaci tak jak potřebuji až na druhý pokus o restore. Nevím co s tím. Poradí někdo, jak to vyřešit ? Díky moc

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 8
    • Verze Delphi: XE2
Re:Obnovení aplikace po minimalizaci - help
« Odpověď #1 kdy: 02-08-2019, 17:58:16 »
Zkus si dat do předchůdce formulařů tuto proceduru

procedure WMSysCommand(var msg: TWMSysCommand);     message WM_SYSCOMMAND;

procedure TFoBasedView.WMSysCommand(var msg: TWMSysCommand);
begin
 if msg.CmdType = SC_MINIMIZE then
  begin
    // Funkce umožní že pokud uživatel stiskne tlačítko minimize  tak se místo minimilizace (většinou modálního) formuláře provede minimilizace celé aplikace
    //  zamezí se tím situaci kdy při minimalizaci modálního formuláře se uživatel nedostal jednoduše zpět do aplikace
    Application.Minimize;
    UkazHlaseniTaskBar('',Format('Aplikace %s byla minimalizována',[Application.title ]),3000);
    exit;
  end;

  inherited;
end;


 

Offline Trooper68

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
    • Verze Delphi: XE 10.3
Re:Obnovení aplikace po minimalizaci - help
« Odpověď #2 kdy: 02-08-2019, 21:06:06 »
Díky, ale zase tak moc se ještě nevyznám. :( Můžeš víc pro začátečníka kam přesně bych to měl dát ?

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 8
    • Verze Delphi: XE2
Re:Obnovení aplikace po minimalizaci - help
« Odpověď #3 kdy: 02-08-2019, 21:46:24 »
1.Pokud potřebuješ aby to fungovalo ve všech formulářích musíš to dát do společného předka těchto formulářů  a ostatní nové formuláře z něj dědit (inherited)
2. Jestli ti stačí aby to stačí pouze ve FORM2  tak tu proceduru dej jen tam

V prvním případě to bude fungovat ze všech poděděních formech a ve druhém jen z formu 2

PS
Něco dědění formu  najdeš
https://books.google.cz/books?id=zbR0aGE-JFkC&pg=PA134&lpg=PA134&dq=delphi+d%C4%9Bdi%C4%8Dnost+formul%C3%A1%C5%99e&source=bl&ots=1kK_8BA17P&sig=ACfU3U1DyJySYOfntpxlKsA2P27Wb3Ac8Q&hl=cs&sa=X&ved=2ahUKEwjLwLWI-uTjAhULPFAKHbQ9BIkQ6AEwAnoECCcQAQ#v=onepage&q=delphi%20d%C4%9Bdi%C4%8Dnost%20formul%C3%A1%C5%99e&f=false
« Poslední změna: 02-08-2019, 21:49:41 od Jirka »

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1127
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Obnovení aplikace po minimalizaci - help
« Odpověď #4 kdy: 03-08-2019, 13:04:35 »
Pokud ti to vystačí v jedné unitě, tak můžeš rozšířit třídu TForm někde nad deklarací tvého "TForm1"

Kód: Delphi [Vybrat]
  1. type
  2.   TForm = class(Forms.TForm)
  3.     procedure WMSysCommand(var msg: TWMSysCommand); message WM_SYSCOMMAND;
  4.   end;
« Poslední změna: 03-08-2019, 13:09:17 od < z > »

Offline Trooper68

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
    • Verze Delphi: XE 10.3
Re:Obnovení aplikace po minimalizaci - help
« Odpověď #5 kdy: 03-08-2019, 14:51:44 »
Díky moc, funguje. Jen jsem si tam dopsal close a maximize - protože to odchytí vše.