Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Surcharge composant héritant d'un TShape [ Algorithme / Autre ] (orelien)

jeudi 6 septembre 2007 à 20:13:36 | Surcharge composant héritant d'un TShape

orelien

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.

jeudi 6 septembre 2007 à 20:47:16 | Re : Surcharge composant héritant d'un TShape

Guillemouze

TMyShape = class(TShape)
...
public
    constructor Create(AOwner: TComponent; MesParamsSupplementaires: integer); reintroduce;
end;


constructor TMyShape.Create(AOwner: TComponent; MesParamsSupplementaires: integer);
begin
    inherited Create(AOwner);
    ...
end;


jeudi 6 septembre 2007 à 20:49:15 | Re : Surcharge composant héritant d'un TShape

f0xi

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !


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;


jeudi 6 septembre 2007 à 20:51:21 | Re : Surcharge composant héritant d'un TShape

f0xi

Membre Club Administrateur CodeS-SourceS


non seulement on dit la même chose, mais en plus on utilise les mêmes noms de classes :)


jeudi 6 septembre 2007 à 21:28:51 | Re : Surcharge composant héritant d'un TShape

Guillemouze

ton exemple est juste un peu plus complet que le mien !
ok je m'avoue vaincu
StringReplace(Guillemouze.message, 'TMyShape', 'TMonDessinage', [rfReplaceAll, rfIgnoreCase]);

vendredi 7 septembre 2007 à 23:12:53 | Re : Surcharge composant héritant d'un TShape

Delphiprog

Administrateur CodeS-SourceS
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 !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

dimanche 16 septembre 2007 à 19:34:07 | Re : Surcharge composant héritant d'un TShape

Delphiprog

Administrateur CodeS-SourceS
Et on en est où de la réflexion ?
Merci de donner signe de vie...


May Delphi be with you !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

mardi 18 septembre 2007 à 19:12:39 | Re : Surcharge composant héritant d'un TShape

orelien

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.




Cette discussion est classé dans : composant, surcharge, tshape, héritant


Répondre à ce message

Sujets en rapport avec ce message

Déplacer objet à héritant d'un TShape [ par orelien ] Bonjour,Je travaille sur un projet pour lequel j'ai besoin de de créer l'éxécution des composant TShape.TObjetShape = Class(Tshape)begin...end;Pour ch Déplacer avec la souris un composant 'Tshape' [ par orelien ] Bonjour,J'aimerais déplacer avec la souris un composant 'Tshape' à l'exécution.Quelqu'un peut-il m'aider ?J'ai tenté ceci mais en vain :const SC_DragM composant dans composant 2eme edition [ par vib ] Je continue mon apprentissage dans la création d'un composant et la je bloque:Je désire à partir d'un Tgraphiccontrol, ajouter à l'affichage deux Tsha Surcharger composant TShape avec propriété popupmenu [ par orelien ] Bonjour,J'aimerais surcharger le composant TShape pour lui ajouter la propriété "PopupMenu".Quelqu'un a t'il un conseil/solution ?MerciOrélien. [Composant] dclOfficeXP [ par Zan ] bonjour,j'ai un probleme a la compilation de mon projet !il me dit :"Paquet requis dclOfficeXP non trouvé"je pense que ca viens du fait qu'a l'install Protocole SNTP : Composant TidSNTP [ par gastou ] Bonjour,Je mets en place un client SNTP où je me connecte à un serveur distant. Mais comment détecter que je me suis bien connecté à ce serveur ? J'ai Changer le nom d'un champ d'une table à partir du composant ttable [ par oluha ] Salutj'aimerai savoir s'il est possible de changer le nom d'une colonne d'une table en passant par le composant ttable. Ca n'est pas possible en sql a Composant TIBScript [ par vincentstryckmans ] Salut,Il paraît que le composant TIBScript d'interbase express livré avec D7 Entreprise permet d'écrire des scripts SQL et de les faire exécuter par l Chercher un composant [ par skorpios27 ] Salut à tous,Je cherche un composant TDBLOOKUPLISTBOX, je fais des recherches impossible de mettre la main dessus.Si une personne a une solution.Merci VoIP help [ par Xtazy ] Powa j'ai besoin d'aide chez Delphiteurs ;)J'voudrai faire un prog de VoIP comme c'est la mode en ce moment :P mais bon voila j'me suis trouvé des com


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.