Appel function dans une autre unit

Résolu
NEO OSOK_TEAM Messages postés 11 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 10 novembre 2012 - 9 nov. 2012 à 14:17
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 11 nov. 2012 à 18:22
Bonjour a tous,

Voila j'ai un boutton qui me permet d'appelle une fonction situe dans une autre Unit. Lorsque je compile il me met UserName non identifié sur la page de l Unit1.

Merci de votre aide.
Voici le code

Unit1
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }

end;

var
Form1: TForm1;

implementation
uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
RetourNom : string;
begin
RetourNom := Unit2.UserName();
ShowMessage(RetourNom);
end;

end.


Et celui du 2eme unit (Unit2)

unit Unit2;

interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls;

implementation
uses Unit1;

function UserName (): string;
var
Utilisateur : Array[0..255] Of Char;
Taille : Cardinal;
begin
Taille := SizeOf(Utilisateur);
If GetUserName(@Utilisateur,Taille) then
Result := strpas(Utilisateur)
else
Result :='';
end;

end.


Neo [OSOK]

10 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
9 nov. 2012 à 18:01
Bonsoir,

ne pas oublier d'ajouter Unit2 au projet..


cantador
3
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
9 nov. 2012 à 18:12
Salut Cantador,

Pas obligé... si tu mets le path de ton unit2 dans les bibliothèques de delphi.
J'ai fait ça pour une unité ou j'ai mis plein de procédures récurrentes, après, je la rajoute juste dans la liste des uses et c'est tout bon (en tous cas, je n'ai jamais rencontré de problèmes là dessus)

Simon
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
11 nov. 2012 à 18:22
Un programme ne sera pas alourdi par l'ajout d'unité supplémentaire. Le Compilateur n'importe dans le programme que ce qui est utilisé réellement.

Sinon on aurait des programmes executable de plusieurs centaines de Mo à chaque fois qu'on fait "uses Windows"

________________________________________________________
3
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
9 nov. 2012 à 14:28
Salut,

Dans ton unit2, déclare ta fonction, et dans unit1, appelle simplement avec "UserName()" et non "Unit2.UserName()"

unit Unit2;

interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls;

function UserName (): string;

implementation

function UserName (): string;
var
Utilisateur : Array[0..255] Of Char;
Taille : Cardinal;
begin
Taille := SizeOf(Utilisateur);
If GetUserName(@Utilisateur,Taille) then
Result := strpas(Utilisateur)
else
Result :='';
end;

end.


Simon
2

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

Posez votre question
NEO OSOK_TEAM Messages postés 11 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 10 novembre 2012
9 nov. 2012 à 21:08
Re bonjour,
Merci beaucoup,
J'ai compris mon erreur.
Je vous remercie a vous 2.

Neo [OSOK]
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
9 nov. 2012 à 22:13
si tu mets le path de ton unit2 dans les bibliothèques de delphi.

La bonne méthode consiste à créer toutes ses procédures et fonctions dans une unité et l'ajouter en tant que de besoin dans son ou ses projets.

la bibliothèque ?
Humhhhh, ça marche, mais c'est source à ennuis..
car après il faut gérer les noms de biblio et puis
elles se chargent à chaque ouverture même si tu n'en a pas besoin.

et j'oublie certainement d'autres inconvénients...

cantador
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
10 nov. 2012 à 08:52
Je ne vois pas ce qu'il y a à gérer de plus.
Dans l'arborescence de mon espace de dev, j'ai un dossier "lib", qui contient plusieurs unités de fonctions par thème (delphi, firebird, ...), et que j'ai ajouté (1 fois pour toutes) dans les chemins de bibliothèques. Ces pauvres unités (en ko, bien sûr ) sont peut être chargées à chaque démarrage par delphi, mais vu le côté pratique de la chose (ajouter un "uses" au lieu d'ouvrir une boîte de dialogue pour aller chercher un fichier dont tu n'as en fait besoin qu'en lecture pour les besoins de ton programme), j'accepte tout à fait de perdre 2 ms de ressources de mon Pc à l'ouverture de delphi... Comme je l'ai dit il s'agit uniquement de méthodes et fonctions récurrentes que je suis susceptible d'utiliser dans tous mes projets. Bien entendu, quand j'ai des fonctions spécifiques à un projet, j'utilise la méthode d'ajout d'unité à un projet.

Simon
0
NEO OSOK_TEAM Messages postés 11 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 10 novembre 2012
10 nov. 2012 à 09:16
Je pense qu il veut dire que selon le programme il peu être lourd.
Car des programmes complexe charge beaucoup de chose a la base.
Si tu veux de la rapidité ca peu devenir une gene.


Neo [OSOK]
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
10 nov. 2012 à 09:31
Mais je suis entièrement d'accord avec lui (et toi ). Je dis juste que quand on peut se faciliter la vie, il ne faut pas s'en priver, surtout avec la puissance des machines actuelles. On est plus sous ms-dos où chaque octet de mémoire comptait (attention, je ne dis pas de ne pas gérer la mémoire proprement dans nos programmes...).

N'oublie pas de cliquer sur "réponse acceptée" si ton problème est résolu.

À bientôt !

Simon
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
10 nov. 2012 à 09:45
Salut,

Si l'unité à appeler se trouve dans le même répertoire que l'unité qui y fait appel, il suffit d'y faire référence dans les "uses" de la seconde.
Pas nécessaire d'ajouter quoi que ce soit dans les "uses" du fichier "project".
Même si Delphi le fait automatiquement au moment de l'enregistrement du projet.
On peut le vérifier en supprimant cette référence dans le fichier "project", à mon avis inutile puisque redondante.

JP
0
Rejoignez-nous