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 :

Les frames, le parent pauvre de Lazarus sous Windows [Lazarus]


Sujet :

Lazarus Pascal

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Merci les copains.

    Cependant, deux mots d'explication (après m'être relevé, car je suis tombé par terre en lisant vos posts) :
    je suis bêtement parti des explications du wiki où on voit bien que la ligne que tu veux me faire supprimer, Thierry, vient de là.

    Et pourquoi j'ai "inventé" la déclaration de la variable dans l'unité de la Frame ?
    parce que sinon, la mainform ne connait pas la procédure déclarée (même en "public") dans l'unité de la frame que j'aimerais voir appelée par le timer ;
    et j'ai suivi ce chemin parce qu'après, l'autocomplétion le valide !

    C'est quand même bizarre qu'il faille que je supprime une ligne présente dans le tuto et que je rajoute cette "var" absente lors de la création de l'unité (à la différence de la création d'une form) alors que l'inverse ne fonctionne pas.

    Enfin, si, il existe une manière de faire fonctionner tout ça tout en restant conforme au tuto : c'est d'envoyer un message à la frame pour lui faire appeler la procédure plutôt que de vouloir l'appeler directement !
    Dans la form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure Tmainform.MainTimerTimer(Sender: TObject);
    begin
      if mainform.Visible then
      begin
        MainTimer.Enabled := False;
    //    frmFrame1.Frame1Frm.TestStringlist;
    //    frmFrame1.TestStringlist;
        Frame1Frm.Perform(LM_FROMOFFICE, 1, 0); // +1 ! /!\
        MainTimer.Enabled := True;
      end;
    end;
    et dans la frame (où j'ai commenté la ligne "var Frame1Frm: TFrame1Frm;") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFrame1Frm.ReceptionDeMessages(var Msg: TLMessage);
    begin
      with TLMessage(Msg) do
        if (WParam = 1) then TestStringlist;
    end;
    et là ça baigne aussi.

    Je me suis (et je vous ai) bien pris la tête avec ces histoires de messages il y a qq jours mais, comme on dit, tout sert à tout, dans la vie
    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. #22
    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 884
    Points
    1 884
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Et pourquoi j'ai "inventé" la déclaration de la variable dans l'unité de la Frame ?
    parce que sinon, la mainform ne connait pas la procédure déclarée (même en "public") dans l'unité de la frame que j'aimerais voir appelée par le timer ;
    Non, il n'était pas nécessaire de créer une variable dans l'unité de la frame.
    Il te suffit de déclarer une variable dans l'unité de mainform, mais dans la section implémentation, puisque c'est dans celle-ci qu'on trouve le uses frmFrame1.
    Et bien sûr, supprimer la ligne Frame1Frm: TFrame dans la section private de TMainForm.

    Au total : une seule variable Frame1Frm, soit dans l'unité du frame, soit dans mainform.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Au total : une seule variable Frame1Frm, soit dans l'unité du frame, soit dans mainform.
    et donc, si dans mainform, soit dans la partie Private si on veut rester en phase avec le tuto (et il faudra utiliser les messages), soit dans la partie Implementation (adieu le tuto) et on pourra appeler les méthodes publiques de la frame.
    J'ai tout bon ?

    Mais comment je choisis ? Quelle est la meilleure pratique ? La meilleure manière de coder ?
    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. #24
    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 884
    Points
    1 884
    Par défaut
    Si tu veux rester en phase avec le tuto (déclarer Frame1Frm: TFrame dans la section private de mainform) :
    tu peux accéder aux méthodes publiques par transtypage :

    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
    procedure Tmainform.FormCreate(Sender: TObject);
    begin
       if not Assigned(Frame1Frm) then
          Frame1Frm := TFrame1Frm.Create(Self);
      Frame1Frm.Parent := TabSheet1;
      maintimer.enabled:= true;
    end;
     
    procedure Tmainform.MainTimerTimer(Sender: TObject);
    begin
      if mainform.Visible then
      begin
        MainTimer.Enabled := False;
        TFrame1Frm(Frame1Frm).TestStringlist; // transtypage
        MainTimer.Enabled := True;
      end;
    end;
    Quelle est la meilleure pratique ? Peut-être celle-ci ? En tous cas, j'éviterais au maximum l'utilisation de messages.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Si tu veux rester en phase avec le tuto (déclarer Frame1Frm: TFrame dans la section private de mainform) :
    tu peux accéder aux méthodes publiques par transtypage
    Hé ben voilà !
    C'était ça l'info qui me manquait, bien joué !

    Citation Envoyé par ThWilliam Voir le message
    En tous cas, j'éviterais au maximum l'utilisation de messages.
    Pourquoi ?
    (Tu sais qu'avec moi faut tout expliquer, svp , car j'ai besoin de comprendre !)
    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

  6. #26
    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 884
    Points
    1 884
    Par défaut
    Je ne parlais pas des messages en général (dans certain cas, ils sont incontournables).
    Mais ici, pourquoi communiquer avec le frame par message, alors que tu peux avoir accès direct non seulement aux procédures publiques, mais aussi aux composants et variables publiques du frame ?

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Vu, compris, merci.

    Mais c'est la tournure de ta phrase d'origine qui m'a fait peur ; si tu avais simplement dit "pas besoin d'utiliser les messages", je pense que je me serais moins inquiété.

    Merci pour tout, allez, j'y retourne...
    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

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

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

    (Cent fois sur le métier remets-toi à l'ouvrage, qu'il disait...)
    Citation Envoyé par ThWilliam Voir le message
    Si tu veux rester en phase avec le tuto (déclarer Frame1Frm: TFrame dans la section private de mainform) :
    tu peux accéder aux méthodes publiques par transtypage
    Puis-je revenir deux minutes sur cette histoire de transtypage ?

    Car autant je le comprends quand il s'agit d'accorder des variables de types différents (http://pascal.developpez.com/faqtemp...#LGTranstypage), autant ici je ne vois pas : je n'arrive pas à mettre des mots pour dire en une phrase bien française avec sujet verbe et complément ce qui se cache sous TFrame1Frm(Frame1Frm).TestStringlist; dans la mesure où Frame1Frm est connu de la Form, sinon la création de la Frame dans FormCreate ne passerait pas la compil...

    Je rappelle que si j'enlève le transtypage sans rien toucher d'autre, le message d'erreur est Error: identifier idents no member "TestStringlist" sur la ligne Frame1Frm.TestStringlist; dans la proc du Timer de la Form, avec le curseur clignotant entre le point et le T.

    Merci de vos lumineuses explications, car j'ai quand même fait des recherches avant de poster cette dernière question, et partout on me parle de conversion de type, mais surtout avec les nombres (ou les string).
    Ou alors, l'explication est là : http://fbeaulieu.developpez.com/guide/?page=page_11, tout à la fin de la page :
    Les transtypages sont surtout utilisés avec les composants qui permettent d'adjoindre aux éléments contenus un ou des pointeurs. Ces pointeurs sont toujours de type "pointer", ce qui les rend impossibles à utiliser directement pour pointer quelque chose. Il faudra transtyper ces pointeurs en un type pointeur déclaré pour pouvoir accèder aux éléments pointés par le pointeur.
    Ouch !
    Faut lire ça plusieurs fois, !

    Ce qui est ennuyeux (pour moi), c'est la phrase suivante : "Pour des exemples de transtypages, referrez-vous au (futur) chapitre sur les types abstraits de données, qui regorgera d'exemples et expliquera concrètement le transtypage des pointeurs."
    Le lien vers le chapitre en question se trouve juste dessous, j'y suis allé voir (c'est dément ), j'ai fait une recherche sur le mot "transtypage", résultat : rien !

    D'où *cette* question...
    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

  9. #29
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    effectivement à la page suivante il ne parle pas explicitement de transtypage mais plutôt d’héritage en fin de page
    disons qu'il faut prendre le transtypage comme une réaffectation de type sur un pointer
    un objet est une pointer déguisé .

    dans ton cas le transtypage me parais un peu inhabituel
    si ton objet a le même type que la class et que ta methode est public normalement tu devrais pouvoir y accéder sans soucis
    le pb c'est qu'il nous est difficile de répondre sans avoir un exemple concret
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Salut,
    Citation Envoyé par anapurna Voir le message
    le pb c'est qu'il nous est difficile de répondre sans avoir un exemple concret
    Y a qu'à demander : zip4forum.zip

    Tout est dans la procédure Timer de la Mainform.
    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

  11. #31
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    bon bin la reponse est donc simple tu declare un Tframe dans ta fenetre principale
    celui-ci ne connais pas TFrame1Frm vu que 'c'est l'ancetre et donc n'as pas de methode TestStringlist


    pour bien faire tu aurais pu declarer ton unité (frmFrame1) dans la parti interface de l'unité main



    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
    uses ..., frmFrame1;
    
    type
    
      { Tmainform }
    
      Tmainform = class(TForm)
       ....
       private
        { private declarations }
        Frame1Frm: TFrame1Frm;
      public
        { public declarations }
      end;
    
    var
      mainform: Tmainform;
    de cette manière tu n'aurais pas eu a transtyper

    la façon dont tu l'a programmer il faut bien forcer le programme a comprendre que la variable de type tFrame est en faites de type TFrame1Frm
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par anapurna Voir le message
    pour bien faire tu aurais pu déclarer ton unité (frmFrame1) dans la partie interface de l'unité main
    Et oui, mais ce n'est pas ce qui est dans le wiki...

    Merci pour les précisions. J'ai capté (enfin ! diront certains ), merci pour tout.
    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

  13. #33
    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 884
    Points
    1 884
    Par défaut
    Salut JP,

    "ce n'est pas ce qui est dans le wiki".

    Non, pcq dans l'exemple, la variable Frame (de type TFrame) sert pour plusieurs types de frames (TFrame1, TFrame2...) ; d'où l'obligation de faire pointer Frame sur la classe ancêtre.
    Dans ce cas, pour accéder à la classe descendante, il faut transtyper.
    C'est tout de même vachement plus simple de pointer directement sur la bonne classe.

    Dans ce lien, jette un oeil sur la section "Polymorphisme d'objet explicite par transtypage". Non, non, ce n'est pas de la philo
    http://rmdiscala.developpez.com/cour...ml#transtypage

    Amicalement
    Thierry

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    "ce n'est pas ce qui est dans le wiki".

    Non, pcq dans l'exemple, la variable Frame (de type TFrame) sert pour plusieurs types de frames (TFrame1, TFrame2...) ; d'où l'obligation de faire pointer Frame sur la classe ancêtre.
    Dans ce cas, pour accéder à la classe descendante, il faut transtyper.
    C'est tout de même vachement plus simple de pointer directement sur la bonne classe.
    Oki Oki, mais quand on ne sait pas, ben, on commence par le wiki, pi quand il nous met dans le mur on va voir les copains sur le forum... That's life !

    Citation Envoyé par ThWilliam Voir le message
    Dans ce lien, jette un oeil sur la section "Polymorphisme d'objet explicite par transtypage". Non, non, ce n'est pas de la philo
    http://rmdiscala.developpez.com/cour...ml#transtypage
    T'as pas vu passer mon tube d'aspirine ?


    Bon week-end, merci encore !
    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

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

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

    Cette histoire est un cauchemar...

    Je vous ai foutu la paix pendant 6 jours, j'avais appliqué les recommandations d'Anapurna, tout fonctionnait bien (accès depuis la mainForm à des machins déclarés "public" dans les frames) jusqu'à ce que je veuille appliquer la dernière optimisation, qui consistait à passer la lecture d'un fichier .ini dans un bête module commun à toutes les frames.

    On reprend du début :
    • une fiche principale, qui gère le Timer et le PageControl ;
    • quatre frames secondaires qui s'affichent dans les 4 pages du PageControl ;
    • total 5 fichiers .pas + un 6e pour ce module.pas commun à tout le monde.

    Je déclare partout de la même manière dans la partie "interface", en "uses" les fichiers .pas, et dans le module, en var, je rajoute le nom des frames.

    La complétion est OK, tout compile, mais à l'exécution, lorsque le module veut remplir un champ d'une frame avec une bête string lue depuis le .ini, vous l'avez compris c'est AV

    - Si je remplace ce champ par une string ça passe, donc le problème n'est pas lié à la lecture de l'ini mais bien à l'affectation de la string lue dans l'ini au champ de la frame, qui est pourtant bien déclaré "public" et devrait être présent et vivant puisque je fais la lecture de l'ini une fois tous les Create terminés (j'utilise le Timer pour ça -- certains diront que c'est "crade" mais il n'y a pas moyen de faire autrement).

    - Si je supprime dans le Timer (dans la mainForm, donc) la lecture de l'ini et que je la remplace par une assignation d'une string remplie "à la main" au champ en question, bien sûr ça fonctionne, ce qui me fait conclure que c'est le module qui n'arrive pas à trouver le champ...

    Et si je transtype à la manière de ThWilliam, ça crashe tout autant.

    Un cauchemar, je vous dis...

    Si certains veulent tester, il suffit de repartir du .zip que j'ai proposé le 4, de rajouter 1 ligne à la frame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      public
        { public declarations }
        FTestForModule: string;
    et d'en modifier 1 dans la proc TestStringlist en y ajoutant le fameux champ : label1.Caption:=slTest[0] + ' ' + FTestForModule;,
    de modifier le main en rajoutant 1 ligne "en haut" :
    de modifier le private :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      private
        { private declarations }
        //Frame1Frm: TFrame;
        Frame1Frm: TFrame1Frm;
    de modifier "en bas" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    uses
      //frmFrame1;
      module;
    et de bricoler dans le Timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        MainTimer.Enabled := False;
        SetupChampInModule; // l'appel qui tue !
        //TFrame1Frm(Frame1Frm).TestStringlist; // transtypage OK
        Frame1Frm.TestStringlist; // OK après modif dans private
    //    Frame1Frm.FTestForModule := 'test_in_Timer'; // OK, juste pour tester l'accès au champ
        MainTimer.Enabled := True;
    et enfin le module.pas complet :
    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
    unit module;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, frmFrame1;
     
    var
      Frame1Frm: TFrame1Frm;
     
    procedure SetupChampInModule;
     
    implementation
     
    procedure SetupChampInModule;
    begin
      Frame1Frm.FTestForModule:='test_in_Module';
    end;
     
    end.
    Si quelqu'un a une idée parce que là, moi je suis sec (à force de )...
    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

  16. #36
    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 884
    Points
    1 884
    Par défaut
    Salut JP,

    De nouveau, tu as deux variables Frame1Frm :
    - en private dans l'unité de la fiche
    - en public dans l'unité module.

    Et l'unité de la fiche utilise l'unité module !!!
    Cela crée une énorme confusion sur l'instance créée.

    Si tu fais une unité module, c'est j'imagine pour piloter ton frame.
    Donc supprime la variable dans l'unité main.
    Et dans main, utilise module pour communiquer avec ton frame.

    Cordialement
    Thierry

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Si tu fais une unité module, c'est j'imagine pour piloter ton frame.
    Donc supprime la variable dans l'unité main.
    Et dans main, utilise module pour communiquer avec ton frame.


    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.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Son dans les frames
    Par mr.t dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 03/01/2005, 16h29
  2. [Débutant] Dialogue Java entre les frames pour client HTML
    Par Carrel dans le forum Général Java
    Réponses: 4
    Dernier message: 03/06/2004, 10h39
  3. Les interruptions sous Windows et Linux
    Par Descartes dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 07/06/2003, 22h42
  4. Utiliser les frames
    Par laury dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/05/2003, 10h14

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