Ajout d'une propriété a un composant

Résolu
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011 - 12 janv. 2005 à 17:19
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 15 janv. 2005 à 17:04
Bonjour,



J'aimerais ajouter au composant TstaticText une propriété ACTIVE (de type booulean qui prendrait la valeur True ou False).



Mais cela depasse un peu mes compétences, dans la doc on me parle de surcharger etc. Je n'y comprend rien...



Bref si on pouvait me donner un petit coup de main... Je suis sous D7



D'avance merci.

10 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
12 janv. 2005 à 21:10
Il existe une solution simple à mettre en oeuvre, sans passer par la phase de création d'un composant, son install, etc.
De plus, cette solution a le mérite de ne pas obliger à changer le type des composants employés.

<!--StartFragment-->
  TStaticText =   class (StdCtrls.TStaticText)
  private
    FActive: boolean;
  published
    property Active: boolean 
      read FActive 
      write FActive 
      default False;
  end;

Il te suffit d'ins&#233;rer cette d&#233;claration juste avant celle de 
la fiche qui utilise le composant.

Ainsi, le remplacement sera effectu&#233; automatiquement par cette 
nouvelle d&#233;claration. Extrait d'une unit&#233; contenant une fiche :
<!--StartFragment--><CODE>type
  TStaticText  = class(StdCtrls.TStaticText)
  private
    FActive: boolean;
  published
    property Active: boolean read FActive write FActive default False;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Button2: TButton;
    StaticText1: TStaticText;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { D&#233;clarations priv&#233;es }
  public
    { D&#233;clarations publiques }
  end;



</CODE>

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
3
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
12 janv. 2005 à 17:35
Surcharger ?? Je dirai dériver:

type
TMonControl = class (TAncètre) //le composant ancètre (d'où héritage)
private
FActive : boolean = false;
public
protected
published
property Active : boolean read FActive write FActive;
end;

Utilise plutôt la propriété Enabled.

Note: cet exercice est la base du développement de composants. Je doute que tu saches le faire.

===========
Validez les réponses si ok...

ViewVite : HTML
0
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011
12 janv. 2005 à 17:42
Réponse ultra rapide, mais comme tu t'en doute je ne sais pas le faire.



Et je n'arrive pas a mettre ceci dans mon appli.

Parceque je ne veux pas développer un nouveau composants qu'il me faudrait ensuite installer.

Je pensais mettre le code directement dans mon appli, mais peut etre n'est pas possible.



Ou alors où faut t'il que je le mette ton morceau de code ?
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
12 janv. 2005 à 18:14
Je sentais bien que tu n'étais pas fort en composant. Ce que je peux te dire est de regarder mon tutorial pour installer des composants (rubrique Outils&Liens à gauche de l'écran). Pour comprendre les composants, va dans les rubriques de composants des codes sources... je ne pourrais pas expliquer les composants, ce serait bien trop long...

===========
Validez les réponses si ok...

ViewVite : HTML
0

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

Posez votre question
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
12 janv. 2005 à 22:11
Ah te voici de retour je commencais a
m'inquieter delphiprog. Deja Bonne année a toi et toute ta famille. Et
encore une fois un superbe exemple tres instructif pour moi en tout cas. Je me posais cette question cet apres midi meme et hop la reponse ideale ici.



Merci qui merci delphiprog.


Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
12 janv. 2005 à 23:26
Salut jmp77. Il faut toutefois modérer les usages de cette technique et ne pas l'utiliser à tout va. Si l'usage est limité à une fiche, alors Ok. Si on veut utiliser ce composant redéfini dans plusieurs fiches, alors il faudra se tourner vers des solutions plus "classiques".

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
13 janv. 2005 à 11:23
A noter que avec le code de delphiprog, une fois le StaticText passé en True ou False : rien ne se
passe :) la propriété change parfaitement mais aucune action ne se
déroule. (logique ya pas de procedur liée a la propriété !)

Si tu en veux une fait :

....


<code>type
  TStaticText =   class (StdCtrls.TStaticText)
  private
    FActive: Boolean;
    procedure SetActive(Value: Boolean);
  published
    property Active: boolean read FActive write SetActive default False;
  end;

  TForm1  = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Button2: TButton;
    StaticText1: TStaticText;

  private
    { D&#233;clarations priv&#233;es }

  public
    { D&#233;clarations publiques }
  end;

implementation

{$R *.dfm}

</code>

Procedure StaticText1.SetActive(Value: Boolean);

begin

 if Factive=Value then exit; // pour eviter de mettre "true" quand c deja "true" (idem avec false bien sur)

 FActive := Value;

 if FActive then

  // code si actif

 else

  // code si non actif

end; { du begin }



...



end.



je
viens de faire de tete mais je pense ne pas avoir fait d'erreurs (apres
5 relectures ...). Comme tu le comprends, a chaque chagement d'etat de
ton StaticText, la procedure SetActive est execut&#233;e.

Si tu as plusieurs statictext... je pense qu'il faudrait declarer la procedure en PUBLIC et non PRIVATE, je pense :p

ET comme le dit DelphiProg, tu peux toujours t'en remettre a la m&#233;thode
classique de modif le compo pour faire le tiens a partir d'un
TStaticText.

Voila !

a+



                
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
13 janv. 2005 à 12:37
Bien que cela ne soit pas une erreur fondamentale de déclarer la procédure SetActive de portée "public" au lieu de "private", ce n'est pas une pratique normale. En effet, en la déclarant "public", elle devient alors visibles des autres unités. Or, laisser l'accès à tout le monde peut se révéler parfois dangereux .
Le fait d'avoir un ou plusieurs TStaticText ne change en rien les pratiques décrites ci-dessus (déclaration de portée public ou private).
C'est ça la programmation objet. Chaque objet est indépendant et il obéit aux méthodes qui sont celles décrites par sa classe (ou ses ancêtres s'il n'y a pas eu de surcharges). Ce qui signifie que tous les TStaticText figurant déposés sur la fiche réagiront tous de la même façon quand on modifiera la valeur de l'un d'entre eux.

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
13 janv. 2005 à 12:42
Merci pour ces infos (dont je manque cruellement : oui je n'ai pas les
bases de Delphi :p), donc meme si j'ai mis StaticText1.~ le StaticText2
aura aussi cette procedure ?

je te crois alors :)
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
15 janv. 2005 à 17:04
L'application de ces belles théories sous forme d'un code et du didacticiel qui va bien avec : modifiez vos composants sans modifier vos fiches

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
0
Rejoignez-nous