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 :

Objet et reintroduce


Sujet :

Langage Delphi

  1. #1
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut Objet et reintroduce
    voilà, je cherche la manière d'éviter les messages d'avertissements en faisant de l'objet...
    le post un peu plus loin parle déjà de ce sujet...
    Il me semblait que la méthode de tourlourou avec reintroduce était la solution ... mais elle ne marche pas !

    le problème est de rajouter des paramètres au constructor create sans avoir de messages d'avertissement. j''overloade' mais je retrouve le message d'avertissement...
    la méthode avec reintroduce de tourlourou serait la bonne mais je n'arrive pas à la mettre en oeuvre...

    par exemple :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,comctrls,extctrls;
     
      type Ttrack=class(Tpanel)
      public
      T:Ttrackbar;
      constructor create(aowner:Tcomponent);overload;override;
      constructor create(aowner:Tcomponent;w,h,l,t:integer);overload;
      destructor destroy; override;
      end;
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        montrack:Ttrack;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     constructor Ttrack. create(aowner:Tcomponent);
     begin
     inherited;
     T:=Ttrackbar.create(self);
     T.Parent:=self;
     T.align:=alclient;
     T.Cursor:=crhandpoint;
     end;
     
     constructor Ttrack. create(aowner:Tcomponent;w,h,l,t:integer);
     begin
     create(aowner);
     width:=w;
     height:=h;
     left:=l;
     top:=t;
     end;
     
     destructor Ttrack.Destroy;
     begin
     t.Free;
     inherited;
     end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    montrack:=Ttrack.create(self,100,30,20,20);
    montrack.Parent:=self;
    end;
     
    end.
    c'est un exemple bidon pour avoir un support mais comment rendre ça le plus propre possible.
    il me semblait que surcharger le constructeur était le plus propre...
    parce que sinon il suffit de faire une petite proc publique qui gère la taille et la position de mon objet ( ce que je faisais avant sans avoir à overloader-> et là, je n'ai plus d'avertissement)


    les conseils et les avertissement sont les suivants :
    [Conseil] Unit1.pas(12): H2365 La méthode Ttrack.create redéfinie devrait avoir le même case que l'ancêtre TCustomPanel.Create// là, j'ai pas la solution
    [Avertissement] Unit1.pas(13): W1010 La méthode 'Create' cache la méthode virtuelle du type de base 'TCustomPanel'
    [Conseil] Unit1.pas(14): H2365 La méthode Ttrack.destroy redéfinie devrait avoir le même case que l'ancêtre TCustomControl.Destroy

    comment les éviter... et où trouver un bouquin sur de l'objet pur en delphi ?
    J' avais acheté l'orienté objet aux editions Eyrolles mais on a rien en delphi
    dans son contenu...(ça manque...et c'est pourtant fondamental pour ceux qui développent en delphi)

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Quelque chose comme ça, avec un seul constructeur:
    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
     
    interface
    // ...
      constructor Create(AOwner: TComponent; w, h, l, t: Integer); reintroduce;
     
    // ...
     
    implementation
     
    constructor TTrack.Create(AOwner: TComponent; w, h, l, t: Integer);
    begin
      inherited Create(AOwner);
      Width := w;
      Height := h;
      Left := l;
      Top := t;
    end;
    @+ Claudius

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    pour respecter la mise en forme (dont la case) Delphi il faudrait écrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    type
     TTrack=class(TPanel)
      private
       fTrackBar:TTrackBar;
      public
       constructor Create(AOwner:TComponent); override; overload;
       constructor Create(AOwner:TComponent;w,h,l,t:integer); reintroduce; overload;
       destructor Destroy; override;
      end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    pour respecter la mise en forme (dont la case) Delphi il faudrait écrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    type
     TTrack=class(TPanel)
      private
       fTrackBar:TTrackBar;
      public
       constructor Create(AOwner:TComponent); override; overload;
       constructor Create(AOwner:TComponent;w,h,l,t:integer); reintroduce; overload;
       destructor Destroy; override;
      end;
    J'ai rajouté reintroduce; overload; mais j'ai encore ce type de conseil :
    [Conseil] Unit1.pas(12): H2365 La méthode Ttrack.create redéfinie devrait avoir le même case que l'ancêtre TCustomPanel.Create
    [Conseil] Unit1.pas(14): H2365 La méthode Ttrack.destroy redéfinie devrait avoir le même case que l'ancêtre TCustomControl.Destroy

    Est-ce qu'il y a moyen de les eviter et surtout qu'elle est la mise en forme idéale pour faire disparaître ce type de message ?

    Ce dit merci , c'est sympa d'avoir trois réponses de trois pointures comme vous sur ce post.

    je regarde les deux autres propositions avec respect et grand intérêt...(cl@udius et shaileTroll)

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par Archimède Voir le message
    J'ai rajouté reintroduce; overload; mais j'ai encore ce type de conseil :
    [Conseil] Unit1.pas(12): H2365 La méthode Ttrack.create redéfinie devrait avoir le même case que l'ancêtre TCustomPanel.Create
    [Conseil] Unit1.pas(14): H2365 La méthode Ttrack.destroy redéfinie devrait avoir le même case que l'ancêtre TCustomControl.Destroy
    je n'ai pas ces warnings sous D6, mais si je les comprend bien, c'est juste un problème de case, il faut taper Create et Destroy, et habituellement sous Delphi on tape TTrack.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    oui, je sais avec delphi 7, je n'avais pas ce type de remarque non plus.
    Là, j'utilise delphi 2005...

    En utilisant la proposition de Cl@udius, je n'ai plus de commentaires...
    L'utilisation d'un seul constructeur est tout à fait judicieuse...
    (Et pourtant, je conserve la minuscule pour Ttrack...)
    je vais refaire un essai avec la version précédente...

    solution de CL@udius (merci Cl@udius entre parenthèse)
    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
    52
    53
    54
    55
    56
    57
    58
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,comctrls,extctrls;
     
      type Ttrack=class(Tpanel)
      public
      Tr:Ttrackbar;
      constructor create(aowner:Tcomponent;w,h,l,t:integer);reintroduce;
      destructor destroy;reintroduce;
     
      end;
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        montrack:Ttrack;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
     constructor Ttrack. create(aowner:Tcomponent;w,h,l,t:integer);
     begin
     inherited create(aowner);
     width:=w;
     height:=h;
     left:=l;
     top:=t;
     Tr:=Ttrackbar.create(self);
     Tr.Parent:=self;
     Tr.align:=alclient;
     Tr.Cursor:=crhandpoint;
     end;
     
     destructor Ttrack.Destroy;
     begin
     tr.Free;
     inherited;
     end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    montrack:=Ttrack.create(self,100,30,20,20);
    montrack.Parent:=self;
    end;
     
    end.
    là nickel.

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par Archimède Voir le message
    oui, je sais avec delphi 7, je n'avais pas ce type de remarque non plus.
    Là, j'utilise delphi 2005...

    En utilisant la proposition de Cl@udius, je n'ai plus de commentaires...
    L'utilisation d'un seul constructeur est tout à fait judicieuse...
    (Et pourtant, je conserve la minuscule pour Ttrack...)
    je vais refaire un essai avec la version précédente...
    si je ne dis pas de connerie, ça doit être lié à .Net, j'ai pas trop étudier ça mais j'ai un vague souvenir sur une comportement particulier des constructor "Create" (C majuscule) pour les objets .Net.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    si je ne dis pas de connerie, ça doit être lié à .Net, j'ai pas trop étudier ça mais j'ai un vague souvenir sur une comportement particulier des constructor "Create" (C majuscule) pour les objets .Net.
    En effet, tu as raison. J'ai ajouté des majuscules...

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,comctrls,extctrls;
     
      type TTrack=class(Tpanel)
      public
      Tr:Ttrackbar;
      constructor Create(aowner:Tcomponent);overload;override;
      constructor Create(aowner:Tcomponent;w,h,l,t:integer);reintroduce;overload;
      destructor Destroy;override;
      end;
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        montrack:TTrack;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
     
     constructor Ttrack.Create(aowner:Tcomponent;w,h,l,t:integer);
     begin
     Create(aowner);
     width:=w;
     height:=h;
     left:=l;
     top:=t;
     end;
     
     constructor TTrack.Create(aowner:Tcomponent);
     begin
     inherited;
     Tr:=TTrackbar.Create(self);
     Tr.Parent:=self;
     Tr.align:=alclient;
     Tr.Cursor:=crhandpoint;
     end;
     
     destructor Ttrack.Destroy;
     begin
     tr.free;
     inherited;
     end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    montrack:=TTrack.Create(self,100,30,20,20);
    montrack.parent:=self;
    end;
     
    end.
    ça marche (pas de lézards).

    merci encore...
    C'est bien d'avoir des conseils éclairés comme ça...
    on comprend mieux les choses...

    Pour un pro comme toi, il vaut mieux la méthode utilisant deux constructeurs ou un seul. Quel est le plus rigoureux ?

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par Archimède Voir le message
    Pour un pro comme toi, il vaut mieux la méthode utilisant deux constructeurs ou un seul. Quel est le plus rigoureux ?
    ben si tu n'utilises que la forme complète, il ne sert à rien d'en déclarer deux
    en plus personnellement je n'aime pas les overload...mais c'est un avis très personnel que je partage avec moi même
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ben si tu n'utilises que la forme complète, il ne sert à rien d'en déclarer deux
    en plus personnellement je n'aime pas les overload...mais c'est un avis très personnel que je partage avec moi même
    Ok, super, parfait pour tes réponses je dormirai un peu moins con ce soir
    Je clos la discussion.

    ps: merci pour la réf. shailetroll, en effet, il y avait pratiquement tout dedans...

    A+

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

Discussions similaires

  1. codage objet
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 22/08/2002, 16h49
  2. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 22h58
  3. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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