IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Probleme de reduction de fenetre


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut Probleme de reduction de fenetre
    Bonjour,
    J ai concu un petit code reduisant une fenetre si cette derniere est placee au dessus d un certain seuil de l ecran..
    voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     GetWindowRect (Hwnd,rect);
      width:=rect.Right-rect.Left; //width of the window
      height:=rect.bottom-rect.top; //height of the window
      if texttmp='InfoRecei' then exit; {test the beginning of the name of the window (
      just the beginning because there is a difference between winXP and Win2000 windows name }
     
      if rect.top<30 then //do something just for windows which are not under the Information bar
        begin
           rect.Top:=fixheight;
           if height>screen.Height-55
           then  //reduction of the size of the window if it is too 'big'
             height:=height-fixheight;
             movewindow(hwnd,rect.Left,rect.Top,width,height,true);
           end;
    Tout marche bien , la reduction de la taille et de la position est bien effectuee..
    Mais le probleme : Si ma fenetre est en mode " taille max" et prend tout l ecran, le programme la met a la bonne taille certes, mais ensuite il n est plus possible de l agrandir, le systeme considerant que la taille max est la tailel courante..
    J aimerai en fait pouvoir mettre la fenetre en mode normal avant de changer la tailel courante afin de pouvoir la remettre en plein ecran apres ma modif...
    Si quelqu un a une idee n hesitez surtout pas
    merci d avance

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Regarde paut-être du côté de la propriété WindowState de la fiche en question. Trois états sont disponibles (wsNormal, wsMinimized, wsMaximized)

    Cordialement

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    Comment je peux faire pour avoir l attribut windowstate en fonction du handler ?
    Je parle bien d une fenetre quelconque que je n ai pas programme, par exemple d un navigateur...
    Merci bcp

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Au niveau des API (unité Windows) tu as la fonction IsZoomed

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function IsZoomed(hWnd: HWND): BOOL; stdcall;
    Cette fonction retourne 1 si la fenêtre dont le handle est passé en paramêtre est agrandie, sinon elle renvoie 0 (revient à tester un WindowState = wsMaximized).

    Cordialement

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    oki mais comment modifier ce parametre , est ce possible ?
    merci d avance

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Déjà tu as l'API :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function OpenIcon(hWnd: HWND): BOOL; stdcall;
    qui se charge de remettre une fenêtre réduite dans son état normal (taille et position) et l'active.
    hwnd est le handle de la fenêtre à agrandir.
    Si la fonction échoue elle retourne 0, sinon une valeur non nulle.

    ensuite tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function IsIconic(hWnd: HWND): BOOL; stdcall;
    qui permet de savoir si fonction est actuellement minimisée (en icône sous Win 3.x, ou dans la barre des tâches sous Win 9x).
    hwnd est le handle de la fenêtre à tester.
    La fonction retourne Vrai si la fenêtre est réduite sinon Faux.

    et encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function SetWindowPlacement(hWnd: HWND; WindowPlacement: PWindowPlacement): BOOL; stdcall;
    Cette API permet d'afficher la fenêtre où tu le désires sur
    l'écran en exécutant une méthode du type move avec la possibilité de laisser la feuille toujours au premier plan d'affichage.
    hwnd est le handle de la feuille,
    hWndInsertAfter est une des contantes définies ci-dessous,
    X, Y, cx et cy sont respectivement les coordonnées et les dimensions de l'image.
    wFlags est une combinaison de constantes suivantes:
    HWND_BOTTOM = 1 Place la fenêtre en dessous de toutes les autres.
    HWND_NOTOPMOST = -2 Place la fenêtre au dessus de toutes les fenêtres qui n'ont pas l'attribut "TOPMOST" (et en dessous de ces dernières).
    HWND_TOP = 0 Place la fenêtre au premier niveau.
    HWND_TOPMOST = -1 Place la fenêtre au premier niveau, celle-ci conserve cet attribut même lorsqu'elle perd le focus.
    SWP_HIDEWINDOW = &H80 Cache la fenêtre.
    SWP_NOACTIVATE = &H10 N'active pas la fenêtre.
    SWP_NOMOVE = &H2 Garde la même position (les paramètres X et Y ne sont pas pris en compte).
    SWP_NOSIZE = &H1 Conserve les dimensions courantes (paramètres cx et cy pas pris en compte).
    SWP_SHOWWINDOW = &H40 Affiche la fenêtre.
    et pour info:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      PWindowPlacement = ^TWindowPlacement;
      {$EXTERNALSYM tagWINDOWPLACEMENT}
      tagWINDOWPLACEMENT = packed record
        length: UINT;
        flags: UINT;
        showCmd: UINT;
        ptMinPosition: TPoint;
        ptMaxPosition: TPoint;
        rcNormalPosition: TRect;
      end;
    Je pense qu'avec ces éléments tu peux arriver à tes fins. Sinon, je te conseille d'aller faire un tour dans l'unité Windows, pour consulter les autres API pour la gestion des fenêtres.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    Je te remercie pour ta reponse...
    Mais je parle de pouvoir faire passer une fenetre agrandie au stade retreci( et non reduite ), l'intermediaire quoi.
    Tout ce qui est icone ne concerne pas mon probleme, et la fonction que tu m as fournie revient apparemment au meme que movewindow...
    Je voulais juste pouvoir changer le statut dema fenetre mais apparemment ca a l air irrealisable..
    Merci tout de meme pour ton aide

  8. #8
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Oups, j'avais oublié l'essentiel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; stdcall;
    Cette fonction permet de forcer l'état d'affichage d'une fenêtre (agrandir, réduire).
    hwnd est un pointeur (handle) vers une fenêtre.
    nCmdShow peut prendre la valeur d'une constante dans le tableau ci-dessous.
    La fonction retourne 0 si la fenêtre était cachée, et une valeur différente de 0 dans le cas contraire.

    SW_HIDE = 0 Cache la fenêtre et en active une autre.
    SW_MAXIMIZE = 3 Agrandit la fenêtre.
    SW_MINIMIZE = 6 Réduit la fenêtre et active la prochaine (dans l'ordre des tâches windows).
    SW_RESTORE = 9 Active et affiche la fenêtre à sa taille et position initiales.
    SW_SHOW = 5 Active et affiche la fenêtre.
    SW_SHOWMAXIMIZED = 3 Active et agrandit la fenêtre.
    SW_SHOWMINIMIZED = 2 Active et réduit la fenêtre.
    SW_SHOWNA = 8 Identique à SW_SHOW sauf que la fenêtre n'est pas activée.

    La cerise sur le gâteau est si tu désires produire un effet lors des changements d'état:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): BOOL; stdcall;
    Cette fonction a pour but d'afficher ou cacher une fenêtre en utilisant un effet spécial(fondu, roulement, implosion, explosion).
    hwnd est le handle de la fenêtre sur laquelle on agit.
    dwTime représente la durée de l'effet en millisecondes.
    dwFlags est une combinaison des constantes ci-dessous.
    En cas d'échec la fonction retourne 0, sinon une valeur différente de 0.

    Remarque : pour utiliser AW_SLIDE, il faut préciser une (ou deux) directions.

    AW_HOR_POSITIVE = &H1 Anime la fenêtre de gauche à droite.
    AW_HOR_NEGATIVE = &H2 Anime la fenêtre de droite à gauche.
    AW_VER_POSITIVE = &H4 Anime la fenêtre du haut vers le bas.
    AW_VER_NEGATIVE = &H8 Anime la fenêtre du bas vers le haut.
    AW_CENTER = &H10 Réduction de la fenêtre vers son centre (avec AW_HIDE), et inversement (avec AW_ACTIVATE).
    AW_HIDE = &H10000 Cache la fenêtre.
    AW_ACTIVATE = &H20000 Active la fenêtre.
    AW_BLEND = &H80000 Effet de "fondu" sur la fenêtre (si elle est au premier niveau).
    AW_SLIDE = &H40000 Fait "rouler" la fenêtre.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    En fait le probleme est tjs que c agrandi, reduit mais comment prendre l intermediaire.. desole de vous harceler avec mes questions

  10. #10
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Et avec l'API showWindows pour la valeur SW_RESTORE ?
    Comment cela se comporte-t-il ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    En fait pour resumer ce que je veux faire :
    Si fenetre.top > x,
    Si fenetre en mode agrandi
    retrecir fenetre en mode normal puis changer dimensions

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    Ben en fait restore remet le tout aux positions initiales.
    En fait mon programme affiche une bande defilante en haut de l ecran pendant un temps variable..
    Admettons que l utilisateur deplace ses fenetres a sa guise.
    LOrsque la barre disparaitra, le fait que les fenetres reprennent la taille initiales sera genant...( g essaye :-) )

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    Personne n'a d idee ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    Toujours personne ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    Est il possible de fixer la taille des fenetres lors de l agrandissement ??
    du genre qd je clique sur agrandir une fenetre, elle sera de dim 600*400 ou bien 700*500..... ??
    Merci d avance

  16. #16
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par gilles641
    Est il possible de fixer la taille des fenetres lors de l agrandissement ??
    du genre qd je clique sur agrandir une fenetre, elle sera de dim 600*400 ou bien 700*500..... ??
    Merci d avance
    Si tu veux définir une taille maximum, regarde la propriété Constraints.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 155
    Par défaut
    Je ne parle pas du programme courant mais de toutes les fenetres affichees par windows

Discussions similaires

  1. Probleme de reduction de fenetre
    Par Pompompom dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 08/08/2007, 12h19
  2. Probleme de redimensionnement sous fenetre
    Par sidjunvik dans le forum GLUT
    Réponses: 3
    Dernier message: 30/01/2007, 17h13
  3. [MFC] probleme de detection de fenetre
    Par jiraya43 dans le forum MFC
    Réponses: 8
    Dernier message: 10/05/2006, 10h48
  4. reduction de fenetre
    Par bou3 dans le forum Windows
    Réponses: 2
    Dernier message: 22/06/2005, 10h46
  5. [C#] Probleme de dimensionnement des fenetres en MDI
    Par stephdiplo150 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/05/2004, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo