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
14
9 nov. 2012 à 18:01
Bonsoir,

ne pas oublier d'ajouter Unit2 au projet..


cantador
3
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
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
37
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
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
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
14
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
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
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
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
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