Passer une valeur d'une fiche a une autre [Résolu]

Signaler
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012
-
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012
-
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

Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

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.
Messages postés
3819
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
2 novembre 2020
34
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]
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

En fait je me suis trompé ma Form1=PostIt et ma Form2=NewLine

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

Merci
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

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 :)
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

En fait çà ne marche pas, j'attends vos réponses éclairées.
Messages postés
3819
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
2 novembre 2020
34
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]
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

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.
Messages postés
3819
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
2 novembre 2020
34
[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]
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

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 ...).
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

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
Messages postés
80
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 juin 2012

Merci pour toutes ces infos.