begin process at 2012 02 11 14:36:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Aide et documentation

 > 

compos - cacher une propriété existante


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

compos - cacher une propriété existante

vendredi 11 avril 2008 à 18:07:17 | compos - cacher une propriété existante

MAURICIO

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

Merci d' avance,
Maurício
vendredi 11 avril 2008 à 18:09:19 | Re : compos - cacher une propriété existante

MAURICIO

Administrateur CodeS-SourceS
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
vendredi 11 avril 2008 à 19:28:22 | Re : compos - cacher une propriété existante

Kenavo

Réponse acceptée !
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.

Arghhhhh !

Désolé de te pourrir ta fin de semaine ...


Ken@vo

Code, Code, Codec !
<
samedi 12 avril 2008 à 00:29:14 | Re : compos - cacher une propriété existante

Delphiprog

Administrateur CodeS-SourceS
Réponse acceptée !

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 !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
samedi 12 avril 2008 à 16:07:52 | Re : compos - cacher une propriété existante

MAURICIO

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

Merci à tous les 2 pour votre temps.
Maurício
samedi 12 avril 2008 à 20:04:29 | Re : compos - cacher une propriété existante

Delphiprog

Administrateur CodeS-SourceS
Réponse acceptée !
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 !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
samedi 12 avril 2008 à 23:21:24 | Re : compos - cacher une propriété existante

Delphiprog

Administrateur CodeS-SourceS
Réponse acceptée !
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;

{****************** Class: TMyImage ******************}
constructor TMyImage.Create;
begin
  inherited Create;
  FImage := TImage.Create;
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 !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
lundi 14 avril 2008 à 10:04:01 | Re : compos - cacher une propriété existante

MAURICIO

Administrateur CodeS-SourceS

Haa bem oui, finalement c' est simple!
Merci DelphiProg,

A+

lundi 14 avril 2008 à 17:06:22 | Re : compos - cacher une propriété existante

Delphiprog

Administrateur CodeS-SourceS
Réponse acceptée !
Un petit dessin vaut mieux qu'un long discours, non ?
Il ne te reste plus qu'à...
Bonne continuation.
May Delphi be with you !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
lundi 14 avril 2008 à 17:26:54 | Re : compos - cacher une propriété existante

MAURICIO

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


A+


Cette discussion est classée dans : cacher, propriété, picture, tpicture, publiée


Répondre à ce message

Sujets en rapport avec ce message

Changer la propriété picture d'une image! [ par BigJuice ] Salut,j'aimerais savior comment changer la propriété Picture d'une image... ex : image.pictureJ'aimerais savoir comment changer le chemin de l'image! Donnee pixels ds1fichier txt -> image [ par Nicolas___ ] Tout d abbord BONJOUR,Bon le sujet n est peut etre pas bien expliquer donc je vous mets ce code :procedure TForm1.EnregisterClick(Sender: TObject);var Dessiner le spectre d'un fichier MP3 dans un TPicture [ par Tisseyre ] j'utilise le composant mp3Coder pour transformer du format wav en mp3,mais je cherche à faire l'opération inverse, c a d transformer du mp3 en Wav afi Cacher application console [ par Mxbug ] Yop voila j'essaye de cacher une application console , c'est a dire quand on l'execute , il faut qu'elle s'execute mais sans qu'on la voit . j'ai essa dblistbox.text [ par deubal ] bonjour, voila j'ai un dblistbox et je voudrais connaitre le texte selectionné la propriété .text n'existe pas. j'ai essayé .field.text et .field.valu L'intérêt de la propriété DefaultExt ? [ par Squallou ] Hello ! J'ai fait un petit prog (sorte de Bloc Note de Windows) et j'ai donc utilisé des ActionsBar etc... avec des FileOpen1 et donc (je vous le don Composant orienté donnée, propriété TableName [ par lbensch ] Bonjour,Je suis en train de créer un composant dans lequel j'aurais besoin d'une propriété TableName, j'ai mis une autre propriété DatabaseName, mais Prob Propriété [ par cricri_forever ] Voila j'ai un ptit prob pour mon composantpublished    { Déclarations publiées }    // les 3 propriétés qui sont présentes dans l'inspecteur d'objets  timer [ par e14273 ] bonjour à tous, j'apprend à utiliser le timer mais il y a une propriété dont je ne comprend pas bien, c'est la propriété "tag". Le fichier d'aide de Image transparente ??? [ par globule ] Bonjour,J'utilise un composant TImage avec un image BMP dedant (un bouton en fait). Les bords de cette image sont blancs. (Je suis obligé de garder mo


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,061 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales