Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3392 connectés 

 


Dernière réponse
Sujet : [Delphi] 2 p'tites questions...
Bendes 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]


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Bendes 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]

antp

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;

JWhy 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 ?
Bendes 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...
Bendes 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

JWhy 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 ;)

Bendes - 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 !

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)