1 form pour 2 units

Résolu
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 - 6 nov. 2004 à 19:22
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 - 3 déc. 2005 à 12:38
Bonjour à tous,

j'ai 2 units pour 1 form et l'unit2 ne peut pa modifier la form1, j'ai essayé
unit1.form1.log.... (log étant un mémo)
form1.log....

Comment faire pour que l'unit2 puisse accéder aux 'objets' de la form1, exemple

Unit2;

monsocket.active:=true;

(monsocket étant un serveursocket sur la form1)

merci à tous

Filipe

15 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
7 nov. 2004 à 21:00
Non c'est beaucoup plus simple :

Dans ton Unit1 tu met Unit2 dans le uses de la partie interface
unit Unit1;
interface

uses
  [...], Unit2;



Et dans ton Unit2, tu met Unit1 dans le uses de la partie implémentation car sinon tu crée une référence circulaire (c-a-d que deux unités se réferencent mutuellement)
unit Unit2;

[ ... ] 

implementation

uses 
  Unit1;   // Et voila !!

{$R *.dfm}


@ ++
Florent

Si tu ne te plantes pas ......
tu ne poussera jamais
3
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
6 nov. 2004 à 20:46
Slt Filipe !

La solution est de déclarer l'unit1 dans la partie 'uses' de l'unit2. Pour cela, positionne-toi dans l'unit2, et fais 'fichier' 'Utiliser l'unité...' et sélectionne l'unit1 : cela rajoute automatiquement l'unit1 dans le 'uses' de l'unit2.
Ensuite, tu pourras "agir à distance" comme tu le souhaites sur les composants de la form1 à partir de l'unit2 en faisant simplement par exemple :
Form1.Label1.Caption := 'texte';


:)
Bonne Prog'
Nico

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! :)
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
7 nov. 2004 à 19:00
Salut ni69,

merci pour ta réponse rapide mais:
utiliser l'unité est grisé.

comment faire dans ce cas ?

Merci

Filipe
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
7 nov. 2004 à 19:02
à oui aussi j'ai oublier de dire
que l'unit2 à déja dans ces uses l'unit1
(car je met les fonctions dans l'unit2)

Filipe
0

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

Posez votre question
cs_MHI Messages postés 110 Date d'inscription jeudi 7 octobre 2004 Statut Membre Dernière intervention 19 février 2009 1
7 nov. 2004 à 19:54
Si tu as déjà unit1 dans le uses dans 'interface' ou dans 'implementation', alors du devrait pouvaoir accéder au objet de ta form1.

Il faudrait plus d'indication
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
7 nov. 2004 à 22:18
Quand je parlais des 'uses', je parlais de ceux de la partie 'Implémentation' pas de la partie 'Interface' !
Il faut mettre les déclarations toutes dans la partie implémentation et il n'y aura aucun problème !
(pour moi cela semblait évident dans ma première réponse, alors dsl de ne pas m'être exprimé en entier... ?-) )

:)
Bonne Prog'
Nico

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! :)
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
8 nov. 2004 à 14:56
merci bocou à vous tous,

ca marche à merveille

Bonne prog

Filipe
0
cs_groben Messages postés 11 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 22 novembre 2005
1 déc. 2005 à 14:07
Merci les gars, 2 jours que je cherchais dans l'aide de Delphi !!!
0
cs_groben Messages postés 11 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 22 novembre 2005
1 déc. 2005 à 16:19
Je pensais que c'était bon, mais ça ne veut pas compiler :
mon projet étant trop gros, g fait un petit prog pour tester :
unit forme;

interface

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

var
Form1: TForm1;

implementation

procedure TForm1.goClick(Sender: TObject);
var
inta, intb :integer;
ptc :PInteger;
begin
ptc^:=5;
inta :=strToInt(a.text); //ici, a & b sont des TEDIT
intb :=strToInt(b.text);
somme.add(inta,intb,ptc);
//add(inta,intb,ptc); //non plus
somme.caption := intTostr(ptc^);
end;
############################
et dans l'unité somme :
implementation
uses forme;
procedure add(a,b :integer; ptc:PInteger);
begin
ptc^:=a+b;
end;

Message : "identificateur non déclaré"
là, je ne comprends pas, les liens sont cencés être là...
Si vous pouvez m'éclairer
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
1 déc. 2005 à 18:27
Il faur que tu séclares ta procédure Add() dans la partie interface de ton unité somme. Sinon ,elle n'est visible que par les méthodes situées en dessous d'elle dans la meme unité qu'elle.

unit somme;
interface

procedure add(a,b :integer; ptc:PInteger); // Déclaration

implementation
uses forme;

procedure add(a,b :integer; ptc:PInteger);
begin
ptc^: =a+b;
end;
++

Si tu ne te plantes pas ......
tu ne poussera jamais
0
cs_groben Messages postés 11 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 22 novembre 2005
2 déc. 2005 à 09:05
Je suis obligé de le mettre après uses (pour les Pinteger) mais ça ne fonctionne pas non plus... c'est peut être à cause de ma vieille version de Delphi (2.0)
Je n'ai pas le choix, je suis stagiaire dans une boite qui ne veut pas évoluer à ce niveau.
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
2 déc. 2005 à 16:54
Du moment que tu as la déclaration dans la partie interface et l'implémentation dans la partie implémentation, normalement il n'y a pas de problème.

Si tu ne te plantes pas ......
tu ne poussera jamais
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
2 déc. 2005 à 16:55
Du moment que tu as la déclaration dans la partie interface et l'implémentation dans la partie implémentation, normalement il n'y a pas de problème.

Si tu ne te plantes pas ......
tu ne poussera jamais
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
2 déc. 2005 à 18:35
wow quel "détérage" de topic ^^



mais merci :)

__________________________________________________ - Le site sur ogame de référence ! - Le gén&#
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
3 déc. 2005 à 12:38
Et oui, un an plus tard, il est toujours d'actualité. Ca prouve que "groben" s'est servi de la fonction "rechercher" du site qui est là pour ça. j'en connais d'autres qui devraient s'y mettre (pas toi filipe mais d'autres ;-)

++ Flo

PS : Au passage, desolé pour le double post

Si tu ne te plantes pas ......
tu ne poussera jamais
0
Rejoignez-nous