[Delphi] 2 p'tites questions...

2 p'tites questions... [Delphi] - Programmation

Marsh Posté le 04-08-2001 à 20:41:15    

- Y a-t-il moyen de détecter la diminution d'une fenêtre particulière, j'arrive à détecter la diminution de l'application (fenêtre principale du programme) mais pas d'un écran précis ???
 
- J'voudrais pouvoir savoir si une fenêtre est affichée ou non. Mon problème est que je créé les fenêtres quand je le veux et non au chargement de l'application...De ce fait, je ne peux pas accèder aux propriétés de la fenêtre !

Reply

Marsh Posté le 04-08-2001 à 20:41:15   

Reply

Marsh Posté le 04-08-2001 à 21:44:51    

1) je crois qu'il y a une fonction IsIconic dans les API Win32 qui te dit ca...
sinon, tu peux essayer d'intercepter le message WM_SYSCOMMAND et de tester le type:

Code :
  1. ----------------------------------------
  2. type
  3.   TForm1 = class(TForm)
  4.     procedure WMSysCommand(var Msg: TWMSysCommand); message
  5.     WM_SYSCOMMAND;
  6.   end;
  7. procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
  8. begin
  9.   if Msg.CmdType = SC_MINIMIZE then
  10.   begin
  11.     // trucs a faire si la fenetre est minimisée
  12.   end; 
  13.   Inherited;
  14. end;
  15. ----------------------------------------


 
 
2)si tu passes par des variables pour stocker tes fenetres, il te suffit juste de tester si la variable est assignée:

Code :
  1. ----------------------------------------
  2.   if Assigned(FMaFenetre) then
  3.     // ok, ma fenetre est presente, je peux faire des trucs
  4.     FMaFenetre.ShowModal; 
  5. ----------------------------------------


 
si tu les crees en dynamique, c'est un peu plus penible et je vais attendre de voir si la reponse precedente te suffit avant de me lancer dans un post de 3 kms ;)


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 04-08-2001 à 21:56:12    

Pour la première question c'est nickel sauf que je ne sais pas à quoi sert le "Inherited" ???
 
Pour la deuxième, je ne passe pas par des variables. Voila, ce que je fais pour afficher ma fenêtre :

Code :
  1. Application.CreateForm(TForm, Form);
  2. Form.Show;


 
Merci JWhy

Reply

Marsh Posté le 04-08-2001 à 22:08:34    

J'avais oublier de préciser, y a une p'tite subtilité : je voudrais que juste une fenêtre se minimise et pas les autres ouvertes...

Reply

Marsh Posté le 04-08-2001 à 22:16:44    

pour le (1) en fait, le test que tu dois faire c'est :
 if (Msg.CmdType and $FFF0 = SC_MINIMIZE)  then
 
concernant le inherited:
 
Ta TForm1 herite de TForm qui herite de TCustomForm qui definit WMSysCommand avec a l'interieur plein de trucs pour gerer l'alignement des fenetres, etc...
 
Quand tu redefinis WMSysCommand dans ta TForm1, le WMSysCommand de la TCustomForm ne vas plus etre appelé (puisque tu le redefinis !) et tu va donc intercepter tous les messages WM_SYSCOMMAND (par ex: SC_MAXIMIZE, SC_MINIMIZE, SC_MOVE, etc...)
 
dans l'exemple donné, tu ne geres que le type SC_MINIMIZE...
donc tous les autres messages vont passer a la trappe.
 
Le fait de mettre "inherited" a la fin va appeler la methode WMSysCommand de la classe dont tu herites (TForm en theorie, mais vu que WMSysCommand  n'y est pas defini, ca va appeler le WMSysCommand de TCustomForm)
 
donc, dans l'exemple, tu vas faire ton test, faire ce que tu as a faire dans le cas ou le message est SC_MINIMIZE et grace au inherited, appelé le gestionnaire de WMSysCommand defini dans la classe parente, ce qui va te permetre de gerer le comportement standard de SC_MINIMIZE ainsi que tous les autres messages !
 
si tu as une version pro ou entreprise de Delphi (avec le source), tu peux jeter un oeil a l'unite Forms, procedure TCustomForm.WMSysCommand
 
 
pour le point (2), tu as dans les sources de ton projet:
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
 
qui t'affiche la form principale, c'est ca ?
et tu veux afficher une (ou n) formX (sur un click de bouton par ex.) et savoir si elles sont presentes ou non... c'est ca ?


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 05-08-2001 à 19:27:28    

Bendes a écrit a écrit :

 
Pour la deuxième, je ne passe pas par des variables. Voila, ce que je fais pour afficher ma fenêtre :

Code :
  1. Application.CreateForm(TForm, Form);
  2. Form.Show;






Code :
  1. fenetre_visible:=false;
  2. if Form <> nil then
  3. begin
  4.    if Form.Visible then
  5.       fenetre_visible:=true;
  6. end;


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-08-2001 à 19:48:34    

Merci JWhy: j'ai tout compris, c'est très logique en fait...Pour la deuxième question, c'est ça que je voudrais arriver à faire.
 
antp: J'essaye ton truc directement et merci...

 

[edtdd]--Message édité par Bendes--[/edtdd]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed