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 :

[0.9.24] Initialisation TMemo lors de FormCreate [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut [0.9.24] Initialisation TMemo lors de FormCreate
    [Problème Ecriture découplée dans TMémo]
    Bonjour à tous.


    J'essaye d'implanter un petit système de traçage d'évènements dans une appli.

    Je souhaite pouvoir écrire dans un TMémo en passant
    par une variable de type TStrings.

    Ce ne me semble pas trop exotique comme comme idée...
    et pourtant je me heurte au problème suivant :

    Je joins mon code ultrasimplifié

    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
     
    Unit u_essai_log;
     
    {$mode Objfpc}{$H+}
     
    Interface
     
    Uses
        Classes
      , Sysutils
      , Lresources
      , Forms
      , Controls
      , Graphics
      , Dialogs
      , StdCtrls
      { --  mes unités  --  }
    //  , u_c_trace
      ;
     
    Type
     
      { Tform1 }
     
      Tform1 = Class(Tform)
        Btn_Creation_coupleur_: TButton;
        Memo1: Tmemo;
        Procedure Btn_creation_coupleur_click(Sender: Tobject);
        Procedure Formactivate(Sender: Tobject);
        Procedure Formcreate(Sender: Tobject);
      Private
        { Private Declarations }
      Public
        { Public Declarations }
      End; 
     
    Var
      Form1: Tform1; 
      g_truc : TStrings;
    Implementation
     
    { Tform1 }
     
    procedure affiche(const S : String);
    begin
      if assigned(g_truc)
        then g_truc.Add(S)
        else showmessage('G_truc = NIL');
    end;
    Procedure Tform1.Formcreate(Sender: Tobject);
    Begin
    //{
      if Assigned(MeMo1)
        then g_truc := memo1.Lines
        else showmessage( 'Memo1 non assigné');
    //}
    End;
     
    Procedure Tform1.Btn_creation_coupleur_click(Sender: Tobject);
    var
      l_str : string;
    Begin
      l_str := '>azertyuiop<';
      Affiche(l_str);
    //  memo1.Lines.Add(l_str);
    End;
     
    Procedure Tform1.Formactivate(Sender: Tobject);
    Begin
    {
      if Assigned(MeMo1)
        then g_truc := memo1.Lines
        else showmessage( 'Memo1 non assigné');
      affiche ('Assignation effectuée');
    }
    End;
     
     
    Initialization
      {$I u_essai_log.lrs}
     
    End.
    1/ Affectation dans FormCreate

    - j'obtiens un message Projerct raised exception class : EXTERNAL SIGSEGV

    2/ Affectation dans Formactive

    - j'obtiens le bon comportement mais je rédéfinis mon affectation à chaque prise de main de la fenêtre...
    je ne peux pas me contenter de ce comportement qui me posera problème lors de l'implantation de mon unité




    J'ai déjà recherché dans le forum et ai suivi les indications de cette discussion:

    http://www.developpez.net/forums/sho...hlight=SIGSEGV



    J'ai LAZARUS 0.9.24 beta, Windows XP, Debogueur = none,
    mes répertoires sont compatibles MSDOS, et je ne pense pas compiler trop loin de la racine.


    maintenant voici mes hypothèses :

    - Je passe à côté de quelque chose d'ultra simple qu'un débutant comme moi ne voit pas même près de son nez.

    - Le composant TMémo n'est pas totalement initialisé lors de l'éxécution de FormCreate.

    Bref, Auriez-vous une idée me permettant d'avancer sur ce problème ?


    Merci par avance de vos réponses éventuelles.

    Cordialement Captain

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Bonjour à tous,

    Bien je me réponds donc à moi-même

    tout d'abord merci à Chris37, qui m'as confirmé que l'évènement Oncreate ne semblait encore totalement fonctionnel sous Lazarus.
    Je vais utiliser l'évènement Onshow qui ne se produit qu'une fois semble-t-il

    Pour info voir le fil suivant :
    http://www.developpez.net/forums/sho...d.php?t=498208

    ou alors consulter l'aide DELPHI ( ) qui peut-être un bon soutien dans ce cas.

    la réponse à mon problème est donc d'utiliser l'évènement OnShow même si onCreate est plus adapté il est semble-t-il incomplet pour l'instant

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    OnShow n'est-il pas appelé à chaque fois que la form est montrée (typiquement, juste après un minimize/maximize par exemple) ?

    Je n'en sais rien, c'est une question innocente aux spécialistes Lazarus

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Citation Envoyé par wormful_sickfoot Voir le message
    OnShow n'est-il pas appelé à chaque fois que la form est montrée (typiquement, juste après un minimize/maximize par exemple) ?
    pour continuer à apporter des précisions.
    il semble que les événements se produisent dans cet ordre
    Oncreate
    OnShow
    OnFocus
    OnResize
    OnPaint

    Je confirme , que l'adresse d'asignation de la structure TMémo.Lines change entre l'évènement OnCreate et OnShow
    et qu'ensuite cette assignation est stable.

    Il s'agit peut-être d'un bogue de Lazarus.

    Quant à l'évènement OnShow, il ne semble se produire qu'une fois....donc pour l'instant il répond à mes attentes, qui sont d'initialiser une structure indépendante de l'interface utilisateur.
    Rappel: je veux assigner (brancher) un Tstrings d'une de mes unités, pour gérer un fichier log à ma sauce, indépendamment de l'interface utilisateur. Cette assignation doit se faire une fois pour toutes, Oncreate serait le plus adapté, mais je confirme qu'avec Lazarus 0.9.24 et fpc2.2.0 la structure TMemo.Lines change d'assignation APRES onCreate.

    Voilà!
    J'ai mis le "tag" résolu car OnShow semble répondre à mon attente et je m'en contenterai pour le moment.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Par défaut
    onshow s'effectue après la création de la fiche, lorsqu'elle est dessinée et avant qu'elle ne s'affiche. Cet évènement ne se produit qu'une fois (à moins qu'on la masque dans le programme avec un form.hide, puis qu'on la démasque plus tard avec form.show ou form.showmodal)

    L'évènement onactivate s'effectue quand à lui à chaque fois que le focus revient sur la fiche, donc par exemple après un minimize/maximize, ou quand on bascule d'une tache à l'autre)

    La programmation du Tmemo est donc bien à sa place dans le onshow de la fiche quand tous les composants de la fiche ont été créé.

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

Discussions similaires

  1. [Lazarus] Erreur "Initialisation output" lors de la première exécution
    Par winow dans le forum Lazarus
    Réponses: 3
    Dernier message: 25/01/2011, 09h31
  2. Initialisation de membres lors de leur définition.
    Par JMLLB dans le forum Langage
    Réponses: 3
    Dernier message: 17/11/2006, 14h18
  3. Réponses: 2
    Dernier message: 13/06/2006, 17h12
  4. Erreur lors de l'initialisation du BDE
    Par maximdus dans le forum Bases de données
    Réponses: 10
    Dernier message: 06/08/2005, 03h24
  5. Réponses: 6
    Dernier message: 27/01/2004, 16h08

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