Oui ce doit être
C'est en effet la signature du type méthode TNotifyEvent. Et l'événement OnClick est de ce type.
Code : Sélectionner tout - Visualiser dans une fenêtre à part procedure AfterPnlOnClick(Sender : TObject);
Oui ce doit être
C'est en effet la signature du type méthode TNotifyEvent. Et l'événement OnClick est de ce type.
Code : Sélectionner tout - Visualiser dans une fenêtre à part procedure AfterPnlOnClick(Sender : TObject);
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
Oui j'ai oublié ce detail : Le parent n'est pas encore effecté dans le constructeur, ce qu iest normal puisque dynamiquement on tappe :
Donc l'affectation de la parentee du panel doit etre lié a l'affectation de la parente de l'edit soit dans la methode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Lbl := TLabel.Create(Self); Lbl.Parent := Self;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Protected Procedure SetParent(APArent : TWinControl); Override; Procedure TMonEdit.SetParent(APArent : TWinControl); Begin Inherited SetPArent(AParent); Self.pnl.PArent := AParent; End;
On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
--
Pourquoi tant de haine pour cette pauvre aide Delphi ????
Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
--
Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas
bonjour!
Comme je n'ai pas internet chez moi je n'ai pas pu voir les messages que vous aviez laisé...
Mais c'est la tête fraîche et les idées claire que je suis arrivé, et vos messages vont m'aider dans la compréhension du reste du problème... Une histoire de temps et de logique
En tout cas merci bcp pour vos conseils c'est vraiment apprécié!
ludo
Lorsque je clique sur le panel j'ai bien un message test qui apparait!
Jusque là tout va bien donc. Je pourrais appeller mon application directement du composant. Moi je voudrais rajouter un OnPnlClick dans le gestionnaire d'évènements:
Le soucis est que je ne comprends pas tout à fait la logique ici : cette nouvelle propriété doit être définie avec un read, et/ou un write. Apparemment on attend ici un Object ou une classe, mais je ne vois pas pourquoi? Et surtout quel objet doit servir ici? Ce serait un object TNotifyEvent?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 property OnPnlClick: TNotifyEvent read [...] write [...];
merci
ludo
Si tu as suivi mes conseils, tu devrais avoir un TPanel declaré privé dans ton composant.
Donc tu est le seul a pouvoir acceder a ses evenements.
Tu peux donc tout a fait t'en servir.
Le code pour transmettre le gestionnaire specifié par l'utilisateur sur le panel est le suivant :
Voila ... on est rentre plus en profondeur dans la gestion des events/Property
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 TMonEdit = Class(...) Private Procedure SetOnPnlClick(Value : TNotifyEvent); Function GetOnPnlClick : TNotifyEvent; Published Property OnPnlClick : TNotifyEvent Read GetOnPnlClick Write FOnPnlClick; End; Procedure TMonEdit.SetPnlClick(Value : TNotifyEvent); Begin Self.pnl.OnClick := Value; End; Function TMonEdit.GetOnPnlClick : TNotifyEvent; Begin Result := Self.pnl.OnClick; End;
Tu peux affecter une methode en lecture/ecriture pour effectuer un certain traintement quand la property est appele en lecture ou en affectation ....
En fait, Delphi est un des rares (seul?) language a proposer des property. Java par exemple ne se contente que de procedures Get/Set.
L'avantage des property est de pouvoir remplacer une variable par une fonction et inversement sans avoir a recoder toute l'application.
D'une certaine maniere, c'ets comme si Delphi remplacait avant compilation toutes les occurances de la property par ce qui est defini dans Read et/ou write.
On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
--
Pourquoi tant de haine pour cette pauvre aide Delphi ????
Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
--
Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas
D'accord, c'est assez loin de ce que je m'imaginais... lol
Déjà je ne pensais pas qu'on pouvait mettre une procedure...
Bon alors c'est parti!
Et dans le même principe alors il m'est possible de créer une propriété permettant ou non l'affichage de mon panel?
Parcequ'il ne faudrait pas que l'utilisateur soit obligé de voir apparaître ce panel s'il estime qu'il n'a pas besoin de l'application proposée...
Merci pour ces infos!!!
ludo
Oui tout à fait. Tu fais un peu le même genre avec une propriété PnlVisible et des GetPnlVisible/SetPnlVisibleEnvoyé par Ludo_360
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
Ca arrive assez souventEnvoyé par Ludo_360
Oui, c'est une des forces des property. Et on peut aller tres loin.Envoyé par Ludo_360
Comme par exemple tester un nom de fichier ou une url transmise pour s'assurer que le format est bien correct, idem pour les dates, reagir en appelant un gestionnaire d'evenemtn ou executer certaines action quand une procedure est mise a jour (ideal pour repercuter une valeur sur plusieurs classes) ou encore enregistrer/desenregistrer automatiquement un composant aupres d'un autre quand on transmet une certaine valeur ..... (property linked : Boolean par exemple)
Tout a fait.Envoyé par Ludo_360
Dans ce cas ton composant wrap ton pannel.
Tu peux redefinir certaines property/Fonction de ton panel dans ton composant et y faire appel.
Par contre si tu as trop de fonction a manipuler, il serait peut etre preferable de proposer une property :
pour manipuler directement le panel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Property Panel : TPanel Read pnl;
J'ai n'ai specifié que Read car je ne souhaite pas que l'utilisateur puisse affecter un autre panel ce qui peut etre envisageable mais necessite de prendre plsu de precautions.
Par contre, dans ce cas, il n'ets plus possible de passer par l'evenement "OnClick" du panel car il pourra etre affecter par l'utilisateur directement via la property panel du TMonEdit.
D'autres methodes sont envisageable pour coder cet evenement dans ce cas la.
On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
--
Pourquoi tant de haine pour cette pauvre aide Delphi ????
Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
--
Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas
J'ai pense la meme chose mais a y reflechir il peut faire ca aussi :Envoyé par sjrd
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Property EnablePnl : Boolean Read FEnablePnl Write FEnablePnl; [...]If Self.FEnablePnl Then [...];
On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
--
Pourquoi tant de haine pour cette pauvre aide Delphi ????
Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
--
Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas
d'accord, je ne dirais pas que ça commence à s'éclaircir, au contraire
Mais je m'aperçois que je rentre dans une partie du delphi qui à l'air très interessante!
Pour l'instant mes propriétés n'apparaissent pas dans le gestionnaire...
A quoi sert le "F" dans la déclaration de la propriété ?
Property OnPnlClick : TNotifyEvent Read GetOnPnlClick Write FOnPnlClick;
ludo
L'événement et la propriété ne s'affichent pas dans l'inspecteur d'objets... Par contre avec l'aide à la saisie j'ai bien ma propriété et mon évènement qui sont référencés... pourquoi je ne les vois pas dans l'inspecteur alors? Ce n'est pas pratique du tout et je ne vois pas pourquoi j'aurais pas les deux possiblités..?
Pour etre visible dans l'inspecteur d'objet, il faut que les property soient declarees published
Ensuite les property evenements sont dans l'onglet evenement et non proprietees.
On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
--
Pourquoi tant de haine pour cette pauvre aide Delphi ????
Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
--
Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas
C'est ce que j'ai fait... C'est pour ça je ne vois pas l'astuce...
MonEdit, ce que j'ai rajouter à la classe de base:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 private pnl : Tpanel; FEnablePnl : Boolean; procedure SetOnPnlClick( value : TNotifyEvent ); function GetOnPnlClick : TNotifyEvent; protected procedure DoEnter; Override; procedure DoExit; Override; procedure AfterDoEnter; procedure AfterDoExit; public destructor Destroy; published property OnPnlClick : TNotifyEvent read GetOnPnlClick write SetOnPnlClick; property EnablePnl : Boolean read FEnablePnl write FEnablePnl; (******) Constructor TMonEdit.Create(AOwner : TComponent); begin FEnablePnl:= True; pnl:= TPanel.Create(self); end; Destructor TMonEdit.Destroy; begin pnl.free; end; procedure TMonEdit.DoEnter; begin inherited; if Self.FEnablePnl then Self.AfterDoEnter; end; procedure TMonEdit.AfterDoEnter; begin pnl.parent:= Self.parent; pnl.color:= $0097D2FF; pnl.Left:= self.left + 100; pnl.Top:= self.top - 15; pnl.Height:= 20; pnl.Width:= 50; pnl.Caption:= 'Clavier'; pnl.Visible:= true; end; procedure TMonEdit.SetOnPnlClick( value : TNotifyEvent); begin Self.Pnl.OnClick:= value; end; procedure TMonEdit.GetOnPnlClick : TNotifyEvent; begin result:= Self.pnl.OnClick; end; procedure TMonEdit.DoExit; begin inherited; Self.AfterDoExit; end; procedure TMonEdit.AfterDoExit; begin pnl.visible:= false; end;
Voila, je voudrais donc pouvoir voir mon évènement et ma propriété dans mon gestionnaire. Pourquoi la je ne les vois pas? Tout me semble logique jusque là...
merci
ludo
Question bete ... tu as quand meme bien installé ton composant ... non ?
ET il derive de quelle classe ?
On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
--
Pourquoi tant de haine pour cette pauvre aide Delphi ????
Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
--
Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas
Pas si bête que ça la question quand on est bloqué comme ça... le composant est bien installé et est utilisé par plusieurs applications déjà, moi je modifie ce composant en ajoutant mon panel...
il est dérivé de TcustomEdit après 1 ou 2 autres classes...
pourquoi ça peut avoir un effet ?
ludo
ha ben voila
Enfin si on veux.
Tu le modifie comment ? directement avec le code source ?
PArce que si il est isntallé dans delphi c'ets qu'il faut parti d'un package.
Suffit juste de savoir lequel et de recompiler le package.
Normalement l'install ne devrais pas etre a refaire car elle l'est deja ....
On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
--
Pourquoi tant de haine pour cette pauvre aide Delphi ????
Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
--
Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas
PArce que pour que l'inspecteur d'objet puisse y acceder il lui faut certaines information dite RTTI. JE ne suis pas expert en la matiere mais il me semble que ces focntions sont introduite a partir de TComponent classe de base de tout Composants graphique ou non.Envoyé par Ludo_360
Donc ... si il derive d'une classe anterrieure ... je ne suis pas sur que ca reagisse bien
On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
--
Pourquoi tant de haine pour cette pauvre aide Delphi ????
Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
--
Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas
daccor je vais voir ça.. mais commen se fait il que je puisse voir mon panel alors dans les différentes application alors que je n'ai pas fait cette manip...?
Ca marche nickel...!!!
merci
bon je vais manger
a tte
c bizar parceque il me met un message par rapport a mon destructeur a la compilkation du package, mais j'avais le même à la compilation d'une application utilisant mon Edit...
enfin
a+
ludo
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager