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. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut Les frames, le parent pauvre de Lazarus sous Windows
    Les frames c'est une brave s4l0p3r1e sous Windows, ou alors il y a encore un machin bien planqué dans un coin très sombre...

    Salut,
    d'habitude c'est sous Linux que je misère, avec des trucs pas finis et qui fonctionnent bien sous Windows (la Listview...), et là, c'est l'inverse.

    J'avais déjà noté ça il y a qq jours :
    En design dans l'inspecteur d'objets, impossible de lui changer la couleur de fond ! Obligé d'utiliser un TPanel alClient pour faire la différence entre la frame et la form sur laquelle elle est posée...
    Et ce panel avec ParentColor à True prend bien la couleur définie pour la frame, que cette bécasse n'est pas fichue de peindre !

    Aujourd'hui je vous rajoute une image dans laquelle on voit qu'il y a également un problème de couleur de la police de certains objets...

    Nom : post_frame.jpg
Affichages : 692
Taille : 58,1 Ko

    À gauche sous Linux la partie intéressante de la form d'un projet de test avec 0 ligne de code, en bleu la frame, en crème la form qui l'héberge.

    À droite l'inspecteur d'objets (dans une machine virtuelle XP SP2) dans lequel on voit bien que j'ai demandé du rouge pour le texte des objets, couleur présente sous Linux et remplacée par du bleu sous XP, en design (en bas) comme en runtime (en haut).
    Dans un autre projet j'ai forcé au runtime la couleur à rouge et le parent à false sans aucun effet !, alors que d'autres paramètres [taille, position, par ex.] fonctionnent...
    Notez bien que la frame n'est pas peinte en clSkyBlue

    C'est quand qu'on a un système vraiment opérationnel ?

    Parce que là, le design de mon projet est complètement à la rue et je ne vois pas comment le rattraper
    Vous trouvez ça lisible, vous ? :
    Nom : objects_color_in_frame.png
Affichages : 526
Taille : 1,0 Ko

    Un zip avec ce qu'il faut pour comparer avec des vraies machines, des fois que ça soit un souci lié à la virtualisation (mais un Linux virtualisé avec la même version de Lazarus [1.6rc1] ne présente pas ce défaut) : publish4forum.zip
    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
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    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 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut,

    Probleme de theme sous windows a priori

    probleme identifié
    Ici
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par anapurna Voir le message
    Probleme de theme sous windows a priori

    probleme identifié
    Ici
    Merci pour ce premier retour, mais pas sûr que ça corresponde à mon problème, car je lis dans la page de ton lien :
    Description | The change of Font.Color does not affect the color of the caption of the groupbox at design-time.

    Additional Information | The compiled and started Program shows the right color of the groupbox's caption.
    La 1re ligne correspond mais on s'en fiche.
    La 2de ligne ne correspond pas, par contre : j'ai mis en gras ce qui coince.

    et dans les notes du bas de page,
    Changing color of a themed groupbox is not possible (unless you customdraw it)
    Or je n'applique pas les thèmes...
    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
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Bonsoir Jipété,

    Bon, là, tu exagères un peu pour les polices . Avant d'accuser les pauvres frames qui ne t'ont rien fait, il faudrait peut-être faire d'autres tests :
    1. vérifier que TGroupbox, même sans frame, modifie facilement sa couleur de caption sous Windows. La réponse est non. La couleur fournie par font.color définit par défaut la couleur de la police des enfants du container (à condition que leur ParentFont soit à True, bien sûr), pas celle de caption.
    2. vérifier que ce comportement est propre à Lazarus. La réponse est encore non. J'ai fait l'expérience avec Delphi Berlin 10.1 : la couleur de caption ne change pas non plus.
    Moralité : comme l'a écrit anapurna, c'est probablement un problème de thème : la solution serait de redessiner le container. En tout cas, pas un problème directement lié à TFrame !
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Bonsoir,

    Citation Envoyé par Jipété Voir le message
    Or je n'applique pas les thèmes...
    J'ai honte, mais alors là mon Dieu si je pouvais aller me cacher dans un trou de souris, tout de suite j'y irais, j'en peux plus de m'être foutu dedans à ce point-là, car, oui, sans le savoir j'avais un XP avec thèmes, ou plutôt j'utilisais les thèmes sans le savoir car ils ne portent pas ce nom...



    Pour moi, les thèmes c'était une espèce de customisation rajoutée, je ne pensais pas que la machine s'installait de base avec ça, je pensais qu'on me demanderait mon avis, enfin bon, je sens que je ne reviens pas avant 6 mois tellement je ne vais plus oser me montrer.

    À ma décharge, quand on regarde cette image, on ne voit pas le mot "thèmes" dans les options de personnalisation d'affichage, quelle bande de blaireaux à Redmond !
    Nom : sans_thème.png
Affichages : 529
Taille : 67,2 Ko
    Et quand je passe en "Windows classique" l'affichage redevient correct, normal, décent, quoi.

    Question subsidiaire : comment faire pour que le programme s'exécute correctement dans une autre machine sans obliger l'utilisateur à aller trifouiller dans les options d'affichage ? Car ce que l'on voit maintenant bien sur mon image ci-dessus est toujours foireux dans une machine "avec thèmes"...
    EDIT : j'ai trouvé : menu Projet / Options du projet / Page Application, il suffisait de décocher ça :
    Nom : thèmes.png
Affichages : 689
Taille : 992 octets

    Merci, Gilles, merci d'avoir insisté, et merci de supporter mon sale caractère.
    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. #6
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ... enfin bon, je sens que je ne reviens pas avant 6 mois tellement je ne vais plus oser me montrer.
    Mais non, Jipété ! Les erreurs font plus avancer qu'on ne l'imagine et obligent à mieux tester des outils qu'on croit connaître (je parle pour moi) .
    Quant à ton caractère, il t'appartient et tu ne serais plus vraiment toi-même s'il était bridé : tu ne t'es jamais montré blessant ou injurieux, donc, à bientôt ici !
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  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
    Bonjour j'arrive un peu après la bataille sinon autre solution sur laquelle je suis tombé http://stackoverflow.com/questions/7...n-color-change mais ça fait du travail en plus pour pas grand chose. Sous Windows 10 en décochant l'utilisation du "manifest" aucun problèmes.

    Bonne fin de journée
    • "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 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Bonjour j'arrive un peu après la bataille sinon autre solution sur laquelle je suis tombé http://stackoverflow.com/questions/7...n-color-change mais ça fait du travail en plus pour pas grand chose.
    En effet, car oui, j'ai regardé le lien, vu le nombre de lignes je préfère nettement la méthode du simple clic dans les options du projet

    Citation Envoyé par BeanzMaster Voir le message
    Sous Windows 10 en décochant l'utilisation du "manifest" aucun problème.
    Merci pour le retour, au moins ça fait un point sur lequel on peut s'appuyer.

    Parce qu'il y a des fois, on se demande dans quel monde on vit...

    Faut que je vous raconte, d'autant plus que c'est encore une histoire de frames mais à l'envers cette fois : elles deviennent le parent riche, truc de malade.

    Je suis sur un projet de traitement des couleurs pour mon fils, qui se base sur trois onglets de traficotage de pixels et ce genre de choses, chaque onglet embarquant une frame pleine de composants (TPanel TTrackbar, etc.) sauf un, très simple et pratiquement sans interaction avec les autres, un simple colorpicker.
    Tout fonctionne bien.
    Je décide de dériver vers un nouveau projet un colorpicker stand-alone à partir de l'onglet qui l'héberge, j'élague tout ce qui ne sert pas et j'ai un colorpicker indépendant, très bien.

    Très bien sous Linux, très bien sous XP avec ou sans la case "manifest" cochée, et catastrophe sous Seven qui ne veut absolument pas reconnaître la couleur sous la souris...
    Alors que, je le redis : ça fonctionne très bien en mode "Frame hébergée par un onglet de PageControl"...

    J'ai passé la journée dessus et je ne m'en suis pas sorti : Seven a gagné, il ne veut pas travailler en mode simple et light, un vrai truc de fou...

    Tiens, d'ailleurs, j'ai récupéré ça chez SO que je viens de tester, un code de colorpicker encore plus light que mon light, juste un label, un panel et un timer (dont j'ai réglé l'interval à 300) :
    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
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      Windows,
      ExtCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Label1: TLabel;
        Panel1: TPanel;
        UpdateTimer: TTimer;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure UpdateTimerTimer(Sender: TObject);
      private
        { private declarations }
        DesktopDC: HDC;
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.UpdateTimerTimer(Sender: TObject);
    var
      CursorPos: TPoint;
    begin
      if GetCursorPos(CursorPos) then
      begin
        Label1.Caption := 'Cursor pos: [' + IntToStr(CursorPos.x) + ', ' +
          IntToStr(CursorPos.y) + ']';
        Panel1.Color := GetPixel(DesktopDC, CursorPos.x, CursorPos.y);
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DesktopDC := GetDC(0);
      if (DesktopDC <> 0) then
        UpdateTimer.Enabled := True;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      ReleaseDC(GetDesktopWindow, DesktopDC);
    end;
     
    end.
    Je le poste pour que vous testiez pour me dire de quoi il retourne chez vous parce que chez moi Seven refuse... Ah, j'ai oublié de préciser que c'était un Seven virtualisé. Mais le XP en machine virtuelle fonctionne tip-top, alors bon.
    Et le colorpicker bien blotti dans sa frame qui se repose dans son onglet fonctionne bien aussi, en virtuel.
    Un truc de malade, je vous dis

    Allez zou, ce soir je suis épuisé : des journées comme ça c'est vraiment tuant !
    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. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Bonsoir,

    Citation Envoyé par Jipété Voir le message
    EDIT : j'ai trouvé : menu Projet / Options du projet / Page Application, il suffisait de décocher ça :
    Nom : thèmes.png
