IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Rafraichissement de fenêtre


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 40
    Points
    40
    Par défaut Rafraichissement de fenêtre
    Bonjour,

    Voila, j'ai codé une application qui utilise plusieurs fenêtres. J'ai un souci de rafraichissement de fenêtre. Imaginez une "form" avec un label texte "label2" et un bouton "btnEdit".
    Lorsque je clic sur le bouton "btnEdit", ça ouvre un autre fenêtre avec un champ texte "edit1" et un bouton "btnUpdate".
    Ce que je veux, c'est qu'en cliquant sur le bouton "btnUpdate", le champ "label2" prenne la valeur de "edit1" sans que la seconde fenêtre se ferme.

    Pour l'instant ça marche pas, il faut que je ferme les 2 fenêtres pour que l'affichage soit mis à jour.

    Pour ouvrir la seconde fenêtre je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    f: TEditText;  // Déclaré dans private de la classe
     
    f:=TEditText.Create(Self);  // Dans le formCreate de la première fenêtre
     
    f.Show;  // Encliquant sur le bouton "btnEdit"
    J'espère avoir été clair dans mon problème

    Merci de votre aide.

    Denis

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Si ton but est juste de faire saisir un texte dans une fenêtre pour la renvoyer sur une autre autant ne pas créer de fenêtre et utiliser InputBox.

    Sinon sur le clic de btnUpdate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.Label2.Caption := Edit1.Text;
    N'oublie pas de déclarer ta première form dans le uses de la seconde

  3. #3
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Bonjour et merci.

    Malheureusement ça ne marche pas. Et en fait, ce que j'ai c'est une procédure dans la classe de le première fenêtre qui fait le boulot de rafraichissement. donc de la seconde fenêtre j'appelle cette procédure.

    ça a l'air plus compliqué, il semble que toutes les fonctions de la première fenêtre soient bloqués car la seconde est ouverte. Il doit bien y avoir un moyen de forcer a afficher les nouveaux resultats.

    Merci

    Denis

  4. #4
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Salut,

    "c'est une procédure dans la classe de le première fenêtre qui fait le boulot de rafraichissement"

    c'est quoi ton code dans cette méthode?
    Akim Merabet

  5. #5
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Salut,

    Voici le code, mais je ne pense pas que le problème soit ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    procedure TApe.refreshApe();
    var
      j: integer;
      ape: uAperture;
      units: uUnits;
      layer: uLayer;
    begin
      units:=uUnits.create;
      try
        units.setUnit(main.currUnits);
        layer:=main.GraphicArea.job.getEditedLayer();
        if main.sgLayers.Cells[3, main.sgLayers.Row]<>'' then
        begin
          // Parse all ape
          for j:=0 to layer.numApe-1 do
          begin
            ape:=layer.getApe(j);
            sgApe.Cells[0, j+1]:=IntToStr(ape.num());
            sgApe.Cells[1, j+1]:=UpperCase(ape.shape());
            if (ape.isIt('cir')) then
              sgApe.Cells[2, j+1]:=FormatFloat('0.000000', units.calcUnit(ape.sizeX(), uMM, units.getUnit))
            else
              sgApe.Cells[2, j+1]:=FormatFloat('0.000000', units.calcUnit(ape.sizeX(), uMM, units.getUnit)) + ' x ' + FormatFloat('0.000000', units.calcUnit(ape.sizeY(), uMM, units.getUnit));
            sgApe.RowCount:=2+j;
          end;
          sgApe.Repaint;
        end;
      finally
        units.Free
      end;
    end;
    Merci

  6. #6
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Heu oui.....

    d'autant plus que je ne vois pas de label et d'assignation de son caption avec une valeur d'edit?!

    Pour revenir a ton exemple du début, tu peux utiliser une interface que ta fenêtre qui contient le label à updater implemente. Lors de la création de la 2nde fenêtre contenant l'Edit, tu lui transmet cette interface, et lors du click sur le bouton tu appelle la methode de cette interface.

    Je sais pas si je suis clair
    Akim Merabet

  7. #7
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Bonsoir,

    J'ai réussi a faire une petit exemple : Debug.zip.

    Merci de votre aide.

    Denis

  8. #8
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Voila les modifs à faire dont je parlais dans mon post précédent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
      IUpdate = interface
        procedure DoUpdate(const ANewValeur: string);
      end;
     
      TEditText = class(TForm)
        Edit1: TEdit;
        btnUpdate: TButton;
        procedure btnUpdateClick(Sender: TObject);
      private
        { Private declarations }
        FIntf: IUpdate;
      public
        { Public declarations }
        constructor Create(AOwner: TComponent; const AUpdate: IUpdate); reintroduce;
      end;
     
    implementation
     
    procedure TEditText.btnUpdateClick(Sender: TObject);
    begin
    //  Form3.textEdited:=edit1.text;
    //  Form3.refresh;
    //  Form3.Update;
      if FIntf <> nil then
        FIntf.DoUpdate(Edit1.Text);
    end;
     
    constructor TEditText.Create(AOwner: TComponent; const AUpdate: IUpdate);
    begin
      inherited Create(AOwner);
      FIntf := AUpdate;
    end;
    l'autre form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    type
      TForm3 = class(TForm, IUpdate) 
        btnEdit: TButton;
        Label1: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure btnEditClick(Sender: TObject);
      private
        { Private declarations }
        f: TEditText;
        procedure DoUpdate(const ANewValeur: string); 
      public
        { Public declarations }
    //    textEdited: String;
    //    procedure refresh();
      end;
     
    var
      Form3: TForm3;
     
    implementation
     
    {$R *.dfm}
     
    //procedure TForm3.refresh();
    //begin
    //  label1.Caption:=textEdited;
    //end;
     
    procedure TForm3.DoUpdate(const ANewValeur: string);
    begin
      label1.CAption := ANewValeur;
    end;
     
    procedure TForm3.FormCreate(Sender: TObject);
    begin
      f:=TEditText.Create(Self, Self);
    end;
     
    procedure TForm3.btnEditClick(Sender: TObject);
    begin
      f.Show;
    end;
    voila...
    Akim Merabet

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    un application.processmessage dans la boucle sera mieux que repaint
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  10. #10
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Bonsoir,

    Alors j'ai essayé le Application.ProcessMessages mais ça ne marche pas -> aucun effet.
    Je suis en train d'implémenter la solution avec l'interface, mais il y a un souci dans le code :

    Incompatible type 'IUpdate' and 'TForm3'...

    J'ai peut être pas bien mis le code....

    Denis

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut Denis.

    J'ai jeté un oeil vit' fait au debug.zip, et je vois ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.btnOriClick(Sender: TObject);
    begin
      with TForm3.Create(Self) do
      try
        ShowModal; // serait pas là, le pb ?
      finally
        Free;
      end;
    end;
    Extrait de l'aide Delphi :
    Utilisez la méthode ShowModal pour afficher une fiche comme fiche modale. Dans une fiche modale, l'application ne peut pas continuer à s'exécuter jusqu'à ce que la fiche soit fermée.
    Je répète : Dans une fiche modale, l'application ne peut pas continuer à s'exécuter jusqu'à ce que la fiche soit fermée...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Non, le problème ne vient pas de la, j'ai changer le code pour ne plus avoir du "Modal" et le résultat est le même.

    Je ne comprends pas, il doit y avoir quelque chose qui bloque.

    Denis

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.btnOriClick(Sender: TObject);
    begin
      Form3 := TForm3.Create(Self);
      with Form3 do
      try
        ShowModal;
      finally
        Free;
      end;
    end;
    Puisque que tu fais référence à Form3.Label1, autant ne pas oublier d'assigner à la variable l'instance de la TForm.

    @+ Claudius.

  14. #14
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    lol, bien vu Cl@udius

    Incompatible type 'IUpdate' and 'TForm3'...
    J'ai peut être pas bien mis le code....
    La form 3 doit supporter l'interface...

    Mais bon c'est pas gràve puisque les yeux de lynx de Cl@audius ont trouvé l'erreur.
    Akim Merabet

  15. #15
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 53
    Points : 40
    Points
    40
    Par défaut
    Alors la je dis bravo !!!

    Encore une fois de plus ce forum est excellent, merci a tous.

    Denis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. GWT : écouteur de rafraichissement de fenêtres
    Par dark0502 dans le forum GWT et Vaadin
    Réponses: 6
    Dernier message: 26/05/2010, 20h11
  2. Rafraichissement de fenêtre GTK+
    Par Slookeur dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 18/06/2009, 21h41
  3. [SWING] Rafraichissement de fenêtre
    Par Lambrosx dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 17/01/2008, 08h57
  4. perte de dessin lors du rafraichissement de fenètre
    Par tawsi dans le forum Graphisme
    Réponses: 1
    Dernier message: 04/06/2006, 07h38
  5. Rafraichissement d'une fenêtre.
    Par GETah dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 21/04/2005, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo