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 :

Form.Update n'update rien ou il y a un bug dans mon code ou autre chose [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut Form.Update n'update rien ou il y a un bug dans mon code ou autre chose
    Bonjour,

    je deviens fou : je crée des objets dynamiquement (des TPanels contenus dans un TPanel sur la fiche, et contenant 1 TImage et 1 TLabel chacun), donc logiquement je devrais faire le ménage avant clôture, sauf que
    - que je passe par FormClose, un autre appel par FormKeyDown ou un bouton, le ménage n'est pas fait, enfin, c'est ce que je devine en voyant le symbole à gauche, qui devient vert-valide juste après F9 ;
    Nom : no_step-by-step.png
Affichages : 146
Taille : 35,8 Ko

    - en pas-à-pas je n'entre jamais dans les lignes du ménage, malgré les ShowMessage qui s'affichent :
    Nom : dans_tbutton.png
Affichages : 128
Taille : 24,7 Ko

    - plus curieux, si je n'exécute pas ce nettoyage il n'y a pas de fuite mémoire. Il n'y aurait donc pas besoin de faire le ménage ?

    - et pourquoi je ne me prends pas d'erreurs dans cette procédure, en cliquant plusieurs fois sur le bouton ? :

    Après 25 ans de Delphi et Lazarus, j'avoue que je suis un peu perdu, là.

    Merci et bon aprème,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    Je n'ai pas fait l'essai (il manque un peu de code)

    - plus curieux, si je n'exécute pas ce nettoyage il n'y a pas de fuite mémoire. Il n'y aurait donc pas besoin de faire le ménage ?
    Parce que le owner ou le parent (je ne sais plus) fait automatiquement le ménage à la fermeture.
    Et du coup, il se peut (à vérifier) que componentCount soit du coup à zéro.

    Cordialement

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par acaumes Voir le message
    Parce que le owner ou le parent (je ne sais plus) fait automatiquement le ménage à la fermeture.
    Et du coup, il se peut (à vérifier) que ComponentCount soit du coup à zéro.
    Bien vu !

    + 1 !
    Vérifié ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
    begin
      showmessage('test');
      showmessage('componentCount : '+inttostr(ComponentCount));
      for i := 0 to ComponentCount-1 do
      ...
    Le résultat donne 4 : 2 TButton's, 1 TEdit et 1 TPanel qui sert de container aux TPanels et TLabels créés dynamiquement et qui ne sont donc pas pris en compte, lol !

    Il m'aura suffi de rajouter pnlContainer. à ComponentCount et d'inverser l'ordre de destruction pour que cette partie baigne dans l'huile :
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
    begin
      showmessage('pnlContainer.componentCount : '+inttostr(pnlContainer.ComponentCount));
      // d'abord détruire les TLabels -- après tests, ce n'est pas nécessaire : contenus dans les TPanels, ils sont détruits à la destruction des TPanels
      {for i := pnlContainer.ComponentCount-1 downto 0 do
        if (pnlContainer.Components[i] is TLabel) then begin
          TLabel(pnlContainer.Components[i] as TLabel).Free;
        end;                           }
      // puis les TPanels
      for i := pnlContainer.ComponentCount-1 downto 0 do
        if (pnlContainer.Components[i] is TPanel) then
          if Copy((pnlContainer.Components[i] as TPanel).Name, 1, 7) = 'pnl4img' then begin
            TPanel(pnlContainer.Components[i] as TPanel).Free;
          end;
      Form1.Update;
    end;
    Il me reste la non-entrée en mode pas-à-pas sur les bras. Pour en avoir le cœur net, je rajoute un Button2 et juste ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button2Click(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to 2 do begin  // F5 sur cette ligne
        ShowMessage(inttostr(i));
        Edit1.Text:=inttostr(i);
      end;
    end;
    et au clic sur le bouton je n'entre pas en débogage ! Pourtant, toutes les options du projet sont correctes de ce côté-là. Je dois en louper une, mais laquelle ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Bonjour,

    je clique malgré l'entrée en débogage qui ne fonctionne toujours pas, mais comme ce n'est pas le titre de la discussion, au besoin j'en ouvrirai une dédiée à ce problème.
    EDIT : je l'avais complètement oubliée, mais c'est encore cette vieille histoire d'un paramètre qu'il faut basculer à True dans Menu Outils / Options... / Débogueur / Général / DisableLoadSymbolsForLibraries.
    Me souviens jamais si ça change tout seul ou si c'est autre chose.
    /EDIT

    Mais pour l'heure j'ai un autre souci pas piqué des vers…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut pourquoi ne pas utiliser l'évènement OnCloseQuery de la form pour faire le ménage juste avant la fermeture de ta fiche ?
    • "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

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Salut,

    Citation Envoyé par BeanzMaster Voir le message
    Salut pourquoi ne pas utiliser l'évènement OnCloseQuery de la form pour faire le ménage juste avant la fermeture de ta fiche ?
    Parce que ça n'aurait pas changé le nettoyage des objets qui ont besoin d'être nettoyés.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Hello
    Citation Envoyé par Jipété Voir le message
    Salut,



    Parce que ça n'aurait pas changé le nettoyage des objets qui ont besoin d'être nettoyés.
    Je ne comprend pas pourquoi ? Car le onCloseQuery intervient avant la fermeture de te fenêtre ou application. Tu peux en dire plus ?
    Sinon pour l'application tu as l'évènement onDestroy aussi. Qui lui intervient après la fermeture de ta fenêtre.

    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

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Yep !
    Citation Envoyé par BeanzMaster Voir le message
    Je ne comprend pas pourquoi ? Car le onCloseQuery intervient avant la fermeture de te fenêtre ou application. Tu peux en dire plus ?
    Sinon pour l'application tu as l'évènement onDestroy aussi. Qui lui intervient après la fermeture de ta fenêtre.
    Bah, mon application est suffisamment simple pour que je n'aie pas à me prendre la tête avec plein d'options de tous les côtés, qui vont m'embrouiller la tête.
    Comme on dit sous Linux, K.I.S.S. !

    En d'autres termes, je crée des objets dans FormCreate, je les libère dans FormClose et basta ! Sauf pour les enfants, petits-enfants et plus bas encore de certains objets qui, eux, seront libérés par la libération de leur ancêtre.

    Et à ce jour ça fonctionne bien.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. VBA SQL Update avec DSum problème de quote dans mon code
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/07/2017, 17h39
  2. [PDO] UPDATE ne fonctionne pas dans mon code PHP
    Par Daethe dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 01/06/2015, 17h02
  3. Réponses: 3
    Dernier message: 27/10/2007, 11h33
  4. [MySQL] Fonction UPDATE dans le cas où il UPDATE rien
    Par Henry9 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 25/07/2007, 10h21
  5. [Forms] Update d'un bloc basé
    Par zeuss dans le forum Forms
    Réponses: 14
    Dernier message: 02/02/2005, 12h18

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