|
|
|
#1 (permalink) |
|
Messages: n/a
Hébergeur: |
Soit la classe Tstrings :
TStrings = class(TPersistent) private function GetValue(const Name: string): string; procedure SetValue(const Name, Value: string); protected public property Values[const Name: string]: string read GetValue write SetValue; end; Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ... a++ stéphane |
|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
loki a écrit :
> Soit la classe Tstrings : > > TStrings = class(TPersistent) > private > function GetValue(const Name: string): string; > procedure SetValue(const Name, Value: string); > protected > public > property Values[const Name: string]: string read GetValue write SetValue; > end; > > Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ... Salut, il faut ajouter le mot clé "virtual" après la procedure SetValue pour autoriser les surcharges dans la classe parente, le mot "override" doit être utilisé sur cette même fonction dans les déclarations des classes descendant de TStrings. |
|
|
|
#3 (permalink) |
|
Messages: n/a
Hébergeur: |
Et pourquoi ne pas plutot surcharger les fonctions get, put et IndexOfName ?
loki a écrit : > Soit la classe Tstrings : > > TStrings = class(TPersistent) > private > function GetValue(const Name: string): string; > procedure SetValue(const Name, Value: string); > protected > public > property Values[const Name: string]: string read GetValue write SetValue; > end; > > Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ... > > a++ > stéphane |
|
|
|
#4 (permalink) |
|
Messages: n/a
Hébergeur: |
ouai, je sais bien ca ... mais c'est les source de delphi ! et je peux pas y toucher ....
a++ stéphane "Flo" <flouc@laposte.net> wrote in message news:ffv6pp$4o2$1@sd-6498.dedibox.fr... > loki a écrit : >> Soit la classe Tstrings : >> >> TStrings = class(TPersistent) >> private >> function GetValue(const Name: string): string; >> procedure SetValue(const Name, Value: string); >> protected >> public >> property Values[const Name: string]: string read GetValue write SetValue; >> end; >> >> Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ... > > Salut, > > il faut ajouter le mot clé "virtual" après la procedure SetValue pour > autoriser les surcharges dans la classe parente, le mot "override" doit > être utilisé sur cette même fonction dans les déclarations des classes > descendant de TStrings. |
|
|
|
#5 (permalink) |
|
Messages: n/a
Hébergeur: |
bien parceque le hic c'est que justement le truc que je veux changer c'est dans les 3 lignes de code dans le procedure SetValue ! pas de bol je sais ...
en fait je veux que l'instruction myStringList['aname'] := '' ne me supprime pas la ligne "aname=" du TstringsList et ca c'est uniquement dans le setvalue que ca se passe ! a++ stéphane "Henri Gourvest" <x@x.com> wrote in message news:ffv81q$5ih$1@sd-6498.dedibox.fr... > Et pourquoi ne pas plutot surcharger les fonctions get, put et IndexOfName ? > > loki a écrit : >> Soit la classe Tstrings : >> >> TStrings = class(TPersistent) >> private >> function GetValue(const Name: string): string; >> procedure SetValue(const Name, Value: string); >> protected >> public >> property Values[const Name: string]: string read GetValue write SetValue; >> end; >> >> Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ... >> >> a++ >> stéphane |
|
|
|
#6 (permalink) |
|
Messages: n/a
Hébergeur: |
loki schrieb:
> bien parceque le hic c'est que justement le truc que je veux changer c'est dans les 3 lignes de code dans le procedure SetValue ! pas de bol je sais ... > > en fait je veux que l'instruction > > myStringList['aname'] := '' > > ne me supprime pas la ligne "aname=" du TstringsList et ca c'est uniquement dans le setvalue que ca se passe ! > > a++ > stéphane > > > "Henri Gourvest" <x@x.com> wrote in message news:ffv81q$5ih$1@sd-6498.dedibox.fr... >> Et pourquoi ne pas plutot surcharger les fonctions get, put et IndexOfName ? >> >> loki a écrit : >>> Soit la classe Tstrings : >>> >>> TStrings = class(TPersistent) >>> private >>> function GetValue(const Name: string): string; >>> procedure SetValue(const Name, Value: string); >>> protected >>> public >>> property Values[const Name: string]: string read GetValue write SetValue; >>> end; >>> >>> Je voudrais dans une classe enfant modifier la procedure SetValue .. comment je peux faire cela ? bon je sais c'est pas possible mais bon ... >>> >>> a++ >>> stéphane Si je ne me gourre pas (mais j'ai pas re-testé cette technique récemment .... ça fait tellement longtemps que je ne l'ai plus employée), on peut hacker un peu. Dans le formulaire ou tu as besoin de la fonction: Unit Form1; interface Uses ..... ; TStrings = class (Classes.TStrings) procedure SetValue(const Name, Value: string); End; TForm1 = class (TForm) ... End; Implementation .... procedure TStrings.SetValue(const Name, Value: string); Begin .... inherit SetValue(...); (* si nécessaire, c.a.d. la plupart du temps *) .... End; |
|
|
|
#7 (permalink) |
|
Messages: n/a
Hébergeur: |
loki a écrit :
> bien parceque le hic c'est que justement le truc que je veux changer c'est dans les 3 lignes de code dans le procedure SetValue ! pas de bol je sais ... > > en fait je veux que l'instruction > > myStringList['aname'] := '' > > ne me supprime pas la ligne "aname=" du TstringsList et ca c'est uniquement dans le setvalue que ca se passe ! > hum oui, évidemment, et comme ca: myStringList['aname'] := #0 ca t'irait ? |
|
|
|
#8 (permalink) |
|
Messages: n/a
Hébergeur: |
loki a écrit : > bien parceque le hic c'est que justement le truc que je veux changer c'est dans les 3 lignes de code dans le procedure SetValue ! pas de bol je sais ... > > en fait je veux que l'instruction > > myStringList['aname'] := '' > > ne me supprime pas la ligne "aname=" du TstringsList et ca c'est uniquement dans le setvalue que ca se passe ! ou alors surcharges delete comme ca: procedure TMyStringList.Delete(Index: Integer); var name: string; begin if Index >= 0 then begin Name := ExtractName(Get(Index)); if name <> '' then Put(Index, Name + '=') else inherited; end; end; |
|
![]() |
| Outils de la discussion | |
|
|