cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 2014
-
11 avril 2008 à 18:07
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 2014
-
14 avril 2008 à 17:26
Bonjour à tous!
J' ai une question existencielle qui va me faire passer une mauvaise fin de semaine si je n' ai pas de réponse.
je voudrais savoir si para exemple, lorsque l' on crée un compo basé sur le TImage, il serait possible de:
- cacher la propriété publiée picture: TPicture
- ou alors modifier la propriété publiée picture: TPicture en mode ReadOnly.
- ou alors soyons fou, modifier le nome de propriété publiée picture: TPicture en mode ReadOnly
Je pense que ce n' est pas possible mais j' attends de voir...
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 11 avril 2008 à 19:28
Salut Mauricio !
Extrait de l'aide :
Si vous dérivez un composant de TWinControl, par exemple, il hérite de la propriété protégée DockSite. En redéclarant DockSite dans votre nouveau composant, vous pouvez changer le niveau de protection en public ou publié.
Le code suivant montre une redéclaration de DockSite en tant que publié, le rendant disponible lors de la conception.
type
TSampleComponent = class(TWinControl)
published
property DockSite;
end;
Lorsque vous redéclarez une propriété, vous spécifiez uniquement le nom de la propriété, non le type ni les autres informations décrites dans Définition des propriétés. Vous pouvez aussi déclarer de nouvelles valeurs par défaut et spécifier si la propriété est ou non stockée.
Les redéclarations peuvent augmenter la visibilité d'une propriété, mais pas la réduire. Vous pouvez ainsi rendre une propriété protégée publique, mais vous ne pouvez pas masquer une propriété publique en la redéclarant protégée.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 12 avril 2008 à 00:29
Tout problème a une solution, le tout étant de trouver la bonne.
Mauricio a écrit : "je voudrais savoir si para exemple, lorsque l' on crée un compo basé sur le TImage, il serait possible de..."
Quand tu écris "basé sur le TImage", tout le monde comprend que tu hérites du composant TImage. Or, c'est une vision bien restrictive de la programmation objet et c'est aussi faire fi des Design Patterns et d'une de ses règles d'or : préférer la composition à l'héritage.
En l'occurrence, je verrais bien un petit DP Adapter...
May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 12 avril 2008 à 20:04
DP := DesignPattern
Ce soir je te poste le code et l'illustration permettrant de mieux comprendre le principe du DP Adapter (aussi appelé wrapper). A tout à l'heure, là je vais aller me restaurer.
May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 12 avril 2008 à 23:21
Bon, me voila enfin de retour.
Explications : au lieu d'hériter, on crée une classe dont un des membres est du type de la classe que l'on veut adapter ou envelopper.
Ensuite, il suffit de déclarer les méthodes, les propriétés et évènements que l'on veut voir apparaître dans notre nouveau composant. Ainsi, on peut déclarer les portées (publique, privée, protégée et privée) que l'on veut, cela n'a aucune importance vu de l'extérieur.
Diagramme d'un composant TMyImage, s'appuyant sur un TImage mais ne montrant que deux de ses propriétés (Enable et Visible) ainsi que ses constructeurs et son destructeur, simplifiant ainsi son usage :
Le code qui en résulte est très simple :
type
TMyImage = class (TGraphicControl)
private
FImage: TImage;
function GetEnabled: Integer;
function GetVisible: Integer;
procedure SetEnabled(Value: Integer);
procedure SetVisible(Value: Integer);
public
constructor Create; overload;
constructor Create(AOwner: TComponent); overload;
destructor Destroy;
published
property Enabled: Integer read GetEnabled write SetEnabled;
property Visible: Integer read GetVisible write SetVisible;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Wrapped', [TMyImage]);
end;
constructor TMyImage.Create(AOwner: TComponent);
begin
inherited Create;
FImage.Create(AOwner);
end;
destructor TMyImage.Destroy;
begin
FImage.Destroy;
inherited Destroy;
end;
function TMyImage.GetEnabled: Integer;
begin
Result := FImage.Enabled;
end;
function TMyImage.GetVisible: Integer;
begin
Result := FImage.Visible;
end;
procedure TMyImage.SetEnabled(Value: Integer);
begin
FImage.Enabled := Value;
end;
procedure TMyImage.SetVisible(Value: Integer);
begin
FImage.Visible := Value;
end;
end.
Les lignes de code qui ont vraiment un intérêt pédagogique ont été colorées en vert.
Donc, je peux maintenant ajouter les méthodes, propriétés et évènements souhaités à mon nouveau composant. Chaque fois que j'aurai besoin d'influer sur le comportement de l'image, je le ferai par le biais d'un appel de méthode sur le membre FImage. Pour les autres actions, je laisse la place à votre imagination fertile
Est-ce maintenant plus clair ?
Le Design pattern adapter est un motif structurel parmi les plus simples à mettre en oeuvre et je sens déjà qu'il n'a plus de secrets pour vous
May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 14 avril 2008 à 17:06
Un petit dessin vaut mieux qu'un long discours, non ?
Il ne te reste plus qu'à...
Bonne continuation.
May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 11 avril 2008 à 18:09
La 3ème étant :
- ou alors soyons fou, modifier le nome de propriété publiée picture: TPicture
qui n' a jamais fait planter une appli à cause du copier/coller d' un bout de code
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 12 avril 2008 à 16:07
Merci Kenavo, c' est bien ce que je pensais: impossible de cacher ce qui est visible alors que l' inverse je l' ai déjà fait des dixaines de fois.
@DelphiProg: ce n' était qu' un exemple... Je sais que le problème serait résolu en héritant d' un object plus haut dans la descendance.
"En l'occurrence, je verrais bien un petit DP Adapter.." :
désolé mais je ne sais pas ce que tu veux dire par "DP"
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 14 avril 2008 à 17:26
Franchement DelphiProg, je pensais avoir besoin de cela pour mon TcyPictureArea. Finalement, je préfère laisser la propriété accessible pour que le programmeur puisse modifier/personaliser ce qui est visualisé à tout moment.
Mais comme je me suis posé la question (et pas que la semaine dernière), ça m' interessait de savoir si on pouvait pour un usage ulterieur
"Il ne te reste plus qu'à..."
Bref, j' ai fini les modifications de mon tcyPictureArea qui est devenu bien plus rapide (avec moins de lignes de code il me semble) car la gestion de la visualisation des différents états est bien meilleure (c' était pas très bien construit à vrai dire, mais ça avait le mérite de très bien marcher) et je l' ai même completé en fonctionnalités!
J' hésite à le poster sur CS pour l' instant même si je sais qu' il est utilisé par certains membres.