Appel function dans une autre unit [Résolu]

NEO OSOK_TEAM 11 Messages postés vendredi 5 janvier 2007Date d'inscription 10 novembre 2012 Dernière intervention - 9 nov. 2012 à 14:17 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 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]
Afficher la suite 

10 réponses

Répondre au sujet
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 9 nov. 2012 à 14:28
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sp40
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 9 nov. 2012 à 18:01
+3
Utile
Bonsoir,

ne pas oublier d'ajouter Unit2 au projet..


cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 9 nov. 2012 à 18:12
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sp40
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 11 nov. 2012 à 18:22
+3
Utile
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"

________________________________________________________
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
NEO OSOK_TEAM 11 Messages postés vendredi 5 janvier 2007Date d'inscription 10 novembre 2012 Dernière intervention - 9 nov. 2012 à 21:08
0
Utile
Re bonjour,
Merci beaucoup,
J'ai compris mon erreur.
Je vous remercie a vous 2.

Neo [OSOK]
Commenter la réponse de NEO OSOK_TEAM
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 9 nov. 2012 à 22:13
0
Utile
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
Commenter la réponse de cs_cantador
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 10 nov. 2012 à 08:52
0
Utile
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
Commenter la réponse de sp40
NEO OSOK_TEAM 11 Messages postés vendredi 5 janvier 2007Date d'inscription 10 novembre 2012 Dernière intervention - 10 nov. 2012 à 09:16
0
Utile
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]
Commenter la réponse de NEO OSOK_TEAM
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 10 nov. 2012 à 09:31
0
Utile
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
Commenter la réponse de sp40
korgis 411 Messages postés samedi 17 mai 2003Date d'inscription 16 mars 2018 Dernière intervention - 10 nov. 2012 à 09:45
0
Utile
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
Commenter la réponse de korgis

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.