Surcharge composant héritant d'un TShape

Résolu
cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009 - 6 sept. 2007 à 20:13
cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009 - 18 sept. 2007 à 19:12
Bonjour,

J'ai crée un objet héritant de la classe TShape. J'aimerais maintenant le surcharger en ajoutant des paramètres à son constructeur, mais je n'y arrive pas et je ne sais pas si c'est possible.

Si quelqu'un à une idée.

Merci !

Orélien.

7 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 sept. 2007 à 20:49
tout est possible.

quand tu doit modifier le Create d'une classe qui possede deja un Create il suffit d'utiliser la directive Reintroduce.

exemple :

uses ExtCtrls;

type
  TMyShape = class(TShape)
  public
    constructor Create(AOwner : TComponent; const X,Y,W,H : integer); reintroduce; overload;
    constructor Create(AOwner : TComponent; CloneOf : TMyShape); reintroduce; overload;
    constructor Create(AOwner : TComponent; Brush : TBrush; Pen : TPen); reintroduce; overload;
  end;

{ TMyShape }

constructor TMyShape.Create(AOwner: TComponent; const X, Y, W, H: integer);
begin
  inherited Create(AOwner);
  Self.SetBounds(X,Y,W,H);
end;

constructor TMyShape.Create(AOwner: TComponent; CloneOf : TMyShape);
begin
  inherited Create(AOwner);
  Assign(CloneOf);
end;

constructor TMyShape.Create(AOwner: TComponent; Brush: TBrush; Pen: TPen);
begin
  inherited Create(AOwner);
  Brush.Assign(Brush);
  Pen.Assign(Pen);
end;
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
6 sept. 2007 à 20:47
TMyShape = class(TShape)
...
public
    constructor Create(AOwner: TComponent; MesParamsSupplementaires: integer); reintroduce;
end;

constructor TMyShape.Create(AOwner: TComponent; MesParamsSupplementaires: integer);
begin
    inherited Create(AOwner);
    ...
end;
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 sept. 2007 à 20:51
non seulement on dit la même chose, mais en plus on utilise les mêmes noms de classes :)
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
6 sept. 2007 à 21:28
ton exemple est juste un peu plus complet que le mien !
ok je m'avoue vaincu
StringReplace(Guillemouze.message, 'TMyShape', 'TMonDessinage', [rfReplaceAll, rfIgnoreCase]);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
7 sept. 2007 à 23:12
Il y a de multiples voies pour parvenir à ses fins et l'héritage traîne parfois un cortège d'inconvénients.
Dans le cas présent, supposons qu'Orelien écrive une hiérarchie de composants dérivant de TShape. En utilisant les directives reintroduce, on court le risque qu'à un moment donné, quelqu'un utilise le type de base TShape (croyant faire une bonne affaire) comme classe mère de sa hiérarchie. Et patatras, il appelle le mauvais constructeur (celui de TShape) et s'aperçoit que ses composants ne réagissent pas comme prévu. Résultat, il va devoir chercher pour ça ne marche pas et poser la question qui tue sur ce forum !
Je pense que cette directive Reintroduce n'a été inventée que pour pallier à des problèmes de conception et ne doit pas devenir une règle courante.
La programmation par composition et les designs patterns forment une voie bien souvent plus simple malgré les apparences.
D'ailleurs, un des grands principes de conception objet ne dit-il pas "Préférez la composition à l'héritage" ?
Si seulement notre ami Orelien nous avait dit ce qu'il voulait faire, on aurait pu le mettre sur la voie et lui donner des exemples de code.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
16 sept. 2007 à 19:34
Et on en est où de la réflexion ?
Merci de donner signe de vie...

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
0
cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009
18 sept. 2007 à 19:12
Bonjour,

J'ai testé tout ça et ça semble bien fonctionner, merci. Mais du coup j'aurais besoin de nouvelles fonctionnalités sur ce composant.


Je souhaiterais en fait obtenir un composant graphique plus complet, sur lequel je puisse dessiner et que je pourrais déplacer au clavier et à la souris (OnMouseDown, OnMouseMove, OnMouseUp) après avoir pris le focus sur d'autre composants. Je ne sais pas de quel composant partir et comment m'y prendre pour ajouter ces évènements/propriétés. 

Si vous avez une idée...

Merci !

Orélien.
0
Rejoignez-nous