Voir les contrôles d'un composant en design time

Résolu
cs_daniel85 Messages postés 4 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 18 avril 2006 - 27 mars 2006 à 16:52
cs_daniel85 Messages postés 4 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 18 avril 2006 - 28 mars 2006 à 17:33
J'ai crée mon propre composant de type TPanel. Dans celui si j'ai insére quelques contrôles (des edit box).
Mais lorsque j'insère mon composant dans une fiche je voudrais bien voir les composants qui s'y trouvent, car je les vois que après la compilation. Ca serait utile de pouvoir les voirs lors du design-time pour pour pouvoir définir les evenements des contôles qui se trouvent dans mon Panel.
Est-ce que quelqu'un peut m'aider??

3 réponses

cs_daniel85 Messages postés 4 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 18 avril 2006
27 mars 2006 à 17:24
C'est bon j'ai résolu mon problème il fallait ajouter mon composant dans la liste des paquets de conception
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
27 mars 2006 à 22:12
Logiquement, meme si ton probleme est resolus, tu as dus ou tu dois declarer ta classe comme cela :

Type

TMultiEditPanel = class(TPanel)
private
fEdit1 : TEdit;
fEdit2 : TEdit;
fOnChange : TNotifyEvent;
procedure fSetEditText(index : integer; Val : string);
procedure fSetEdits(index : integer; val : TEdit);
function fGetEditText(index : integer) : string;
procedure DoEditChange(Sender : TObject);
protected
procedure Change; Virtual;
published
property OnChange : TNotifyEvent read fOnChange write fOnChange;
property Text1 : String index 0 read fGetEditText write fSetEditText;
property Text2 : String index 1 read fGetEditText write fSetEditText;
property EditBox1 : TEdit index 0 read fEdit1 write fSetEdits;
property EditBox2 : TEdit index 1 read fEdit2 write fSetEdits;
Public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
end;

implementation

constructor TMultiEditPanel.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
inherited Create(AOwner);
Self.Width := 250;
Self.Height := 150;

fEdit1 := TEdit.Create(AOwner);
fEdit2 := TEdit.Create(AOwner);

fEdit1.Parent := Self;
fEdit2.Parent := Self;

fEdit1.OnChange := DoEditChange;
fEdit2.OnChange := DoEditChange;

fEdit1.Top := 5;
fEdit2.Top := fEdit1.Top + fEdit1.Height + 5;

fEdit1.Left := 5;
fEdit2.Left := 5;

fEdit1.Text := 'Edit1';
fEdit2.Text := 'Edit2';
end;

destructor TMultiEditPanel.Destroy;
begin
fEdit1.Free;
fEdit2.Free;
inherited Destroy;
end;

procedure TMultiEditPanel.Change;
begin
if Assigned(fOnChange) then fOnChange(Self);
end;

procedure TMultiEditPanel.DoEditChange(Sender : TObject);
begin
Change;
end;

procedure TMultiEditPanel.fSetEditText(index : integer; Val : string);
begin
case index of
0: begin fEdit1.Text := Val; fEdit1.OnChange(fEdit1); end;
1: begin fEdit2.Text := Val; fEdit2.OnChange(fEdit2); end;
end;
end;

function TMultiEditPanel.fGetEditText(index : integer) : string;
begin
case index of
0: result := fEdit1.Text;
1: result := fEdit2.Text;
end;
end;

procedure TMultiEditPanel.fSetEdits(index : integer; Val : TEdit);
begin
case index of
0: begin fEdit1.Assign(Val); fEdit1.OnChange(fEdit1); end;
1: begin fEdit2.Assign(Val); fEdit2.OnChange(fEdit2); end;
end;
end;

voila comment ta classe doit etre faite. comme cela tout s'affiche correctement et de plus la modification du texte declanche l'evenement OnChange du Panel. On peut bien sur ameliorer cet evenements en declarant un type procedure plus complexe, par exemple pour savoir quel texte a ete modifier :

TChangeProc = procedure (Sender : TObject; TextBox : integer; Text : String) of object;

et declarer la propriété OnChange et fOnChange non plus comme TNotifyEvent mais comme TChangeProc et modifier le code en consequence.

si tu ajoute d'autre chose qui doivent declancher l'evenement, utilise la procedure Change et si il s'agit de composant (boutton ect...) assigne les evenements (OnClick ect...) a des procedures comme DoEditChange...

bien entendus, ne pas oublier par la suite d'installer le composant et aussi de declarer une procedure Register dans l'unité pour enregistrer le nouveau composant dans la palette souhaitée.

bon code!

<hr size="2" width="100%">
3
cs_daniel85 Messages postés 4 Date d'inscription lundi 26 septembre 2005 Statut Membre Dernière intervention 18 avril 2006
28 mars 2006 à 17:33
Ben merci beaucoup pour ta réponse très détaillée, je vais voir essayer...
0
Rejoignez-nous