Composants

Résolu
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 11 avril 2005 à 15:21
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 13 avril 2005 à 09:21
Yep,
Je suis en train de créer un composants, seuleument je suis confronté à un petit problème.
Mon composant hérité de TCustomLabel.
J'aimerai créer une propriété qui possède une liste déroulante avec des entiers à l'intérieure.
Un peu comme la propriété fontsize de des composants ou l'utilisateurs doit choisir une taille de police.

Comment faire?

Shell

7 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
12 avril 2005 à 13:27
Une astuce, simple et rapide pour ne pas avoir à écrire un "design editor"; il suffit de déclarer un type TFontSize comme suit :

Type TFontSize ( _00 00
, _08 = 08
, _10 = 10
, _12 = 12
, _13 = 13
, _14 = 14
, _24 = 24
, _36 = 36
) ;

L'editeur de propriété, t'affichera alors une liste de choix des valeurs spécifiées (avec un souligné devant ).
Pour récupérer la valeur, tu as juste à faire une conversion du TFontSize en Integer, et inversement bien sur.

Var
Size : TFontSize ;
Value : Integer ;

Size := _12 ; Value :Integer( Size ) ; // Value 12 ;

Value := 36 ; Size :TFontSize( Value ) ; // Size _36

Cordialement.
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
11 avril 2005 à 18:42
Il me semble qu'il serait plus approprié de partir d'un TCustomComboBox et non d'un TCustomLabel.

Cordialement.
0
yvemoreau Messages postés 308 Date d'inscription mardi 11 juin 2002 Statut Membre Dernière intervention 26 septembre 2008
12 avril 2005 à 02:39
type
Composant = class (TCustumLabel)
private
fXXX:???
property xxx read fxxx write setxxx
implementation
uses RegDesignComponent;

Constructor Composant.Create(Aowner:TComponent);
begin
end;

Note la création de nouvelles cathégories facilite les futurs utilisateurs ,mais on entre ici dans un package DesignTime ,par convention tous les propriétés non run-time doivent être séparé dans un autre pack parce que l'unité DesignIde.pas ne peut être distribué .

Unit RegDesignComponent
implementation
RegisterPropertyInCategory('NomDeLaPropràAfficher',
ClasseduComposantICI=Composant,
'Fxxx');

or le mieux c'est d'ajouter dans les uses de notre composant l'unité DesignTime où seront inclus nos nouvelle property ...exemple ici
uses RegDesignComponent;

Ya surement quelques un de mes composants sur ce site qui en fait la démonstration...
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
12 avril 2005 à 09:11
Je pense avoir mal posé ma question en fait.
Je crée un composant. Dans ce composants j'ai une propriété FontSize, et j'aimerai pour cette proriété, proposer des valeurs deja faite dans une sorte de liste.
Pour exemple, prenez la propriété Size (dans Font) du composants TLabel.

Si ce n'est toujours pas clair je pourrai mettre un screen.

Shell
0

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

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
12 avril 2005 à 14:59
Yep,
Ca merche nickel. Mais maintenant j'ai un autre problème.


La question est comment faire pour signaler que la proriété couleur a changé lorsque l'utilisateur la modifie ?
Voila ou j'en suis pour l'instant :

type
TLCDFont = class(TPersistent)


private
FSize : Cardinal;
FColor: TColor;
procedure SetFontSize( const Value: Cardinal );
procedure SetFontColor( const Value: TColor );


public
Constructor Create(AOwner : TComponent);
Destructor Destroy; override;


published
property Size : Cardinal read FSize write SetFontSize;
property Color: TColor read FColor write SetFontColor;
end;

type
THkLcd = class(TCustomLabel)
private
{ Déclarations privées }


FLCDFont: TLCDFont;
procedure SetLCDFont(const Value: TLCDFont);


protected
{ Déclarations protégées }
public
{ Déclarations publiques }
Constructor Create(AOwner : TComponent); override;
Destructor Destroy; override;
published
{ Déclarations publiées }
property Align;
property Alignment;
property LCDFont: TLCDFont read FLCDFont write SetLCDFont;
end;

Shell
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
12 avril 2005 à 18:09
A qui veux tu signaler le changement de couleur :
* à l'utilisateur ?
* à d'autres composants ?
* ...

Cordialement.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
13 avril 2005 à 09:21
En fait regarde le problème que j'ai se pose sur ces deux lignes :

type
TLCDFont = class(TPersistent)

...
published
property Size : Cardinal read FSize write SetFontSize;
property Color: TColor read FColor write SetFontColor;
end;

type
THkLcd = class(TCustomLabel)
...
published
property LCDFont: TLCDFont read FLCDFont write SetLCDFont;
end;

Je défini une premiere class TLCDFont qui à deux propriétés (Color et Size).
Ensuite je défini une autre class (THkLcd) dont l'une des propriétés (LCDFont) est de type TLCDFont.

Lorsque l'utilisateur va dans le gestionnaire de propriété du composant et quil modifie Size ou Color, j'aimerai que la prorpiété LCDFont fasse apparaitre un message.
Car pour l'instant avec ce que j'ai, seules Color et Size recoive une notification de changement, mais pas LCDFont.
Comment faire ?

Shell
0
Rejoignez-nous