Affichages : 689
Taille : 992 octets
    Sans manifest comment fait-on pour définir le niveau d'exécution ou activer le "DPI Awareness"?
    Sans le premier W10 risque de vous em...er à chaque exécution et le deuxième permet avec des routines ad'hoc de redimensionner correctement caractères et composants en fonction de la résolution de l'écran, évitant l'aspect baveux du DPI Aware.

    André

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par alanglet Voir le message
    Sans manifest comment fait-on pour définir le niveau d'exécution ou activer le "DPI Awareness"?
    Sans le premier W10 risque de vous em...er à chaque exécution et le deuxième permet avec des routines ad'hoc de redimensionner correctement caractères et composants en fonction de la résolution de l'écran, évitant l'aspect baveux du DPI Aware.
    Donc j'ai le choix entre un aspect baveux (case décochée) ou des objets aux couleurs complètement à la ramasse (case cochée)... En gros, l'épée ou le poison ? Difficile de choisir, en effet.

    Bah, on verra bien ce que mon fils en pense, puisque c'est pour lui. En ce qui me concerne, sous Linux aucun problème

    EDIT : tiens, je me suis fendu d'un montage comparatif, en haut avec la case cochée et dessous décochée :
    Nom : compar_avec_sans_manifest.jpg
Affichages : 641
Taille : 38,9 Ko

    Le gros machin noir en haut au milieu c'est une toolbar avec deux boutons, une horreur...

    Et pour autant que je me rappelle, au début du projet, impossible d'avoir un fond foncé, qui est quand même plus agréable quand on bosse la couleur. Alors oui, j'aurais pu mettre des panneaux colorés sous les composants de groupage mais je crois bien qu'ils n'en deviennent pas transparents pour autant
    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. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Je me cite, juste pour vous confirmer que même avec l'esprit clair et lucide du petit matin, ce problème bizarre est bien présent, mais j'ai une information complémentaire !
    Citation Envoyé par Jipété Voir le message
    Je le poste pour que vous testiez pour me dire de quoi il retourne chez vous parce que chez moi Seven refuse... Ah, j'ai oublié de préciser que c'était un Seven virtualisé. Mais le XP en machine virtuelle fonctionne tip-top, alors bon.
    Et le colorpicker bien blotti dans sa frame qui se repose dans son onglet fonctionne bien aussi, en virtuel.
    Un truc de malade, je vous dis
    Il semblerait (toujours parler au conditionnel dans le monde Windows) que le problème se manifeste au bout d'un certain temps. Scénario : je lance mon prog et il fonctionne (ouf ! Je ne suis pas fou ), au bout d'un moment (sur quels critères ? Nul ne le sait...), sans rien demander, je vois apparaître le nouveau petit sablier en forme de cercle tournant et là c'est mort, plus qu'à arrêter mon prog et le relancer...

    Je l'ai entre autre constaté à l'apparition de fenêtres de l'anti-virus, mais il y a peut-être aussi des tâches en background, bref, je ne suis pas là pour débugguer Seven, mais juste pour vous dire que le fonctionnement aléatoire d'un programme informatique est une chose normale, à notre époque...

    Bonne journée,
    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

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

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

    J'ai un outil qui a été commencé avec Delphi3 sous Windows95 en 1996, qui m'a toujours donné satisfaction et qui a évolué, peu ou prou, au fil du temps, jusqu'à arriver (depuis trois ans) à une migration sous Linux et Lazarus, et ça fonctionne.

    Mais c'est lourd à maintenir, près de 2000 lignes, un PageControl avec 4 onglets bien remplis, je décide donc, fort de mon expérience d'une migration identique la semaine dernière, de migrer cet outil vers une construction plus modulaire à base de frames et là, aïe aïe aïe...

    J'essaye de vous la faire courte : j'ai une TStringList créée au FormCreate et utilisée par un Timer qui appelle une procédure toutes les secondes, qui commence par maSL.Clear; et ça fonctionne comme ça depuis 20 ans.
    En passant en "mode Frames", je déplace le Create dans le FrameCreate, en mode pas-à-pas je passe bien sur l'instruction de création de la StringList, et ensuite le Timer, appelant la procédure prévue pour, va rencontrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maSL.Clear; // --> AV !
    Ah ! Essayons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if maSL.Count > 0 then // AV !
      maSL.Clear;
    Bon, c'est la guerre on dirait... Montons en puissance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if Assigned(maSL) then // AV !
      if maSL.Count > 0 then
        maSL.Clear;
    Drapeau blanc j'ai perdu...

    Et je précise que j'ai bien vérifié en pas-à-pas que je ne passe pas dans le FrameDestroy où je nettoie mes créations.

    Donc pour moi la StringList est valide, une fois créée, mais non, en fait.

    Que faire ? Pas la moindre idée, car ce que je vis là va à l'encontre de tout ce que j'ai appris depuis 20 ans...

    Une précision hallucinante (pour moi) : dans le FrameCreate j'ai deux lignes et j'en ai rajouté une troisième, histoire d'être sûr de sa conformité (le temps que je perds en tests à la c0n comme ça, même pas je vous raconte...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    maSL := TStringList.Create;
    maSL.Sorted := True;
    maSL.Clear; // l'instruction maudite, sans problème ici
    et ces lignes s'exécutent sans l'ombre d'un AV.
    Alors que se passe-t-il entre la création de la Stringlist et son utilisation une seconde plus tard ? Elle a disparu dans une faille spatio-temporelle ? Y en a un peu marre, quoi...
    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. #13
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Jipété Voir le message
    En passant en "mode Frames", je déplace le Create dans le FrameCreate, en mode pas-à-pas je passe bien sur l'instruction de création de la StringList, et ensuite le Timer, appelant la procédure prévue pour, va rencontrer
    Bonjour Jipété,

    Qu'appelles-tu FrameCreate ? En aucun cas, cette méthode ne peut équivaloir au constructeur Create si elle n'est pas elle-même un constructeur et si elle n'initialise pas les variables dont elle a besoin. Je serais donc curieux de voir sa déclaration et son implémentation.
    Je n'utilise pas les frames couramment, mais je crois me souvenir que les frames n'ayant pas d'événements OnCreate et OnDestroy, il faut surcharger le constructeur et le destructeur pour initialiser et détruire les variables privées. Ceci était vrai dans Delphi.

    De toute façon, ce serait bien d'avoir un mini-projet à tester, uniquement centré sur ce problème, non ?

    Cordialement,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Salut, Gilles,
    Citation Envoyé par gvasseur58 Voir le message
    Je n'utilise pas les frames couramment, mais je crois me souvenir que les frames n'ayant pas d'événements OnCreate et OnDestroy, il faut surcharger le constructeur et le destructeur pour initialiser et détruire les variables privées. Ceci était vrai dans Delphi.
    C'est tout à fait ça et très bien documenté partout sur le Web, un exemple au hasard. (et ça fonctionne très bien dans mon premier projet d'il y a qq jours.)
    C'est donc ce que j'ai mis en place et c'est dans ce FrameCreate que j'ai créé ma StringList. Que dire de plus ?

    Citation Envoyé par gvasseur58 Voir le message
    De toute façon, ce serait bien d'avoir un mini-projet à tester, uniquement centré sur ce problème, non ?
    Là maintenant tout de suite, ça va être un peu tendu...
    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. #15
    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, humm ça sent le "bug" d'adressage comme dans l'exemple de JC. T'as essayé de vérifié avec "addr" comme l'avait fait ThWilliam cf http://www.developpez.net/forums/d16...e/#post8780002 ?
    • "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

  16. #16
    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.

    Toi et tes frames !

    Ce code ne provoque chez moi aucune erreur :


    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
    // dans l'unité de TFrame1
     
    constructor TFrame1.Create(TheOwner: TComponent); // override du constructeur
    begin
      inherited Create(TheOwner);
      myList:= TStringList.Create;
      timer1.enabled:= true; // false dans l'EDI
    end;
     
    destructor TFrame1.Destroy; // override du destructeur
    begin
       MyList.Free;
       inherited Destroy;
    end;
     
    procedure TFrame1.Timer1Timer(Sender: TObject);
    begin
       myList.Add(DateTimeToStr(Now));
    end; 
     
    // dans Form1 :
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       Frame1:= TFrame1.Create(self);
       Frame1.Parent:= self;
    end;
    Ton frame est-il correctement créé ?
    Le timer est-il créé sur le frame ?
    Quand devient-il actif ?

    Par précaution, je désactiverais le timer le temps d'exécuter tout le traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFrame1.Timer1Timer(Sender: TObject);
    begin
       Timer1.Enabled:= false;
       //...
       Timer1.Enabled:= true;
    end;
    Amicalement
    Thierry

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Salut Thierry, salut les autres,
    Citation Envoyé par ThWilliam Voir le message
    Toi et tes frames !
    Vi, mais si ça voulait bien fonctionner correctement du premier coup, ça serait un tel bonheur...


    Citation Envoyé par ThWilliam Voir le message
    Ton frame est-il correctement créé ?
    Qu'est-ce que j'en sais ? Je peux juste le supposer, mais une chose est sure, en pas-à-pas je passe bien dans le FrameCreate.

    Citation Envoyé par ThWilliam Voir le message
    Le timer est-il créé sur le frame ?
    Ah bah, nan, pas d'bol, le timer fait partie de la mainform car il est utilisé par une autre frame : dispatch avec un Case of en fonction du tabsheet affiché.

    Citation Envoyé par ThWilliam Voir le message
    Quand devient-il actif ?
    À la fin du FormCreate, et avec un intervalle d'une seconde.

    Citation Envoyé par ThWilliam Voir le message
    Par précaution, je désactiverais le timer le temps d'exécuter tout le traitement :
    C'est ce que je fais toujours en entrée de la proc du timer, avec réactivation juste avant le end;.

    Citation Envoyé par BeanzMaster Voir le message
    Salut, humm ça sent le "bug" d'adressage comme dans l'exemple de JC. T'as essayé de vérifier avec "addr" comme l'avait fait ThWilliam cf http://www.developpez.net/forums/d16...e/#post8779924 ?
    C'est la première fois que j'utilise cette manière de débugguer, alors ai-je bien fait ? J'ai rajouté 2 lignes après la création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      slTest := TStringList.Create;
      a := addr(slTest);
      showmessage(inttostr(integer(a))); // -1224679148
    et deux lignes avant l'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      a := addr(slTest);
      showmessage(inttostr(integer(a))); // 868
      if Assigned(slTest) then ...
    Dans les deux procédures
    Les commentaires indiquent le contenu des ShowMessages qui, effectivement, n'ont pas l'air de pointer au même endroit. Mais comment puis-je corriger cela ?

    Citation Envoyé par gvasseur58 Voir le message
    De toute façon, ce serait bien d'avoir un mini-projet à tester, uniquement centré sur ce problème, non ?
    Valà : test.zip
    2 mots d'explication : quand tu lances le bigniou, il colle une icône en bas à droite à côté de l'heure. Tu cliques dessus, la mainform s'affiche et AV.
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    J'ai raconté des bêtises cet aprème, et elles sont hélas incorporées dans le .zip.

    Voilà les corrections :
    le Timer était Enabled à True dans l'inspecteur d'objets, je l'ai passé à False dans mon test d'il y a 5 minutes, et il n'était pas activé à la fin du FormCreate contrairement à ce que je disais dans ma réponse à Thierry (j'ai dû confondre avec un autre projet) : j'y ai donc rajouté cette ligne MainTimer.Enabled:=True;.


    Ensuite j'ai refait un test : rajouté un label sur la Frame, ça à la fin de FrameCreate : slTest.Add(DateToStr(Now)); et ça au début de Frame.TestStringList : label1.Caption := slTest[0]; et que croyez-vous qu'il arrivât ?
    AV sur cette ligne...

    À mes yeux c'est juste complètement insensé, ce comportement.
    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

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    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 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    j'ai un gros doute sur cette ligne

    frmFrame1.Frame1Frm.TestStringlist;
    a mon avis
    frmFrame1.TestStringlist
    devrais suffire

    le compilateur est mis en defaut tu lui dis d'utiliser frmFrame1.Frame1Frm qui n'est pas instancier alors
    que tu as créer sur la mainform frmFrame1
    tout l’intérêt de renommer ses variable et ne pas utiliser le même nom que celui par defaut
    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

  20. #20
    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,

    Je rejoins Anapurna : c'est uniquement un problème de redéclaration de variable.
    Dans l'unité de ton Frame:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
      Frame1Frm: TFrame1Frm;
    et dans main.pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private
        Frame1Frm: TFrame;
    Supprime cette ligne, et hop tout roule !

    Amicalement
    Thierry

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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