Dériver une form ?

Résolu
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 19 avril 2006 à 10:18
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 20 avril 2006 à 22:44
En fait j'ai besoin d'ajouter à la class Tform une procedure, donc de créer une classe du genre TExtendForm qui reprendraient tout d'une TForm normale mais qui disposerait d'une procedure/fonction publique supplémentaire .
Un petit exemple ? A vot' bon coeur m'sieurs dames :)

6 réponses

cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
19 avril 2006 à 16:39
Hey chteu connai toa tu viendrai pas de ville taneuse ? lol
bon je vois que ta pas trop capich mon post tout fin de compte alors voici un exemple plus explicite et moins contrainiant que l'autre version

1) Ajoute une nouvelle unité (pas une fiche )

voici le code de cette unité
-------------------------------
unit ExtendedForm;

interface
uses
Forms;

type
TExtendedForm = class(TForm)
private
{ Déclarations privées }
public
{ Déclarations publiques }
procedure DoQuelqueChose;virtual; // <=== ne pas oublié le virtual c'est très important !!!
end;


implementation

{ TExtendedForm }

procedure TExtendedForm.DoQuelqueChose;
begin
// rien
end;

end.
-------------------------------

maintenant tu as une classe de Base pour toutes tes forms capich ??

maintenant dans Form1 tu rajoute ExtendedForm dans la clause Uses

maintenant dans TForm1 tu change la déclararion

TForm1 = class(TExtendedForm)

ensuite dans la partie "Public"

public
{ Déclarations publiques }
procedure DoQuelqueChose;override; <=== surcharge obligatoire !!!

juste ici c'est enfin clair non ?

maintenant tu repère cette opération pour toutes les forms de ton Application


ensuite tu fait un test par exemple dans Form1 dans un bouton

TExtendedForm(FindGlobalComponent('Form2')).DoQuelqueChose;

ya pas plus simple ;)
3
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
19 avril 2006 à 16:39
Hey chteu connai toa tu viendrai pas de ville taneuse ? lol
bon je vois que ta pas trop capich mon post tout fin de compte alors voici un exemple plus explicite et moins contrainiant que l'autre version

1) Ajoute une nouvelle unité (pas une fiche )

voici le code de cette unité
-------------------------------
unit ExtendedForm;

interface
uses
Forms;

type
TExtendedForm = class(TForm)
private
{ Déclarations privées }
public
{ Déclarations publiques }
procedure DoQuelqueChose;virtual; // <=== ne pas oublié le virtual c'est très important !!!
end;


implementation

{ TExtendedForm }

procedure TExtendedForm.DoQuelqueChose;
begin
// rien
end;

end.
-------------------------------

maintenant tu as une classe de Base pour toutes tes forms capich ??

maintenant dans Form1 tu rajoute ExtendedForm dans la clause Uses

maintenant dans TForm1 tu change la déclararion

TForm1 = class(TExtendedForm)

ensuite dans la partie "Public"

public
{ Déclarations publiques }
procedure DoQuelqueChose;override; <=== surcharge obligatoire !!!

juste ici c'est enfin clair non ?

maintenant tu repère cette opération pour toutes les forms de ton Application


ensuite tu fait un test par exemple dans Form1 dans un bouton

TExtendedForm(FindGlobalComponent('Form2')).DoQuelqueChose;

ya pas plus simple ;)
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
19 avril 2006 à 16:41
oula pardon pour le doublon c'est la maladie d'alzeimer ;) non c'est ce $$^$^:$;:^$^ de navigateur ou le réseau de code source qui merdouille de temps en temps !!!
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
19 avril 2006 à 16:45
mieux encore tu peux ajouter abstract après virtual; !!!
0

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

Posez votre question
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
19 avril 2006 à 17:24
Ou alors, tu n'ajoutes niu le virtual ni le abstract mais tu mets du code concret dans ta procédure.
Comme ça, tu n'a pas besoin de la redefinir.

Mais, là, ça dépend de tes besoins.
Si tu t'y touches en POO, tu devrais vite trouver comment faire.

Si tu ne te plantes pas ......
tu ne pousseras jamais
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
20 avril 2006 à 22:44
T'es fou,chuis pas de villetaneuse :D Capich ce coup-ci, là t'as dit Unit et pas fiche (et toc !) Blague a part j'ai créer ce topic pour pas poser 2 questions dans l'autre.

Ca marche, j'ai, suite au post de Delphiprog surl'autre topic, étudié la cas des design pattern, Et je m'en suis inspiré.

Donc au final, l'unit qui contieint mes variables globales a 2 fonctions suppl.

//-----------------------------------------------------------
procedure SpreadMsg(Msg:String;Flag:integer);
var i: integer;
begin
for i:= 0 to NbOfForms do
if FormNames[i]<>'' then
with FindGlobalComponent(FormNames[i]) as TExtendedForm
do AnalyseThis(Msg,Flag);
end;


//-----------------------------------------------------------
procedure RegisterMe(aName: string;aIndex:integer);
begin
FormNames[aIndex]:=aName;
end;

chaque instance de TextendedForm fait ca au OnCreate:

with Form_MP3 do
begin
Tag:=2;
RegisterMe(Name,Tag);
end;

Ca marche impec, c'est pas trop trop orienté POO, et rien qu'avec ca j'ai une appli plus fluide, plutot que d'avoir N variables globales, et M timers pour les surveiller. Et c'est important la fluidité, mine de rien, je me fais un FrontEnd pour mon CarPc (camera de recul - lecture mp3 - Navigation Gps - OBDII - et gestion telephone bloutouss pour plus tard ), avec une config de base minimale. (ex: la cam de recul croppé + lecture Mp3 via Bass.dll + hardware monitoring+ aplli gps embedded) 20% de ressources sur un Tbird 1ghz)
0
Rejoignez-nous