Passer une valeur d'une fiche a une autre

Résolu
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012 - 29 oct. 2011 à 12:25
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012 - 29 oct. 2011 à 17:46
Bonjour,

Voila dans ma fiche principale j'utilise un integer nommé "Curspos" qui me sert de repère.
Je voudrais pouvoir récupérer cette valeur dans une autre fiche nommée "Newline".

J'ai donc essayé :

CursPos2 := NewLine.CursPos;

Celane fonctionne pas, où se trouve mon erreur ? ou comment procéder ?

Par avance, merci.

11 réponses

cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
29 oct. 2011 à 17:04
J'ai trouvé, je ne comprends pas pourquoi mais j'explique.

Cà ne fonctionne pas sur le FormCreate alors que si je créé un boutton sur la Form2 et que je le click cette fois j'ai la bonne valeur de CursPos.
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 48
29 oct. 2011 à 17:15
attention, si tu fais:
procedure TNewLine.FormCreate(Sender: TObject);
begin
  TxtMemo.Text := IntToStr(Main.PostIt.CursPos);
end;


et si NewLine est créée dans le *.dpr
alors c'est normale ... FormCreate est appelé qu'une fois lors de l'initialisation de l'application. Il y a une exception ... si tu crées ta Form toi même (par code dans un évènement)

Remplace FormCreate par FormShow (par l'inspecteur d'objets)
procedure TNewLine.FormShow(Sender: TObject);
begin
  TxtMemo.Text := IntToStr(Main.PostIt.CursPos);
end;



et "UnitName" correspond au nom du fichier *.pas ... par défaut Unit1.pas pour TForm1

UnitName se trouve en début de fichier (tout en haut)

unit Unit1;

interface

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

type
  TForm1 = class(TForm)



[hr]@+Cirec
[hr]
3
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
29 oct. 2011 à 12:38
En fait je me suis trompé ma Form1=PostIt et ma Form2=NewLine

J'ai donc essayé dans NewLine => CursPos := PostIt.CursPos

Merci
0
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
29 oct. 2011 à 12:49
C'est bon j'ai trouvé.

J'ai tout simplement déclaré ma form1 dans la partie "uses" de ma Form2.

Désolé mais comme je ne suis pas initié, je découvre :)
0

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

Posez votre question
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
29 oct. 2011 à 13:04
En fait çà ne marche pas, j'attends vos réponses éclairées.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 48
29 oct. 2011 à 14:27
Salut,

deux condition pour que ça fonctionne:
1) déclarer l'unité dans les uses (ce que tu viens de faire)
2) la variable qui doit être accessible doit être déclarée dans la partie interface de l'unité (avant le mot réservé implementation) pour la rendre visible aux autres unités qui l'utilisent dans les uses.



[hr]@+Cirec
[hr]
0
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
29 oct. 2011 à 15:56
Merci pour la réponse mais c'est aussi ce que j'ai fais.
Je n'ai pas d'erreur à la compilation mais quand je veux tester la valeur de "CursPos" çà ne me donne pas le bon résultat.

En fait j'ai déclaré "CursPos: Integer" dans la partie publique (avant implementation) en tant que variable globale d'après ce que j'ai lu.
En gros mon curseur me sert à connaitre la position d'une ligne sélectionnée parmi 10, quand je compile et que je sélectionne
la 5ème ligne, normalement "CursPos:= 5" mais quand je teste à partir d'une autre forme çà me retourne invariablement la valeur 1.
Exemple :
TxtMemo.Text := IntToStr(PostIt.CursPos);

me retourne 1 dans le TEdit.
D'après tout ce que j'ai pu trouver sur le net çà devrait fonctionner mais ce n'est pas mon cas.
J'en perds mon latin.

Merci.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 48
29 oct. 2011 à 16:12
[quote=Christophe67]En fait j'ai déclaré "CursPos: Integer" dans la partie publique/quoteOh là ...

Cas #1
type
  TForm1 = class(TForm)
    ...
  public
    { Déclarations publiques }
    CursPos: Integer;
  end;

Cas #2
var
  Form1: TForm1;
  CursPos: Integer;


si c'est le Cas #1:
c'est Form1.CursPos ou
UnitName.Form1.CursPos

si c'est le Cas #2:
CursPos suffit ou
UnitName.CursPos


[hr]@+Cirec
[hr]
0
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
29 oct. 2011 à 16:39
C'est bien le cas 1.
type
  TPostIt = class(TForm)
  ...
 private
    { Déclarations privées }
    procedure EchangeString(L1, L2: TLabel);
  public
    { Déclarations publiques }
    CursPos: integer;
  end;


Et je fais bien appelle à CursPos avec le nom de la Form1 = PostIt
TxtMemo.Text := IntToStr(PostIt.CursPos);


Jusque là tout va bien, je compile et aucune erreur n'est signalée.
Mais si je teste la valeur de CursPos à partir de la Form1 (PostIt)
Edit1.Text := IntToStr(CursPos);

pas de soucis la bonne valeur m'est retournée , 5 pour la 5ème ligne par exemple

A partir d'un TImage j'ouvre une Form2 (du nom de NewLine) à partir de l'évènement OnClick
type
  TNewLine = class(TForm)
    TxtMemo: TEdit;
    LabMemo: TLabel;
    DTPheure: TDateTimePicker;
    DTPdate: TDateTimePicker;
    LabDate: TLabel;
    LabHeure: TLabel;
    BtnValider: TButton;
    BtnAnnuler: TButton;
    procedure BtnAnnulerClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  NewLine: TNewLine;


Et bien là quand je récupère la valeur de CursPos (à 5 dans la Form1) ca me retourne la valeur 1 en faisant
TxtMemo.Text := IntToStr(PostIt.CursPos);

PostIt remplaçant Form1 par sa nomination.

Par contre je ne sais pas à quoi correspond "UnitName" pour tester.

Au cas ou, je programme sous Delphi XE2 Professionnel, je le précise car certaines choses diffèrent (ex: ouverture de la form2 se fait par NewLine.ShowModal et non pas NewLine.Show ...).
0
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
29 oct. 2011 à 16:54
J'ai essayé avec l'UnitName (Main pour Form1 et New pour Form2) de la façon suivante
procedure TNewLine.FormCreate(Sender: TObject);
begin
  TxtMemo.Text := IntToStr(Main.PostIt.CursPos);
end;

et même résultat, CursPos = 1
0
cs_Christophe67 Messages postés 80 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 juin 2012
29 oct. 2011 à 17:46
Merci pour toutes ces infos.
0