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

Langage Delphi Discussion :

Redimensionner une fenetre proportionnellement à une image


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut Redimensionner une fenetre proportionnellement à une image
    Bonjour à tous,

    J'ai un probleme qui me semblait simple à mettre en oeuvre, mais voilà j'ai suréstimé mes competences visiblement.

    Voilà ce que je voudrais faire.

    J'ai une forme TForm classique.
    Un ratio Hauteur / Largeur (qui provient d'une image pour la petite histoire)

    Et ce que je voudrais c'est que lorsque je redimensionne ma fenetre; elle garde automatiquement les proportions données par le ratio. Vous voyez ce que je veux dire ?

    Dans le cas ou vous avez déjà la solution, à peine apres avoir lu ma question, je voudrais savoir si c'est également possible que le cadre apparaissant lorsque je redimensionne garde également le ratio. Pour que l'utilisateur ai une réele idée de la gueule de la fenetre en cours de resize.


    Merci beaucoup pour vos propositions.

  2. #2
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    salut,

    Imaginons que ton image fasse 400 * 500.

    Tu mets dans l'évenement OnResize de ta form, un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.FormResize(Sender: TObject);
    var
      ratio_hauteur : Extended;
     
    begin
      ratio_hauteur := (Form1.Height / 400);          //400 = hauteur image
      Form1.Width := Trunc(ratio_hauteur * 500);           //500 = largeur image
    end;

  3. #3
    En attente de confirmation mail Avatar de Matt2094
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Âge : 30
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 295
    Points : 237
    Points
    237
    Par défaut
    Cherche du côté de la proprété "contraints" de ta Form, je penses que c'est ce que tu cherches : ça permet de limiter le redimensionnement d'une TForm ...

  4. #4
    Membre habitué Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Points : 161
    Points
    161
    Par défaut
    Merci de vos propositions.

    Mais en fait je suis passer par les messages ( pour garder le cadre temporaire de redimensionnement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        fRatio : Single;
        procedure WMSizing(var Message: TMessage); message WM_SIZING;
      public
        { Déclarations publiques }
      end;
    var
      Form1: TForm1;
    implementation
    uses Types;
    {$R *.dfm}
    { TForm1 }
    procedure TForm1.WMSizing(var Message: TMessage);
    var
      lprc: PRect;
    begin
      with Message do begin
        lprc := PRect(LParam);
        case Message.WParam of
          WMSZ_TOP, WMSZ_BOTTOM, WMSZ_TOPRIGHT:
            lprc^.Right := round( (lprc^.Bottom - lprc^.Top) / fRatio + lprc^.Left);
          WMSZ_TOPLEFT :
            lprc^.top := round( - fRatio * (lprc^.Right - lprc^.Left) + lprc^.bottom);
          WMSZ_BOTTOMLEFT, WMSZ_BOTTOMRIGHT, WMSZ_RIGHT, WMSZ_LEFT:
            lprc^.Bottom := round(fRatio * (lprc^.Right - lprc^.Left) + lprc^.Top);
        end;
      end;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with BoundsRect do
        fRatio := (Bottom - Top)/(Right - Left);
    end;
    end.
    Voilà essayer si vous le souhaiter ca fonctionne à la toque. Ensuite il vous suffit de calculer votre ratio, comme vous le voulez.

    Enjoy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/01/2012, 17h56
  2. transmettre une variable d'une fenetre a une autre
    Par tix116 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/02/2009, 10h07
  3. insertion d'une fenetre dans une fenetre
    Par DeeVoiD dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 04/02/2009, 12h56
  4. Problème affichage d'une fenetre dans une fenetre
    Par zuzuu dans le forum Windows
    Réponses: 10
    Dernier message: 03/10/2007, 15h26
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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