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 :

Problème pour écrire à l'aide d'une procédure dans un composant d'une fiche crée par programmation [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Programmeur du Dimanche
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Programmeur du Dimanche

    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Par défaut Problème pour écrire à l'aide d'une procédure dans un composant d'une fiche crée par programmation
    Bonjour, je crée une fiche modale (ModalFormf) depuis la fiche principale en cliquant sur un bouton (btnNewForm):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Procedure TMainf.btnNewFormClick(Sender: TObject);
      var F : TModalFormf;  // déclaration
    Begin
      F:=TModalFormf.Create(nil);  // création
      try
        F.Showmodal;  // affichage
      finally
       F.Free;  // libération
      end;
    end;
    Dans cette fiche modale je dépose un bouton et un TEdit, en cliquant sur le bouton j'écris sans problème dans le TEdit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Procedure TModalFormf.Button1Click(Sender: TObject);
    Begin
      Edit1.Text:='Direct'; // ->Affichage OK
    end;
    Par contre si je dépose un deuxième bouton qui utilise une procédure pour écrire dans un autre TEdit j'obtiens un beau SIGSEV:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Procedure ProcTest(s: String);
    Begin
      ModalFormf.Edit2.Text:=s; // ->Génère une exception "External: SIGSEV"
    End;
     
    Procedure TModalFormf.Button2Click(Sender: TObject);
    Begin
      ProcTest('Procedure');
    end;
    La fiche modale et ses composants ont été dessinés dans l'IDE mais la fiche n'est créée qu'à l'exécution par appui sur le bouton. Par contre si je choisis de la créer automatiquement (et en adaptant évidemment le code) dans les options de projet tout se passe bien, pas d'erreur SIGSEV.

    En plus le fait que le premier bouton1 fonctionne correctement fait que la logique m'échappe...

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    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 899
    Billets dans le blog
    2
    Par défaut
    Bonsoir

    C'est tout a fait normal d'avoir l'erreur SIGSEV. Tout simplement car la variable " ModalFormf" n'est pas initialisée dans ta Form principale, tu utilises une variable locale pour créer ta fenêtre var F : TModalFormf;.
    plutot que d'écrire la procedure Procedure ProcTest(s: String); simplement, places dans la partie "Protected" ou "Private" de ta "TModalFormf"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Type
      TModalFormf = class(TForm)
      protected
         Procedure ProcTest(s: String);
      end;
     
    Implementation
     
    Procedure TModalFormf.ProcTest(s: String);
    Begin
       Edit2.Text:=s; 
    End;
    Ou sinon utilises la variable "ModalFormf" dans ta procedure de creation de ta fenêtre principale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Procedure TMainf.btnNewFormClick(Sender: TObject);
    Begin
      ModalFormf:=TModalFormf.Create(nil);  // création
      try
        ModalFormf.Showmodal;  // affichage
      finally
       ModalFormf.Free;  // libération
      end;
    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

  3. #3
    Membre averti
    Homme Profil pro
    Programmeur du Dimanche
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Programmeur du Dimanche

    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Par défaut
    Merci bien, ça fonctionne
    Il faudra que je recherche mieux car il me semble avoir vu un tuto (ici? de Gilles Vasseur ?) qui évoquait ce point.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Bonjour,

    complètement HS mais j'ai trouvé ton pseudo curieux : ça a un rapport avec ce mal connu mais pourtant toujours utilisé processeur ou c'est juste que tu es né en février 1965 ?

  5. #5
    Membre averti
    Homme Profil pro
    Programmeur du Dimanche
    Inscrit en
    Octobre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Programmeur du Dimanche

    Informations forums :
    Inscription : Octobre 2005
    Messages : 18
    Par défaut
    Bonjour Jipété,

    tout à fait c'est bien en relation avec ce microprocesseur créé par MOS Technology, même si ceux qui ont été dans mes machines ont tous été des Rockwell d'où le R du pseudo...
    J'avais même réussi à apprendre l'assembleur 6502 grâce aux excellent bouquins écrits par Rodnay ZAKS plusieurs mois avant d'assembler ma première carte (Junior Computer d'Elektor). Plus tard je suis passé à l'Atom d'Acorn upgradé ultérieurement avec la carte BBC Basic à défaut de pouvoir me payer le BBC lui-même.
    Processeur mal connu comme tu dis mais qui a figuré dans de très nombreuses machines des années 80 et dont les descendants sont toujours d'actualité. Quant à Acorn sa descendance nous a donné le Raspberry PI...

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

Discussions similaires

  1. [MySQL] Problème pour afficher le résultat d'une procédure stockée sous forme de table html
    Par Baleze dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/12/2012, 16h15
  2. [XL-2007] Utiliser la macro pour créer un lien vers une fiche créée
    Par beowulf97 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/01/2012, 09h00
  3. [C#][Excel] Problème pour écrire dans une cellule
    Par MoscoBlade dans le forum C#
    Réponses: 1
    Dernier message: 24/02/2010, 16h54
  4. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  5. problème pour faire un insert avec une image
    Par vbcasimir dans le forum Modules
    Réponses: 3
    Dernier message: 02/11/2005, 09h21

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