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

Lazarus Pascal Discussion :

Comportement d'un TEdit en mode ReadOnly


Sujet :

Lazarus Pascal

  1. #1
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut Comportement d'un TEdit en mode ReadOnly
    Bonjour à toutes et à tous,

    Est-il possible, avec un TEdit en mode ReadOnly, de faire en sorte que, même si on clique dessus, le curseur texte ne s'affiche pas et que par balayage de la souris sur ce composant, le texte qui y est inscrit ne passe pas en surbrillance ?

    Cordialement.

    Pierre

  2. #2
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    3 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 3 246
    Points : 6 093
    Points
    6 093
    Par défaut
    Pourquoi ne pas mettre le "enabled" à faux, dans ce cas ?
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    3 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 3 378
    Points : 9 864
    Points
    9 864
    Billets dans le blog
    6
    Par défaut
    TEdit.Enabled := False -> insensible, mais grisé
    Delphi 5 Pro - Delphi 10.3.2 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Membre expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 211
    Points : 3 140
    Points
    3 140
    Billets dans le blog
    2
    Par défaut
    Salut

    Le TEDit dispose d'une propriété "HideSelection" et "AutoSelect" mais cela ne semble pas fonctionner du moins sous Windows

    Pour éviter la sélection via les événement "OnKeypress" OnMouseMove tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Edit1.SelStart := -1;
       Edit1.SelLength := -1;
    Pour ce qui est du curseur. Sous Windows uniquement il existe la méthode HideCaret(handle)

    EDIT : Dans l'unité LCLIntf tu as la procedure HideCaret mais je ne sais pas si elle compatible avec Linux et autre OS

    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.Edit1MouseEnter(Sender : TObject);
    begin
      Screen.cursor := crNone;
    end;
     
    procedure TForm1.Edit1MouseLeave(Sender : TObject);
    begin
       Screen.cursor := crDefault;
    end; 
     
    procedure TForm1.Edit1Enter(Sender : TObject);
    begin
      HideCaret(Edit1.Handle);
    end;    
     
    procedure TForm1.Edit1MouseMove(Sender : TObject; Shift : TShiftState; X, Y : Integer);
    begin
       Edit1.SelStart := -1;
       Edit1.SelLength := -1;
    end; 
     
    procedure TForm1.Edit1KeyPress(Sender : TObject; var Key : char);
    begin
      Edit1.SelStart := -1;
      Edit1.SelLength := -1;
    end;
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Merci BeanzMaster pour cette proposition.

    J'ai supprimé les deux fonctions effaçant et montrant le curseur car lorsque le curseur est au-dessus du TEdit, étant effacé, on ne sais plus où il est ; c'est plus gênant qu'autre chose.

    Cela fonctionne très bien sous Windows, mais malheureusement sous Linux, le caret ne s'efface pas.

    Je dévie un peu du sujet, mais ce genre d'opération ne peut-elle pas être gérée par ces fameux "Helpers" dont j'avoue ne pas avoir trop compris à quoi cela servait et comment s'en servir.

    Cordialement.

    Pierre

  6. #6
    Membre expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 211
    Points : 3 140
    Points
    3 140
    Billets dans le blog
    2
    Par défaut
    Salut, je me doutais (un peu ) que cela ne fonctionnerait pas sous Linux
    Sinon concernant les assistants (helpers) non ça ne permet pas de rajouter un comportement, il servent à ajouter des méthodes. Si tu as beaucoup de TEdit dans ce genre dans ton application le mieux c'est de surcharger et de créer une nouvelle classe de composant

    A+
    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    4 862
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 862
    Points : 10 466
    Points
    10 466
    Par défaut
    Au plus simple c'est poser cet edit sur un panel et jouer avec le Enabled de ce dernier.

  8. #8
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Au plus simple c'est poser cet edit sur un panel et jouer avec le Enabled de ce dernier.
    Le problème est le même qu'avec un TEdit seul avec son Enabled à false : dans les deux cas, le TEdit apparaît grisé.

    Cordialement.

    Pierre

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    3 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 3 378
    Points : 9 864
    Points
    9 864
    Billets dans le blog
    6
    Par défaut
    Une idée peut-être bête : remplacer le TEdit par son image, tant qu'il doit rester ReadOnly en conservant l'aspect Enabled sans prendre le focus !
    Delphi 5 Pro - Delphi 10.3.2 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    4 862
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 862
    Points : 10 466
    Points
    10 466
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Le problème est le même qu'avec un TEdit seul avec son Enabled à false : dans les deux cas, le TEdit apparaît grisé.
    Je sais qu'on est dans la rubrique Lazarus mais pas sous Delphi ! CM_ENABLEDCHANGED n'est pas propagé aux sous-composants

  11. #11
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Je sais qu'on est dans la rubrique Lazarus mais pas sous Delphi ! CM_ENABLEDCHANGED n'est pas propagé aux sous-composants
    Certes, mais comme je suis sous Lazarus ...

    Cordialement.

    Pierre

  12. #12
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Une idée peut-être bête : remplacer le TEdit par son image ...
    Oui, mais je fais comment ? Je crée un composant image ? C'est ce que je pourrais faire, mais j'ai besoin que mon composant soit tantôt ReadOnly, tantôt qu'il n'y soit pas ; ça devient lourd.

    Cordialement.

    Pierre

  13. #13
    Membre expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 211
    Points : 3 140
    Points
    3 140
    Billets dans le blog
    2
    Par défaut
    Salut

    Le plus simple c'est de surcharger 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
    29
    Type
      TMyEdit = Class(TEdit)
      protected
        procedure MouseMove(Shift: TShiftState; X,Y: Integer); override;
        procedure KeyDown(var Key: Word; Shift: TShiftState);   override;
      end; 
     
    Implementation
     
     
    procedure TMyEdit.MouseMove(Shift : TShiftState; X, Y : Integer);
    begin
      inherited MouseMove(Shift, X, Y);
      if ReadOnly then
      begin
        SelStart := -1;
        SelLength := -1;
      end;
    end;
     
    procedure TMyEdit.KeyDown(var Key : Word; Shift : TShiftState);
    begin
      if ReadOnly then
      begin
        SelStart := -1;
        SelLength := -1;
      end
      else inherited KeyDown(Key, Shift);
    end;
    Reste plus qu'a enregistrer ce composant dans l'EDI dans un paquet et de lui ajouter une petite icone

    A+

    EDIT : Pour supprimer le focus il suffit de rajouter :

    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
    Type
      TMyEdit = Class(TEdit)
      protected
        procedure DoEnter; override; 
        procedure MouseMove(Shift: TShiftState; X,Y: Integer); override;
        procedure KeyDown(var Key: Word; Shift: TShiftState);   override;
      end; 
     
    implementation
     
    procedure TMyEdit.DoEnter;
    begin
      if ReadOnly then RemoveFocus(True);
      inherited DoEnter;
    end;
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  14. #14
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    ... Le plus simple c'est de surcharger TEdit : ...
    J'ai essayé ce composant surchargé, (Windows et LInux) mais cela ne produit aucun effet notable par rapport au simple ReadOnly sinon que lorsque l'on passe la souris au-dessus, la surbrillance disparait. Mais il suffit d'appuyer sur la touche "Enter" pour faire réapparaître la surbrillance.

    Ne serait-il pas possible, comme le propose "Andnotor" sous Delphi, de modifier le composant "TPanel" pour qu'il ne propage pas le grisé vers les composants qu'on dépose dessus ?

    Cordialement.

    Pierre

  15. #15
    Membre expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 211
    Points : 3 140
    Points
    3 140
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    J'ai essayé ce composant surchargé, (Windows et LInux) mais cela ne produit aucun effet notable par rapport au simple ReadOnly sinon que lorsque l'on passe la souris au-dessus, la surbrillance disparait. Mais il suffit d'appuyer sur la touche "Enter" pour faire réapparaître la surbrillance.

    Ne serait-il pas possible, comme le propose "Andnotor" sous Delphi, de modifier le composant "TPanel" pour qu'il ne propage pas le grisé vers les composants qu'on dépose dessus ?

    Cordialement.

    Pierre
    Salut Pierre as tu essayé avec le bout de code en plus que j'ai rajouté en EDIT de mon message précédent : "DoEnter" en plus ? Car normalement, avec, si le TEdit est ReadOnly il n'a pas le focus et donc tu ne peux pas taper de touches à l'intérieur se sera le composant qui à le focus qui interceptera la touche Entrée

    Pour ce qui est du Panel il faut remonter jusqu'aux Widgets de base, autant dire mission impossible.

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  16. #16
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Salut Pierre as tu essayé avec le bout de code en plus que j'ai rajouté en EDIT de mon message précédent : "DoEnter" en plus ? ...
    Oui, j'ai ajouté le DoEnter, mais je m'aperçois, avec le débugger, que je rentre jamais dans cette procédure ?

    J'ai ajouté une procédure MouseEnter. On y entre, mais cela ne fait rien de plus. Voici le code :

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
     
    type
     
      TMyEdit = Class(TEdit)
      protected
        procedure DoEnter; override;
        procedure MouseEnter; override;
        procedure MouseMove(Shift: TShiftState; X,Y: Integer); override;
        procedure KeyDown(var Key: Word; Shift: TShiftState);   override;
      end;
     
      { TForm1 }
     
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
        MyEdit: TMyEdit;
      end;
     
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      MyEdit:= TMyEdit.Create(Self);
      MyEdit.Parent:= Self;
      MyEdit.Top:= 20;
      MyEdit.Left:= 20;
      MyEdit.Text:= 'Essai';
      MyEdit.ReadOnly:= True;
    end;
     
    { TForm1 }
     
    procedure TMyEdit.DoEnter;
    begin
      if ReadOnly then RemoveFocus(True);
      inherited DoEnter;
    end;
     
    procedure TMyEdit.MouseEnter;
    begin
      if ReadOnly then RemoveFocus(True);
      inherited MouseEnter;
    end;
     
    procedure TMyEdit.MouseMove(Shift : TShiftState; X, Y : Integer);
    begin
      inherited MouseMove(Shift, X, Y);
      if ReadOnly then
      begin
        SelStart := -1;
        SelLength := -1;
      end;
    end;
     
    procedure TMyEdit.KeyDown(var Key : Word; Shift : TShiftState);
    begin
      if ReadOnly then
      begin
        SelStart := -1;
        SelLength := -1;
      end;
    end;
    end.
    Peut-être que je n'ai pas compris ce qu'il fallait faire.

    Cordialement.

    Pierre.

  17. #17
    Membre expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 211
    Points : 3 140
    Points
    3 140
    Billets dans le blog
    2
    Par défaut
    Hum bizarre normalement tu n'as pas besoin de MouseEnter car DoEnter est appelée. Quelle version de Lazarus utilises tu ? moi c'est la 2.0.4 et cela fonctionne bien sous Windows. C'est avec Linux le problème ?

    Un petit oubli de ma part c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TMyEdit.KeyDown(var Key : Word; Shift : TShiftState);
    begin
      if ReadOnly then
      begin
        SelStart := -1;
        SelLength := -1;
      end
      else inherited KeyDown(key, shift);
    end;
    Je n'y crois pas trop, mais essayes en mettant le inherited en premier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TMyEdit.DoEnter;
    begin
      inherited DoEnter;
      if ReadOnly then RemoveFocus(True);
    end;

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  18. #18
    Membre confirmé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 407
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Hum bizarre normalement tu n'as pas besoin de MouseEnter car DoEnter est appelée. ...
    Avec le débugger, je m'aperçois que DoEnter est appelé une fois lors du lancement de l'application et plus jamais après.

    Citation Envoyé par BeanzMaster Voir le message
    ... Quelle version de Lazarus utilises tu ? moi c'est la 2.0.4 et cela fonctionne bien sous Windows. C'est avec Linux le problème ?
    Sous Windows XP j'utilise la version 1.6.4 et sous linux (raspbian stretch) avec mon Raspberry Pi 3B+ la version 1.6.2.

    Les comportements sont identiques sur les deux systèmes.

    J'ai appliqué les modifs que tu m'as indiquées : pas de changement.

    Bon, mais ce n'est pas bien grave, ce n'est jamais que du cosmétique. Le jour où j'en aurai assez de cela, je me ferai un composant qui sera une simple image dans le cas du ReadOnly et un vrai TEdit dans l'autre cas.

    En tous cas, merci pour tes propositions.

    Cordialement.

    Pierre.

  19. #19
    Membre expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 211
    Points : 3 140
    Points
    3 140
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Avec le débugger, je m'aperçois que DoEnter est appelé une fois lors du lancement de l'application et plus jamais après.

    Sous Windows XP j'utilise la version 1.6.4 et sous linux (raspbian stretch) avec mon Raspberry Pi 3B+ la version 1.6.2.
    ...
    En tous cas, merci pour tes propositions.

    Cordialement.

    Pierre.
    Salut,
    Pas de problème
    Donc c'est bien une histoire de version car depuis la 1.6.x de nombreux bugs et comportements ont été corrigés. Si tu le peux mets à jour tes versions

    A+
    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  20. #20
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : février 2014
    Messages : 429
    Points : 1 882
    Points
    1 882
    Par défaut
    Bonjour,

    Ceci peut t'intéresser : descendant de TEdit dans lequel tu peux modifier la couleur background et la couleur du texte en mode Disabled.
    Testé sous Windows 10 et Lazarus 1.6.4.
    J'ai simplement rajouté la directive {$mode objfpc}{$H+}

    https://www.swissdelphicenter.ch/en/...de.php?id=1950

    Pour se passer des unités Windows et Messages:
    - ajouter les unités LCLIntf, LCLType, LMessages.
    - modifier les messages WM... par LM..., TWM... par TLM...

    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
    unit PBExEdit;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      SysUtils, Classes, Graphics, Controls,
      Forms, Dialogs, StdCtrls, LCLIntf, LCLType, LMessages;
     
    type
      TPBExEdit = class(TEdit)
      private
        { Private declarations }
        FDisabledColor: TColor;
        FDisabledTextColor: TColor;
        procedure LMPaint(var msg: TLMPaint); message LM_PAINT;
        procedure LMEraseBkGnd(var msg: TLMEraseBkGnd); message LM_ERASEBKGND;
        //...
    Est-ce alors compatible avec Linux ?

    Cordialement
    Thierry

Discussions similaires

  1. QWebview::un champ est en mode ReadOnly
    Par Armelino dans le forum C++
    Réponses: 1
    Dernier message: 08/03/2016, 15h09
  2. Modifier le comportement d'un TEdit
    Par Moine dans le forum Composants VCL
    Réponses: 7
    Dernier message: 02/03/2009, 11h39
  3. Comportement différent selon Mode Execution
    Par MarronSuisse dans le forum C
    Réponses: 7
    Dernier message: 14/04/2008, 13h52
  4. Activé un champ en mode ReadOnly
    Par ludobado dans le forum Access
    Réponses: 3
    Dernier message: 21/04/2006, 13h06
  5. Réponses: 3
    Dernier message: 16/03/2005, 12h31

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