Passer une fiche en paramètre à une Unit.pas
Bonjour tous,
Je débute en Delphi et je butte :aie: sur le problème suivant:
J'ai créé une Unit qui me permet de faire un certain nombre de tâches particulièrement sur des chaînes de caractères pour renvoyer une chaine modifiés selon certains critères.
Ce fichier est une sorte de bibliothèque ou je regroupe des fonctions et procédures que je vais appeler depuis le code d'une partie des fiches.:)
J'aimerais pouvoir passer en paramètre ma fiche par exemple avec le mot self pour pouvoir le récupérer dans mon .pas pour traitement et ainsi déporté une portion de code qui sinon doit être ajouté à toutes les fiches.
Est-ce un use à ajouter, est-ce impossible, je pense que j'ai un défaut de vocabulaire qui ne me permet pas de trouver la solution. Car quelque soit ma recherche je tombe à côté.:weird:
donc depuis la fiche,
Code:
1 2 3 4 5 6 7 8
|
Use
UnitBibl.pas
procedure xyz;
begin
modifControls(self);
end; |
UnitBibl.pas
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
procedure modifControls(frm: Tform); //procédure qui fonctionne dans une fiche, mais s'en fiche dans un .pas sans fiche
var
i: Integer;
chng: string;
begin
For i := 0 to frm.ComponentCount - 1 do
Begin
if Assigned(Components[i]) then
if (Components[i].ClassName = 'TMenuItem') then
begin
fChangerCa((Self.Components[i] as TMenuItem).ce_que_je_veux_changer);
end;
end;
end; |
mais ni TForm ni le reste n'est accepté dans UnitBibl.pas. et ça m'énerve.
Merci pour toutes pistes.
Voici mon résultat, fonctionnel, mais probablement pas parfait.
Merci pour vos aides, j'ai finalement ajouté Vcl.Forms, et les Uses pour les composants que je veux gérer depuis le fichier .pas.
donc dans mon fichier externe disons "FichierExterne.pas" j'ai ajouté utilisé le code suivant:
Code:
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
|
uses
Vcl.Forms, Vcl.Menus {* je travail sur le menu là, mais pour modifier les autre composants, il faut les ajouter, dans cette section.
il y a d'autres uses dans la section de mon .pas, que je n'ai pas ajouté pour plus de clarté.*}
procedure UnitTesting(frm: TForm);
var
x: TForm; //les noms des variables sont moches je sais.
i: Integer;
txt: string;
begin
x := TForm.Create(nil);
x := frm;
For i := 0 to x.ComponentCount - 1 do
Begin
if Assigned(x.Components[i]) then
if (x.Components[i].ClassName = 'TMenuItem') then
begin
txt := pLng((x.Components[i] as TMenuItem).Caption); //pLng fait référence à une fonction qui modifie le menu selon la langue choisie. je ne sais pas si c'est la meilleure solution mais c'est la mienne.
(x.Components[i] as TMenuItem).Caption := txt;
end;
end;
end; |
J'obtiens le résultat souhaité en faisant appel depuis ma fiche de la manière suivante:
Code:
1 2 3 4 5 6
|
procedure Tform1.Activate(sender: TObject);
begin
UnitTesting(self);
end; |
Comme ça il y a même l'exemple
J'avais compris Sergio_is_back, mais merci d'avoir ajouter l'exemple. Il n'y en a jamais assez.