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

 Delphi Discussion :

Problème de redimensionnement d'une form avec proportionnalité


Sujet :

Delphi

  1. #1
    Membre actif Avatar de Basile le disciple
    Homme Profil pro
    étudiant Centrale Supélec
    Inscrit en
    Avril 2013
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : étudiant Centrale Supélec

    Informations forums :
    Inscription : Avril 2013
    Messages : 147
    Points : 279
    Points
    279
    Par défaut Problème de redimensionnement d'une form avec proportionnalité
    Je voudrais que, quand je redimensionne une form, le width soit égal à 75% du Height. Mais le problème, c'est que ce que j'ai mis ne marche pas :

    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.FormResize(Sender: TObject);
    var oldWidth,oldHeight : integer;
    begin
      if Width <> oldWidth then Width:=round(0.75*Height);
      if Height <> oldHeight then Height:=round(1.25*Width);
      oldWidth:=Width;
      oldHeight:=Height;
    end;
    Comment faire???

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 673
    Détails du profil
    Informations personnelles :
    Âge : 44
    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 673
    Points : 7 054
    Points
    7 054
    Par défaut
    Citation Envoyé par Basile le disciple Voir le message
    Mais le problème, c'est que ce que j'ai mis ne marche pas
    Normal.
    Déjà, il ne faut surtout pas stocker les valeurs dans des variables locales qui disparaissent en sortie de la procédure.
    Ensuite, si tu ne veux pas un appel en boucle sans fin, il faut couper l'évènement le temps du 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
    procedure TForm1.FormResize(Sender: TObject);
    begin
       OnResize := nil;
       try
          if Width <> oldWidth then
             Width := Round(0.75 * Height);
          if Height <> oldHeight then
             Height := Round(1.25 * Width);
          oldWidth := Width;
          oldHeight := Height;
       finally
          OnResize := FormResize;
       end;
    end;

  3. #3
    Membre actif Avatar de Basile le disciple
    Homme Profil pro
    étudiant Centrale Supélec
    Inscrit en
    Avril 2013
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : étudiant Centrale Supélec

    Informations forums :
    Inscription : Avril 2013
    Messages : 147
    Points : 279
    Points
    279
    Par défaut
    Le problème c'est que j'ai essayé de le faire mais cela ne marche que quand je redimensionne sur un angle(en plus ça scintille), pas sur un côté. Voilà ce que j'ai marqué :

    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
    15
    16
    17
    18
    19
    20
    21
     
    procedure TForm1.FormResize(Sender: TObject);
    begin
      OnResize := nil;
       try
          if Width <> oldWidth then
             Width := Round(0.75 * Height);
          if Height <> oldHeight then
             Height := Round(1.25 * Width);
          oldWidth := Width;
          oldHeight := Height;
       finally
          OnResize := FormResize;
       end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      oldwidth:=width;
      oldheight:=height;
    end;
    Quant aux variables locales, c'est simplement une (grosse) distraction!!!

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Peut-être plutôt TForm.OnCanResize qui est conçu pour la modification de ce type via les paramètres var NewWidth et NewHeight, ce qui n'est pas le cas de TForm.OnResize

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.FormCanResize(Sender: TObject; var NewWidth: integer; var NewHeight: integer; var Resize: boolean);
    begin
          if Height <> NewHeight then
             NewWidth := Round(0.75 * NewHeight);
          else if Width <> NewWidth then
             NewHeight := Round(NewWidth / 0.75);
    end;
    Je ne crois pas 1.25 soit l'inverse de 0.75 mais plutôt 1.33
    Donc semble être une proportion toujours en "4:3" (Quatre tiers)
    mais vertical ?

    En plus, il y avait une inversion d'axe non ?
    Si l'on change Height en NewHeight, il faut recalculer NewWidth, hors c'est l'inverse qui était fait

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Bonsoir à toutes et à tous,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.FormCanResize(Sender: TObject; var NewWidth: integer; var NewHeight: integer; var Resize: boolean);
    begin
          if Height <> NewHeight then
             NewWidth := Round(0.75 * NewHeight); //ici
          else if Width <> NewWidth then
             NewHeight := Round(NewWidth / 0.75);
    end;
    A enlever avant un "else".

    @+,

    Cincap

  6. #6
    Membre actif Avatar de Basile le disciple
    Homme Profil pro
    étudiant Centrale Supélec
    Inscrit en
    Avril 2013
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : étudiant Centrale Supélec

    Informations forums :
    Inscription : Avril 2013
    Messages : 147
    Points : 279
    Points
    279
    Par défaut
    Merci pour toutes vos réponses mais cela ne marche toujours pas!!!
    En effet,4/3 n'a jamais fait 1.25.Désolé!

Discussions similaires

  1. Tabulation dans une form avec entrée
    Par Cl@rk dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/05/2008, 12h09
  2. Impression d'une form avec controle MSHFlexGrid
    Par felix14 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 10/01/2006, 17h59
  3. [GD] Problème d'affichage d'une image avec gd2
    Par turini dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h59
  4. Comment redimensionner automatiquement une Form ?
    Par nek_kro_kvlt dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2005, 23h05
  5. Type de redimensionnement d'une form
    Par Sub0 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 05/12/2003, 21h56

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