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

Lazarus Pascal Discussion :

Mise à jour de la propriété Readonly d'un Tmemo


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut Mise à jour de la propriété Readonly d'un Tmemo
    Bonjour,


    J'ai un peu de mal à comprendre pourquoi la propriété readonly du composant Tmemo ne se met fait pas son travail.
    L'objectif est de gérer la permission de modifier ou non le memo. cela marche pour les autres composants Tedit et TdateEdit (Merci Chris37).
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    // Annulation d'une saisie ou d'une modification
    procedure Tf_benef.bt_annulerClick(Sender: TObject);
    Var I : Integer;
    begin
         memo1.Caption:='';
         // Chargement des valeurs initiales de la table >> TEdit
         // Y a t'il un enregistrement ?
         If v_recid<>0 Then
         for i := 0 to pred(f_benef.ComponentCount) do
         Begin
              If (f_benef.Components[i].tag=5)
              Then Begin
                   // Tedit
                   if (f_benef.Components[i] is TEdit)
                   Then Begin
                     (f_benef.Components[i] as TEdit).Text :=
                     f_benef.sql_benef_rec.fieldByName(f_benef.Components[i].Name).asString;
                     (f_benef.Components[i] as TEdit).ReadOnly :=True;
                     memo1.Caption:=   memo1.Caption +
                     ' Edit ' + BoolToStr((f_benef.Components[i] as TEdit).ReadOnly);
                   End;
                   // Tdatedit
                   if (f_benef.Components[i] is TDateEdit)
                   Then Begin
                     (f_benef.Components[i] as TDateEdit).Date :=
                     f_benef.sql_benef_rec.fieldByName(f_benef.Components[i].Name).AsDateTime;
                     (f_benef.Components[i] as TDateEdit).ReadOnly :=True;
                     memo1.Caption:=memo1.Caption +
                     ' date ' + BoolToStr((f_benef.Components[i] as TDateEdit).ReadOnly);
                   End;
                   // Tmemo
                   if (f_benef.Components[i] is TMemo)
                   Then Begin
                     (f_benef.Components[i] as TMemo).Text :=
                     f_benef.sql_benef_rec.fieldByName(f_benef.Components[i].Name).asString;
                     (f_benef.Components[i] as TMemo).ReadOnly :=True;
                     memo1.Caption:=memo1.Caption +
                     ' memo ' + BoolToStr((f_benef.Components[i] as TMemo).ReadOnly);
                   End;
              End;
         End;
         // Gestion de l'affichage
         // Annulation du mode modification
         pan_menu_navigator.Color:=clCream;
         bt_creer.Visible:=True;
         bt_supprimer.Visible:=True;
         bt_quitter1.Visible:=True;
         bt_modifier.Visible:=True;
         bt_prec.Visible:=True;
         bt_suiv.Visible:=True;
         bt_annuler.Visible:=False;
         bt_valider.Visible:=False;
    end;
    // Modification d'un enregistrement
    procedure Tf_benef.bt_modifierClick(Sender: TObject);
    Var i : Integer;
    begin
         memo1.Caption:='';
         // Donne la permission de modifier les champs
         for i := 0 to pred(f_benef.ComponentCount) do
         Begin
              If (f_benef.Components[i].tag=5)
              Then Begin
                   if (f_benef.Components[i] is TEdit)
                   Then Begin
                     (f_benef.Components[i] as TEdit).ReadOnly :=False;
                     memo1.Caption:= memo1.Caption +
                     ' edit ' + BoolToStr((f_benef.Components[i] as TEdit).ReadOnly);
                   End;
                   if (f_benef.Components[i] is TDateEdit)
                   Then Begin
                     (f_benef.Components[i] as TDateEdit).ReadOnly :=False;
                     memo1.Caption:=memo1.Caption +
                     ' dateedit ' + BoolToStr((f_benef.Components[i] as TDateEdit).ReadOnly);
                   End;
                   if (f_benef.Components[i] is TMemo)
                   Then
                   begin
                     (f_benef.Components[i] as TMemo).ReadOnly :=False;
                      memo1.Caption:=memo1.Caption +
                      'memo ' + BoolToStr((f_benef.Components[i] as TMemo).ReadOnly);
                   end;
              End;
         End;
         // Gestion de l'affichage
         // Mise en place du mode modification
         pan_menu_navigator.Color:=clRed;
         bt_creer.Visible:=False;
         bt_supprimer.Visible:=False;
         bt_quitter1.Visible:=False;
         bt_modifier.Visible:=False;
         bt_prec.Visible:=False;
         bt_suiv.Visible:=False;
         bt_annuler.Visible:=True;
         bt_valider.Visible:=True;
    end;
    Pour info memo1 est un memo test pour lire les valeur de readonly son tag est à zero le nom du memo concerné est bnf_memo et son tag est bien à 5.
    Ce qui me surprend d'autant plus c'est que le remplissage du mémo s'effectue bien.
    Sans doute une étourderie mais je tourne autour depuis pas mal de temps alors si vos neurones sont plus éveillés que les miens...

    Merci d'avance.

    Eric

  2. #2
    Membre éclairé

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Points : 773
    Points
    773
    Par défaut
    Bonjour

    De manière générale, readonly determine si l'utilisateur (du programme)peut modifier le contenu du composant.
    Sauf erreur de ma part, tu changes le contenu par programmation, donc tu n'es pas l'utilisateur à ce moment là...

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonsoir,


    En l'occurence c'est bien ce que j'attends de la propriété ReadOnly : que l'utilisateur puisse ou ne puisse pas modifier le contenu du mémo.
    Pour les TEdit et TdateTime cela fonctionne parfaitement mais pas pour le mémo. J'ai bien vérifié et la propriété ReadOnly du Memo passe à vrai ou false en fonction de l'état demandé
    - "Annulation" alors je remets la valeur d'origine dans le champ et j'interdis la modification du champ en passant ReadOnly à True
    - "Modification" alors j'autorise la modification du champ en passant ReadOnly à False.

    Je me demande si ce n'est pas propre au Mémo qui ne tiendrai pas compte d'un changement d'état de la propriété ReadOnly

    Bref je tourne je tourne le problème dans tous les sens alors à moins d'une étourderie grosse comme !!!!


    Merci de vos réponses.

    Eric

  4. #4
    Membre éclairé

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Points : 773
    Points
    773
    Par défaut
    Je viens de faire le test avec un memo et deux boutons (le premier pour mettre l'état du memo à readonly, et le deuxième pour modifier par code le contenu du memo):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      memo1.ReadOnly:= true;
    //  à partir de là on ne peut plus rien ajouter à la souris et au clavier
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      memo1.Lines.Add('XX');
    end;
    le code fonctionne parfaitement:
    un click sur le bouton1 interdit définitivement la saisie de données dans le memo
    un click sur le bouton2 ajoute du texte dans le memo malgré l'interdiction.

  5. #5
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Bonjour Eric,

    Idem pour moi avec le même test que Clandestino, tout fonctionne

    Détruit ton objet Tmemo, enregistre, redémarre Lazarus et recrée ton Objet.
    Sous delphi, j'ai déjà eu ce genre de soucis avec d'autres objets. c'est souvent un code foireux qui se loge dans le Dfm ou lfm.

    @+

  6. #6
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Amis du matin bonjour,



    J'ai supprimé le Tmemo de la form, enregistré, fermé Lazarus, Ouvert à nouveau Lazarus, reposé un Tmemo sur la form paramétré correctement (nom et tag).

    Si la valeur de ReadOnly est initialisée à True dans l'Inspecteur d'Objets à l'éxécution le TMemo sera toujours non modifiable quelque soit les opérations effectuées.

    Si la valeur de ReadOnly est initialisée à False dans l'inspecteur d'Objets, à l'éxécution le TMemo sera toujours modifiable quelque soit les opérations effectuées.


    J'ai eu un truc bizarre aussi, un TEdit qui se balladait dans les déclarations alors qu'il n'était pas présent sur la form. J'ai effacé la ligne "Edit1: TEdit; " concernée et c'est reparti.

    Bon je laisse comme cela en attendant de trouver une solution alternative.


    Merci de vos réponses.

    Eric

  7. #7
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonsoir,

    Bon la propriété readonly est bien affectée par les changements demandés à savoir le showmessage(booltostr(bnf_memo.readonly)) renvoie -1 à true 0 à false. Par contre le comportement du composant TMemo ne change pas. (on peut toujours écrire dedans)
    Par contre si dans le code je remplace readony par Enabled tout marche correctement.
    dans le mode de fonctionnement "Enable/Disable" du mémo.
    Avis aux amateurs.


    Eric

  8. #8
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonsoir,


    En fait le problème ne se produit que sous Linux sous XP tout fonctionne correctement.

    Eric

  9. #9
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut Complément
    Bonjour,

    Suite à une discussion avec l'un des développeurs de Lazarus, ce problème est connu et est directement lié au widget système de l'os. Donc sous Linux, il faut continuer d'utiliser la propriété "Enabled" et attendant une solution.

    Cas non bloquant à ce jour dans la réalisation d'une application

    Cordialement,
    Chris

  10. #10
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Merci Chris,


    En fait j'avais anticipé et utilisé la propriété Enable qui à le désavantage de grisé le texte .. mais pas grave.
    Sinon la phase de tests n'a pas convaincu il me reste pas mal de travail avant la mise en production.
    bonne fêtes de fin d'année et encore merci de ton soutien sans lequel le projet n'en serait pas là ou il en est aujourd'hui (presque terminé) .

    Eric

Discussions similaires

  1. [Débutant] Mise à jour auto des propriétés de navigation
    Par Thomsy92 dans le forum Entity Framework
    Réponses: 1
    Dernier message: 09/06/2015, 18h16
  2. Réponses: 11
    Dernier message: 04/01/2013, 14h56
  3. Notification de mise à jour d'une propriété
    Par Edtech dans le forum Windows Presentation Foundation
    Réponses: 17
    Dernier message: 04/04/2011, 14h58
  4. Réponses: 3
    Dernier message: 23/05/2008, 09h42
  5. Réponses: 1
    Dernier message: 08/06/2007, 13h40

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