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

Composants FMX Delphi Discussion :

TEdit et Caret


Sujet :

Composants FMX Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut TEdit et Caret
    Bonjour,

    il y a moyen de faire apparaître un Tcaret dans un TEdit sous Windows ? J'ai joué avec la propriété Caret du composant sans aucun résultat et pour l'instant je trouve peu ergonomique et surtout peu habituel de se fier au cadre du composant (qui change de couleur) quand il obtient le focus.

    Merci. Zac.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    utilise les fonction de microsoft dans l'unité windows

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function DestroyCaret: BOOL; stdcall;
    function HideCaret(hWnd: HWND): BOOL; stdcall;
    function ShowCaret(hWnd: HWND): BOOL; stdcall;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Désolé d'insister,

    Mais je dois savoir. En Lazarus dans un TEdit, le Caret apparaît aussi bien sous Windows, Linux que OS X.
    Avec FireMonkey, il n'apparaît pas d'origine ni sous Windows, ni sous OS X.

    J'ai porté ce matin ce petit code sur un TEdit
    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
    procedure Tform1.edCODEKeyDown(Sender: TObject; var Key: Word;
      var KeyChar: Char; Shift: TShiftState);
    begin
      if (Length(edCODE.Text) > 7)
      and not (key in [vkBack, vkDelete, vkHome, vkEnd, vkLeft, vkRight, vkReturn, vkTab])then
        begin
          KeyChar := #0;
          MediaPlayer1.CurrentTime := 0;
          MediaPlayer1.Play;
          Exit;
        end;
     
      if Key = vkReturn then
        begin
          Key := vkTab;
          KeyDown(Key, KeyChar, Shift);
        end
      else
        if  not (CharInSet(KeyChar,['0'..'9']))
        and not (Key in [vkBack, vkDelete, vkHome, vkEnd, vkLeft, vkRight, vkTab])
        then
          begin
            KeyChar := #0;
         // Beep;
            MediaPlayer1.CurrentTime := 0;
            MediaPlayer1.Play;
          end;
    end;
    Un TEdit de 8 chiffres max. autorisant vkDelete, vkHome, vkEnd, vkLeft, vkRight. Si j"utilise ces Key, elles fonctionnent correctement mais sans aucun repère visuel, donc avec un inconfort total. Qu'est-ce que j'ignore ? J'ai essayé de nombreux réglages de la propriété Caret du composant, fouiné un peu partout sur le net. Je reste dans l'expectative.

    Merci. Zac

  4. #4
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Bonsoir,
    Merci Anapurna, nos messages se sont croisés. Je regarde. Mais de prime abord c'est curieux. Comment est-il possible que ce "détail" ait été oublié au moins sous Windows ? Il faut que je regarde sur mon Mac, mais ce matin, il ne me semble pas avoir vu de Caret non plus. Mais il est vrai que mon poste de développement principal est sous Windows. Je regarderai demain. Zac.

    ADD : Très curieux, dans un nouveau projet, sur une fiche vierge, le Caret apparaît dans un TEdit et sur mon projet, sur une fiche vierge d'origine, un autre TEdit n'a pas de Caret. On verra cela demain.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    j'ai pas les sources des dernier delphi
    mais sur delphi 7 la gestion du caret n’était pas installé je suppose donc que c'est a toi de le gérer


    ADD
    j'ai vu qu'a partir de X4 delphi gère le caret ... tu doit avoir un événement qui le supprime
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Je crois que j'ai compris.
    La première fenêtre de mon projet est ouverte ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form0 := TForm0.Create(nil);
    et non pas par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CreateForm(TForm1, Form1);
    Ceci explique probablement la différence de comportement au niveau du TEdit. Il n'y a plus qu'à comprendre pourquoi exactement et trouver un palliatif ou une autre manière d'ouvrir la première fenêtre. Je ne suis pas très partisan des Hide. Pour le reste je n'ai vu aucun autre changement de comportement.

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    essai ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form0 := TForm0.Create(self);
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form0 := TForm0.Create(self);
    >> 'Self' : Identificateur non déclaré.

  9. #9
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    le problème est bien l'ouverture de la fenêtre.

    Je pose un TEdit sur une Form TfMain enregistrée dans uMain.
    Ouverture classique
    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
    program Project1;
     
    uses
      System.StartUpCopy,
      FMX.Forms,
      FMX.Dialogs,
      uMain in 'uMain.pas' {fMain};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.CreateForm(TfMain, fMain);
      Application.Run;
    end.
    fMain s'ouvre, le TEdit possède un Caret.

    Maintenant, je ne veux pas que fMain apparaisse au lancement du programme. je simplifie le squelette au maximum et utilise un Showmessage('') pour simuler l'ouverture d'autres fenêtres
    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
    program Project1;
     
    uses
      System.StartUpCopy,
      FMX.Forms,
      FMX.Dialogs,
      uMain in 'uMain.pas' {fMain};
     
    {$R *.res}
     
     
    begin
      Application.Initialize;
      Application.CreateForm(TfMain, fMain);
      Application.RealCreateForms;
      Application.MainForm.Visible:=False;
     
      Showmessage('Oups');
     
      Application.MainForm.Visible := True;
     
      Application.Run;
    end.
    Après le Showmessage(''); la Form fMain apparaît mais le Tedit n'a plus de curseur de texte même s'il fonctionne : il n'est plus dessiné.
    Et même un simple
    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
    program Project1;
     
    uses
      System.StartUpCopy,
      FMX.Forms,
      uMain in 'uMain.pas' {fMain};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.CreateForm(TfMain, fMain);
      Application.RealCreateForms;
      Application.MainForm.Show;
      Application.Run;
    end.
    Et même un simple génère le problème.
    Pffffffff... FireMonkey... technologie difficile à saisir avec des problèmes inattendus à tous les coins de rues... Intéressant mais je suis preneur d'un YaKa qui me permettrait de faire apparaître la FormMain après l'ouverture d'autres fenêtres mais sans effet désagréable d'une courte apparition avant l'ouverture de la première fenêtre modale...

    Zac.

  10. #10
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    En VCL - la propriété Visible est à true sur le premier "Application.CreateForm"
    elle est à false sur les "Application.CreateForm" suivants. Je pense que ce doit être la même chose en FMX.
    Peux tu m'envoyer ton uMain .pas et .fmx pour que je regarde.
    Je travaille avec Delphi 7 et Delphi XE7

  11. #11
    Membre du Club
    Homme Profil pro
    Programmeur
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Programmeur
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Bon,
    j'ai terminé avec une approche plus classique, faute de mieux mais satisfaisante.
    3 Forms, fMain (la MainWindow), fFirst (la première fenêtre à être vue par l'utilisateur), fTest une fenêtre ouverte classiquement à partir de fMain

    Un dpr minimaliste
    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
    program Project1;
     
    uses
      System.StartUpCopy,
      FMX.Forms,
      FMX.Dialogs,
      uMain in 'uMain.pas' {fMain},
      uFirst in 'uFirst.pas' {fFirst},
      uTest in 'uTest.pas' {fTest};
     
    {$R *.res}
    begin
      Application.Initialize;
      Application.CreateForm(TfMain, fMain);
      Application.Run;
    end.
    Tout se joue dans le create de fMain
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    unit uMain;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      FMX.Controls.Presentation, FMX.Edit,  FMX.StdCtrls,
     {Mine}
      uFirst, uTest
      ;
     
    type
      TfMain = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      fMain: TfMain;
     
    implementation
     
    {$R *.fmx}
     
    procedure TfMain.FormCreate(Sender: TObject);
    var
      L : integer;
    begin
    //L := fMain.Left;
      fMain.Position  :=  TFormPosition.poDesigned; {Permettre la construction hors écran -> ToDo : Vérif Dual Screen -Décalage Haut << meilleure prob.}
    //fMain.Left      := -fMain.Width;
      fMain.Top       := -FMain.Height;
    //fMain.Hide; {Probablement inutile}
      Application.CreateForm(TfFirst, fFirst);
      fFirst.ShowModal;
      if fFirst.nRes = 0 then
         Application.Terminate
      else begin
    //fMain.Left := L; {Probablement inutile}
        fMain.Position :=  TFormPosition.poScreenCenter;
      end;
    end;
     
    procedure TfMain.Button1Click(Sender: TObject);
    begin
      if not (Assigned(fTest)) then
        Application.CreateForm(TfTest, fTest);
      fTest.Show;
    end;
     
    end.
    fFirst
    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
    unit uFirst;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls;
     
    type
      TfFirst = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        nRes : integer;
      end;
     
    var
      fFirst: TfFirst;
     
    implementation
     
    {$R *.fmx}
     
    procedure TfFirst.Button1Click(Sender: TObject);
    begin
      nRes := 1;
      close;
    end;
     
    procedure TfFirst.Button2Click(Sender: TObject);
    begin
      nRes := 0;
      close;
    end;
     
    end.
    fTest est une Form vierge.

    Testé sur Windows 10 et OS X >> OK, les carets sont là et MainWindow n'apparaît pas furtivement. Cordialement. Zac

    PS : Encore un petit inconfort : Comment je sais que TFormPosition.poDesigned; Le poDesigned, c'est Lazarus/VCL mais quelle aide me permet de trouver le TFormPosition ? Je n'arrête pas de "butter" sur les classes. Un [F1] me renvoie dans ms-help://embarcadero.rs_xe7/rad/Editeur_de_code.html. J'y trouve bien "l'achèvement de classe" mais je possède le nom de la propriété ou de la méthode et comme, en FireMonkey, il faut explicitement préciser la classe... Quant au menu [Chercher>>rechercher une classe], c'est de peu d'utilité. Berf, il n'y a pas un [Ctrl] + ?

  12. #12
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut Une proposition
    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
     
    program Ex01;
     
    uses
      System.StartUpCopy,
      FMX.Forms,
      uFirst in 'uFirst.pas' {fFirst},
      uMain in 'uMain.pas' {fMain};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.CreateForm(TfFirst, fFirst);
      Application.CreateForm(TfMain, fMain);
      Application.Run;
    end.
    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
     
    unit uFirst;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
      uMain;
     
    type
      TfFirst = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      fFirst: TfFirst;
     
    implementation
     
    {$R *.fmx}
     
    procedure TfFirst.Button1Click(Sender: TObject);
    begin
      // Bouton OK
      self.Visible := false ;
      fMain.Visible := true ;
    end;
     
    procedure TfFirst.Button2Click(Sender: TObject);
    begin
      // Bouton Cancel
      Application.Terminate ;
    end;
     
    end.
    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
     
    unit uMain;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls;
     
    type
      TfMain = class(TForm)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      fMain: TfMain;
     
    implementation
     
    {$R *.fmx}
     
    end.

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

Discussions similaires

  1. Curseur d'un TEdit
    Par Guile dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/05/2003, 18h33
  2. TEdit (encore)
    Par dj.motte dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/12/2002, 19h02
  3. [TEdit][TListBox]Recherche instantanée
    Par SamDaKap dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/11/2002, 21h31
  4. TRichEdit Position du caret
    Par AlainR dans le forum Composants VCL
    Réponses: 6
    Dernier message: 25/10/2002, 10h42
  5. TEdit : selection du texte et autre fonction
    Par Odulo dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/08/2002, 14h27

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