Voir les contrôles d'un composant en design time [Résolu]

Messages postés
4
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
18 avril 2006
- - Dernière réponse : 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??
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
4
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
18 avril 2006
3
Merci
C'est bon j'ai résolu mon problème il fallait ajouter mon composant dans la liste des paquets de conception

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 128 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_daniel85
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
3
Merci
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%">

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 128 internautes nous ont dit merci ce mois-ci

Commenter la réponse de f0xi
Messages postés
4
Date d'inscription
lundi 26 septembre 2005
Statut
Membre
Dernière intervention
18 avril 2006
0
Merci
Ben merci beaucoup pour ta réponse très détaillée, je vais voir essayer...
Commenter la réponse de cs_daniel85