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

Composants VCL Delphi Discussion :

Conversion de composant D4 vers RAD 2009 Taille TFORM pas OK


Sujet :

Composants VCL Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Conversion de composant D4 vers RAD 2009 Taille TFORM pas OK
    Bonsoir,

    Voici le bout de code du composant et le retour de Width et Height dans le Create est de 320 sur 240 alors que ma Form est de 800/600
    Je ne comprend pas ce que j'ai oublié pour avoir ce résultat?

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    interface
     
    uses
      Windows,Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, StdCtrls, Grids, DBCtrls, dbgrids, Mask, ComCtrls, DBCGrids, Checklst,buttons ;
     
    type
      TGLElastic = class(TComponent)
      private
         FForm : TForm;
         FAdjustLabelWidths : boolean ;
         FEnabled : boolean ;
         FOldHeight : integer ;
         FOldWidth : integer ;
         FOldOnResize : TNotifyEvent ;
         FOnResize : TNotifyEvent ;
         FFixed : TStringList ;
         procedure SetEnabled(b : boolean) ;
         procedure SetFixed(s : TStringList) ;
      protected
         procedure FormResize(Sender : TObject) ;
      public
         constructor Create(AOwner : TComponent) ; override ;
         destructor Destroy ; override ;
      published
         property AdjustLabelWidths : boolean read FAdjustLabelWidths write FAdjustLabelWidths default False ;
         property Enabled : boolean read FEnabled write SetEnabled default True ;
         property FixedComponents : TStringList read FFixed write SetFixed ;
         property OnResize : TNotifyEvent read FOnResize write FOnResize ;
      end;
     
    procedure Register;
     
    implementation
     
    constructor TGLElastic.Create(AOwner : TComponent) ;
    begin
         inherited Create(AOwner) ;
         FEnabled := True ;
         FFixed := TStringList.Create ;
         FForm := GetParentForm(TControl(AOwner)) as TForm;
         if not (csDesigning in ComponentState) then begin
          if FForm <> Nil then
             begin
               FOldHeight := FForm.Height;
               FOldWidth := FForm.Width;
               FOldOnResize := FForm.OnResize ;
               FForm.OnResize := FormResize ;
          end;
         end ;
    end ;

    Merci d'avance
    Patrick

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour et bienvenue sur les forums de Développez.com

    Si je comprends bien, le but de votre composant est qu'il doit redimensionner la fenêtre. Dans ce cas il est clair que votre composant ne fait rien au niveau de son Create vis à vis de sa fenêtre parent.

    Néanmoins je pense que votre bout de code est incomplet car on n'a pas la méthode FormResize ...
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Conversion de composant D4 vers RAD 2009 Taille TFORM pas OK
    Bonsoir,

    Oui c'est comme je le disais un bout de code, car c'est dans le CREATE que :
    FOldHeight := FForm.Height;
    FOldWidth := FForm.Width;

    les propriétées HEIGHT et WIDTH ne retournent pas la bonne valeur.
    D'où vient ce Height de 240 et Width de 320 ?
    Ma TForm1 où j'ai posé le compo est de 800/600.

    La fonction Resize qui suit effectue bien son travail mais comme la valeur de départ est fausse le ratio d'extension ou de réduction est tout à fait faux.

    Avez vous une idée de pourquoi les valeurs sont erronées?

    D'avance merci
    Patrick

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Hello,

    En fait j'ai trouvé que si je place le compo en enabled:= FALSE
    Et que je l'active dans le Onresize, la taille correcte de la TForm source est correcte.
    Le create est pourtant effectué de la même manière !?! Strange.
    Bon, je suppose que le 240/320 renvoyé si je positionne le enabled à True vient d'une valeur par défaut qqpart dans le constructeur.

    Il y a donc une grosse différence par rapport à D4 en ce qui concerne l'initalisation des variables.

    Soit ce sera ainsi !

    bàv
    Patrick

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Ha ok je vois mieux ce que vous voulez faire. En général pour se genre de chose il vaut mieux redéfinir la méthode Loaded des composants car après l'inherited on est sûr que le composant a bien chargé les valeurs des propriétés publiées stockées dans le DFM.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour et merci du message
    En fait cela reste toujours pas très clair : pourquoi ne rend il pas la bonne dimension de le fiche alors que normalement le flux de traitement des compos
    lors de la création de la fiche ne s'arrêtra que quand toutes les données nécessaires à tous les compos sont initialisées?

    Comment alors implémenter qqchose qui permettra d'en être certain?
    La méthode Loaded peut-elle être redéfinie et avec quel paramètre?

    BàV
    Patrick

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/09/2013, 10h44
  2. Migration vers C++ 2009 ou RAD 2009, retours d'expérience
    Par Fbartolo dans le forum C++Builder
    Réponses: 30
    Dernier message: 29/07/2010, 17h46
  3. Migration BDS2006 vers RAD 2009 ou Cbuilder++2009
    Par Fbartolo dans le forum C++Builder
    Réponses: 1
    Dernier message: 11/12/2008, 15h53
  4. Conversion Access 2.0 vers 2003
    Par davidf dans le forum Access
    Réponses: 13
    Dernier message: 16/06/2005, 17h40
  5. conversion : VARIANT FAR* URL vers CString
    Par kam dans le forum MFC
    Réponses: 2
    Dernier message: 29/03/2004, 13h32

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