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 :

Write once, compile anywhere, fais tourner l'exe et paf !


Sujet :

Lazarus Pascal

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut Write once, compile anywhere, fais tourner l'exe et paf !
    Bonsoir,

    Rions un peu avec le multi-plateforme...
    Voilà le résultat du même code (c-à-d zéro code, juste le composant TTrackBar posé sur la feuille) à gauche dans Linux 32 bits et Lazarus 1.4/FPC 2.6.4, et à droite dans XP Pro 32 bits et Lazarus 1.6rc1/FPC 3.0 :

    Nom : trackbar.jpg
Affichages : 349
Taille : 4,8 Ko

    Je ne sais pas encore comment je vais gérer cette pagaille...
    Sans doute à grands coups de {IFDEF LINUX} mais pour un rendu visuel identique du compo, c'est mort.
    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é

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Bonjour,

    Affirmer Write once, compile anywhere n'implique pas qu'on obtienne le même look sur différents systèmes, et encore moins en utilisant des versions différentes.
    Si les cons volaient, il ferait nuit à midi.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Citation Envoyé par droggo Voir le message
    Affirmer Write once, compile anywhere n'implique pas qu'on obtienne le même look sur différents systèmes,
    Pas le même look, j'aurais pu m'adapter, mais

    Citation Envoyé par droggo Voir le message
    et encore moins en utilisant des versions différentes.
    quand on voit comment est traitée la TListview (c-à-d non traitée), de version en version, je ne vois pas pourquoi je me prendrais la tête à migrer pour rien, pour les points qui m'intéressent.
    Parce que ce que je constate, là, c'est une perte de fonctionnalités en passant de Linux à Windows, or il se trouve que la version a évolué, du pingouin aux fenêtres, et là j'y perds en fonctionnalités !
    Régression ?
    Alors ? Sous Windows je redescends en 1.4.0 ?
    Bah, je suis à peu près sûr que le résultat sera le même : comme pour la TListview, tout n'est pas développé...
    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
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Clairement, pour les composants qui wrappent ceux natifs des API de l'OS, le rendu ne peut être identique en passant de l'un à l'autre.

    La solution résiderait peut-être (à terme) dans fpGUI ?
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Salut, YL !
    Citation Envoyé par tourlourou Voir le message
    Clairement, pour les composants qui wrappent ceux natifs des API de l'OS, le rendu ne peut être identique en passant de l'un à l'autre.
    Que le rendu ne soit pas identique, j'aurais pu m'adapter, comme je le disais ; mais là (comme pour la Listview), ça va plus loin, je trouve : c'est au niveau des fonctionnalités !
    Évidemment, si ça dépend de l'OS, alors là c'est mort...
    J'avais envisagé un instant, lors de discussions avec Gilles à propos de la Listview de passer à Qt, mais il me l'a déconseillé. Peut-être Gtk3, alors ? Je fouillerai dès que j'aurai du temps...

    Citation Envoyé par tourlourou Voir le message
    La solution résiderait peut-être (à terme) dans fpGUI ?
    [EDIT]
    L'outil pour lequel on a vu passer une news il y a environ 2 ou 3 mois ? Je l'ai téléchargé, installé (avec un peu des misères liées à des chemins) et, suivant le tuto d'install, j'ai essayé de faire tourner le premier test, sans jamais y parvenir !
    J'ai abandonné et tout viré.
    C'est à se demander si les gens qui codent ça testent dans les autres environnements...

    J'ai fait une confusion avec MSEGui et MSEide, désolé. [/EDIT]

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut La blagounette du dimanche matin...
    Salut !

    Je voulais essayer de comprendre ce qui se passe avec un programme (venant de l'excellent site d'efg et converti laborieusement) car, lorsque juste après son lancement je passe la souris sur l'arc-en-ciel, les radio-boutons se décalent (alors qu'il y a zéro code dans la procédure ImageMouseMove concernant ce comportement : en fait, cette proc sert juste à faire afficher en grand [et plus loin et plus bas que le RadioGroup] la couleur que la souris survole : pas de quoi fouetter un chat !)
    Regardez l'image (c'est un montage, pour bien montrer le décalage avant et après le MouseMove) :
    Nom : décalage_radiobuttons.jpg
Affichages : 306
Taille : 25,5 Ko

    Alors, oui, ça n'est pas bien grave, mais ça chatouille l'œil qui détecte que quelque chose a bougé et ne sait pas quoi : c'est perturbant.

    Bref, comme j'ai toujours ces problèmes d'exécution cassée en mode pas-à-pas (j'en avais parlé il y a longtemps), j'ai décidé d'essayer le code sans en changer une virgule dans une machine XP où tourne Laz1.6rc1 et là, au lancement, avant même de voir la fiche du programme, une superbe fenêtre d'access violation avec l'assembleur qui me crache ses insultes et voilà, quoi...

    Sous Windows le pas-à-pas ayant l'air de fonctionner, j'ai essayé mais je me suis retrouvé dans des fichiers .inc pas très parlants et de toute façon, je ne vais pas aller trifouiller là-dedans.
    Ah, le gag c'est que le zip fourni par efg inclut un binaire (compilé avec sans doute un Delphi 3 ou 4 ou 5) pour Windows qui... s'exécute impécablement

    Je ne demande pas une solution, je sais qu'il n'y en a pas, c'était juste le coup de gueule du dimanche matin -- tiens, j'vais aller faire un tour au marché, ça me changera les idées, parce que le code, il y a des jours, franchement...
    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
    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
    Salut, et bon marché !


    Je voulais essayer de comprendre ce qui se passe avec un programme (venant de l'excellent site d'efg et converti laborieusement)
    Je confirme qu'il s'agit d'un excellent site. Mais je réaffirme aussi que le comportement ET l'aspect des contrôles de base sont dépendants du système d'exploitation. Il est parfois possible d'unifier le tout en passant d'un OS à un autre, mais ce n'est pas toujours le cas. D'ailleurs, même l'aspect des fenêtres (et leur fonctionnement) est différent suivant l'OS utilisé, et ça ne gêne pas plus que de changer de voiture ou de s'adapter à une nouvelle conduite...

    Le "compiler une fois" reste, à mon avis, valable : il garantit que le programme fonctionnera au mieux sur différents OS, dans les limites de la transcription des bibliothèques. Il ne peut en revanche jamais garantir un fonctionnement uniforme. La plupart des dysfonctionnements ne viennent pas de Free Pascal (LAzarus), mais de ces différences fondamentales.

    Encore une petite chose : il ne faut pas utiliser les versions intermédiaires (RC1, RC2...), car elles contiennent des bogues (elles sont faites pour être testées massivement). La version 1.6RC1 de Lazarus est connue pour ses problèmes de débogueur !

    Dans mon village, le marché se tient le lundi matin : je saurai patienter
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Citation Envoyé par gvasseur58 Voir le message
    Mais je réaffirme aussi que le comportement ET l'aspect des contrôles de base sont dépendants du système d'exploitation. Il est parfois possible d'unifier le tout en passant d'un OS à un autre, mais ce n'est pas toujours le cas.
    T'as oublié un poil de magie et un soupçon de vaudou,

    Citation Envoyé par gvasseur58 Voir le message
    D'ailleurs, même l'aspect des fenêtres (et leur fonctionnement) est différent suivant l'OS utilisé, et ça ne gêne pas plus que de changer de voiture ou de s'adapter à une nouvelle conduite...
    Je réussis à masquer le défaut en bidouillant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TFormSpectra.FormActivate(Sender: TObject);
    begin
      // tout ça pour masquer le "resize" du RadioGroup...
      ImageSpectraMouseMove(nil,[ssLeft],0,0);
      ShapeColorBox.Visible    := False;
      LabelColorBoxNm.Visible  := False;
      LabelColorBoxTHz.Visible := False;
      ButtonColorBox.Enabled   := False;
      LabelRGB.Caption         := '';
    end;
    On ne m'ôtera pas de l'idée qu'il se passe des choses bizarres : pourquoi le RadioGroup retaille un peu ses items en mode horizontal (mais pas en vertical) si je passe la souris sur le TImage
    Parce que le code du MouseMove, je le répète, n'a rien à voir avec la taille des colonnes et des items du RadioGroup, mais alors, rien de chez rien !

    Bon, j'ai trouvé : c'est le fait de rendre visibles les labels en bas à droite ou le TShape blanc dans cette proc MouseMove qui fait déplacer les items dans le RadioGroup : on est bien d'accord qu'on marche sur la tête, là, non ?
    Nom : 2_labels_coupables.png
Affichages : 307
Taille : 20,0 Ko
    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
    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
    Bon, j'ai trouvé : c'est le fait de rendre visibles les labels en bas à droite ou le TShape blanc dans cette proc MouseMove qui fait déplacer les items dans le RadioGroup : on est bien d'accord qu'on marche sur la tête, là, non ?
    Bon, je crois avoir trouvé aussi, car le problème est récurrent : l’affichage de nouveaux contrôles va déclencher un Repaint de la fiche et une adaptation des éléments affichés par re-calcul de leurs dimensions et de leur emplacement, avec des arrondis. Le décalage doit venir du résultat de ces calculs : je te rappelle que je ne suis pas un fan des techniques vaudous (je ne suis pas superstitieux parce que ça porte malheur ).
    C'est en fait le seul réel problème que je rencontre lorsque j'écris une application qui doit tourner sur Windows et Linux : par exemple, les deux OS ne gèrent pas de la même manière l'affichage des Caption de TLabel , Linux ayant tendance à nécessiter plus de place ; idem pour les glyphes des TBitButton... Si la base du programme et 99% des procédures sont communes, l’interface graphique a souvent besoin de retouches. Personnellement, je ne retouche qu'elle, sans adapter les procédures comme tu le proposes : à mon avis, il vaut mieux une différence d'affichage qu'une rustine difficile à comprendre et par conséquent à maintenir.

    Cela dit, si je me trompe, joins un fichier à compiler
    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

  10. #10
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Hello Jipété

    Tu devrais essayer de programmer avec Lazarus pour Android. Là, tu verras de vraies différences !

    J'en parle parce que d'honorables geeks ont inventé il y a déjà plusieurs années les composants visuels "CustomDrawn" qui font très peu appel aux systèmes d'exploitation et dessinent et gèrent tout ou presque avec du code Pascal. Cela résout théoriquement les problèmes dont tu te gausses, et c'est à mon avis la seule solution qui permet d'espérer avoir le même code et les mêmes composants visuels sur des systèmes et interfaces très différents.

    Entre Windows, Linux et OS/X, c'est opérationnel, mais pour très peu de composants, avec peu de propriétés. Il manque encore beaucoup de choses et cela semble au point mort, De plus ça ne marche plus à partir d'Android 5.

    Alors si tu as le temps en rentrant du marché, tu peux regarder et aider la communauté en construisant un contrôle manquant, ou en ajoutant des propriétés et événements à ceux qui existent, comme je l'ai fait l'an dernier.

    Ce sera plus utile que de râler.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Salute à tutti,
    Citation Envoyé par tintinux Voir le message
    [...] Alors si tu as le temps en rentrant du marché, tu peux regarder et aider la communauté en construisant un contrôle manquant, ou en ajoutant des propriétés et événements à ceux qui existent, comme je l'ai fait l'an dernier.

    Ce sera plus utile que de râler.
    Désolé, mais je n'ai ni le temps ni les compétences...

    Citation Envoyé par gvasseur58 Voir le message
    Bon, je crois avoir trouvé aussi, car le problème est récurrent : l’affichage de nouveaux contrôles va déclencher un Repaint de la fiche et une adaptation des éléments affichés par re-calcul de leurs dimensions et de leur emplacement, avec des arrondis.
    J'aurais pu être d'accord si les labels en question, qui sont affichés au premier passage de la souris sur le TImage avaient empiété sur l'emplacement du RadioGroup, ce qui est loin d'être le cas.
    Enfin, bon, tu dois être proche de la vérité.


    Citation Envoyé par gvasseur58 Voir le message
    C'est en fait le seul réel problème que je rencontre lorsque j'écris une application qui doit tourner sur Windows et Linux : par exemple, les deux OS ne gèrent pas de la même manière l'affichage des Caption de TLabel , Linux ayant tendance à nécessiter plus de place ; idem pour les glyphes des TBitButton...
    Oui, je l'ai remarqué aussi.

    Citation Envoyé par gvasseur58 Voir le message
    Personnellement, je ne retouche qu'elle, sans adapter les procédures comme tu le proposes : à mon avis, il vaut mieux une différence d'affichage qu'une rustine difficile à comprendre et par conséquent à maintenir.
    Je n'ai pas adapté de procédure, j'en ai créé une nouvelle et je l'ai commentée, pas de souci.
    Et je préfère ça à cet affichage modifié au passage de le souris sur l'image, qui peut arriver n'importe quand : on n'est pas obligé de toujours passer la souris sur l'image à l'exécution, on peut parfois l'y passer sans faire exprès parce qu'on veut aller ailleurs, bref, difficile à reproduire tant qu'on n'a pas capté le lien entre le premier mousemove sur l'image et le décalage dans le radiogroup.

    Citation Envoyé par gvasseur58 Voir le message
    Cela dit, si je me trompe, joins un fichier à compiler
    Je ne pense pas que tu te trompes mais je te joins quand même un zip dédié à Linux (le zip d'origine est chez efg, et c'est bien du D3), avec ma rustine et la bricole développée ici avec l'ami Tourlourou il y a quelques mois (ou années) à propos de l'absence de Scanline, et qu'il faut adapter selon qu'on est en mode Delphi ou en mode objfpc, le compilateur n'étant pas toujours content...
    Tu noteras que pour les windowsiens, le zip d'efg fournit un exe plus complet que le code : présence d'une option d'enregistrement d'un fichier bmp une fois la feuille de couleur affichée (bouton "Color Box"), option non codée dans les .pas (c'est moi qui ai rajouté le message que tu pourras lire sous le bouton "OK").
    spectra.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

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

    Un TLabel est un composant non fenêtré, il utilise donc le Canvas de son parent : dans ton cas, TForm. La modification du texte du Label provoque donc un repaint de la fiche : là, je suis d'accord avec Gilles.
    Tu pourrais faire un test en plaçant les composants Labels, Shape (...) sur un composant fenêtré, par exemple un TPanel. Dans ce cas, il n'y aura plus de repaint de la fiche. C'est facilement vérifiable en mettant un compteur de passage dans l'événement OnPaint de la fiche.

    Là où j'ai des doutes sur l'explication de Gilles, c'est quand il dit que, lors du repaint de la fiche et du re-calcul de la taille des radioitems, le décalage viendrait des arrondis. Le calcul a été fait lors de l'activation de la fiche. Refaire ce calcul devrait donc donner exactement les mêmes résultats (!!?).

    Vouloir aligner parfaitement des composants qui sont propres à l'OS (TLabel, TTrackBar, TEdit...), c'est peine perdue.
    Juste un conseil : ne pas laisser les propriétés de Font à leur valeur par défaut (sinon, cela dépend encore de l'OS, voire des différentes versions du même OS).

    Cordialement
    Thierry

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Yop !

    Merci de t'impliquer, Thierry
    Citation Envoyé par ThWilliam Voir le message
    Tu pourrais faire un test en plaçant les composants Labels, Shape (...) sur un composant fenêtré, par exemple un TPanel. Dans ce cas, il n'y aura plus de repaint de la fiche. C'est facilement vérifiable en mettant un compteur de passage dans l'événement OnPaint de la fiche.
    Perdu !
    Que le panel soit directement sur la fiche ou sur le Tabsheet concerné, le Radiogroup me fait son petit ajustement au MouseMove sur le Timage. C'était bien tenté !

    C'est bouger la souris sur le Timage qui génère un FormRepaint.
    Lancer le prog hors IDE en double-cliquant sur le binaire puis en réduisant les fenêtres (explorateur de fichiers, IDE, navigateur web pour te pianoter tout ça ) qui étaient ouvertes avant lui, ça les fait passer au premier plan avant d'être réduites et ça ramène ensuite à chaque fois la fiche du prog au premier plan, un FormRepaint est généré mais c'est pas pour autant que le RadioGroup s'ajuste !
    C'est vraiment au MouseMove sur le Timage, un truc de malade !


    Citation Envoyé par ThWilliam Voir le message
    Juste un conseil : ne pas laisser les propriétés de Font à leur valeur par défaut (sinon, cela dépend encore de l'OS, voire des différentes versions du même OS).
    Ah !
    Si je mets une taille 10 à la police, plus de souci ; si je redescends en 8 (valeur par défaut), le problème réapparait ! Et même comportement avec une autre police du même genre.
    Je n'ai pas essayé plus loin, ça me gonfle trop.

    Ce que je n'arrive pas à comprendre, dans cette théorie du repaint, c'est en quoi le passage de la souris sur le Timage génère une demande de Repaint sur le Radiogroup avec re-calcul des paramètres pour un bon rendu : il n'a pas déjà eu lieu, ce calcul, pour afficher la fiche au lancement du prog ?
    Faudrait tout suivre à la trace en pas-à-pas profond, mais comme c'est cassé, c'est mort... Pis faudrait avoir du temps, aussi, beaucoup de temps, et c'est ce qui manque le plus.


    Une autre manip faite par hasard, une autre constatation : quand on est en mode conception, selon là où est la souris sur la fiche, une infobulle apparait ; après F9 le programme s'affiche par-dessus l'IDE, normal, mais je ne sais pas pourquoi, l'infobulle est encore plus par-dessus ; j'ai donc calculé mon coup pour que l'infobulle soit placée par-dessus le Timage et quand elle disparait, logiquement il y a un repaint automatique du Timage (masqué parce que l'événement n'est pas activé), mais le Radiogroup n'est pas ajusté.
    Faut que je bouge la souris
    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

  14. #14
    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
    Concernant l'utilisation suggérée d'un TPanel, nous nous sommes peut-être mal compris. Il ne faut mettre sur ce panel que les composants modifiés dans la procédure mousemove du TImage (et pas le radiogroup). De cette façon, on évite un repaint de la fiche. Mais bon, cela a seulement valeur de test pour ton problème.

    Ce que je n'arrive pas à comprendre, dans cette théorie du repaint, c'est en quoi le passage de la souris sur le Timage génère une demande de Repaint sur le Radiogroup avec re-calcul des paramètres pour un bon rendu : il n'a pas déjà eu lieu, ce calcul, pour afficher la fiche au lancement du prog ?
    Bien sûr que si ! J'en ai parlé dans mon post précédent. C'est cela que je ne comprends vraiment pas !
    Un test que tu pourrais faire : supprime ta procédure FormActivate, fixe dans l'EDI une largeur moins grande pour ton radiogroup, et réassigne la bonne largeur dans l'événement OnShow de ta fiche. Là, on impose un re-calcul.

    Concernant la modification de Font, ce n'était qu'un conseil d'ordre général, cela permet d'avoir la même dimension de texte dans des OS différents. Je suppose, p.ex, que la police Arial 9pts est universelle, ou alors...

    Cordialement
    Thierry

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Concernant l'utilisation suggérée d'un TPanel, nous nous sommes peut-être mal compris. Il ne faut mettre sur ce panel que les composants modifiés dans la procédure mousemove du TImage (et pas le radiogroup).
    C'est bien comme ça que je l'avais compris et que je l'ai construit. Cependant, il y en avait 2 ou 3 que j'ai embarqués dans la foulée et qui ne sont pas directement concernés : ils sont toujours Visible ou Enabled : c'est grave, docteur ?

    Citation Envoyé par ThWilliam Voir le message
    Citation Envoyé par Jipété
    il n'a pas déjà eu lieu, ce calcul, pour afficher la fiche au lancement du prog ?
    Bien sûr que si ! J'en ai parlé dans mon post précédent. C'est cela que je ne comprends vraiment pas !
    Un test que tu pourrais faire : supprime ta procédure FormActivate, fixe dans l'EDI une largeur moins grande pour ton radiogroup, et réassigne la bonne largeur dans l'événement OnShow de ta fiche. Là, on impose un re-calcul.
    On est donc au moins deux face à ce comportement incompréhensible ; je me sens moins seul, ouf !
    Je m'occupe de ce test dans les jours qui viennent, là, j'aimerais bien faire avancer autre chose.

    Citation Envoyé par ThWilliam Voir le message
    Concernant la modification de Font, ce n'était qu'un conseil d'ordre général, cela permet d'avoir la même dimension de texte dans des OS différents. Je suppose, p.ex, que la police Arial 9pts est universelle, ou alors...
    Elle est peut-être universelle mais je ne sais pas par quoi la remplacer sous Linux (et je n'ai jamais fait de tests dans ce sens) : Liberation Sans, DejaVu Sans, Nimbus Sans...
    Je verrai ça un jour où j'aurais de la typographie à faire ; pour le moment je me bagarre avec les TRect, Bitmap.Canvas et tout ce genre de choses, c'est pas triste non plus !
    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. #16
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Yop !
    Citation Envoyé par ThWilliam Voir le message
    Un test que tu pourrais faire : supprime ta procédure FormActivate, fixe dans l'EDI une largeur moins grande pour ton radiogroup, et réassigne la bonne largeur dans l'événement OnShow de ta fiche. Là, on impose un re-calcul.
    On n'impose rien du tout

    Procédure désactivée, RadioGroup.Width = 384 dans l'EDI et passage de la souris sur l'image --> ça bouge au MouseMove, normal, c'était pour tester la taille réduite.
    Ajout de l'instruction RadioGroup.Width := 462; dans FormShow, passage de la souris sur l'image --> ça bouge au MouseMove.

    Truc de psychopathe, nan ?

    Alors j'ai tenté des trucs suggérés par la complétion de code, dans FormActivate :
    RadioGroupSpectra.InvalidateClientRectCache(True); --> pas mieux
    RadioGroupSpectra.Repaint; --> pas mieux
    RadioGroupSpectra.ReAlign; --> Bingo ! Pendant l'affichage de la fiche en cours de lancement, j'ai vu bouger les items du Radiogroup ; mais déplacer cette instruction dans le FormCreate ne sert à rien, même précédée d'un Show;.
    Dommage qu'il n'y ait pas d'aide sur ce mot-clé, j'aurais bien aimé en savoir plus, malgré son nom assez explicite, enfin bon, c'est comme ça... Je trouve ça, en remontant dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    { TWinControl ReAlign
     
      Realign all children }
    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

  17. #17
    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
    Je ne pense pas que tu te trompes mais je te joins quand même un zip dédié à Linux (le zip d'origine est chez efg, et c'est bien du D3), avec ma rustine et la bricole développée ici avec l'ami Tourlourou il y a quelques mois (ou années) à propos de l'absence de Scanline, et qu'il faut adapter selon qu'on est en mode Delphi ou en mode objfpc, le compilateur n'étant pas toujours content...
    Tu noteras que pour les windowsiens, le zip d'efg fournit un exe plus complet que le code : présence d'une option d'enregistrement d'un fichier bmp une fois la feuille de couleur affichée (bouton "Color Box"), option non codée dans les .pas (c'est moi qui ai rajouté le message que tu pourras lire sous le bouton "OK").
    spectra.zip
    Salut Jipété,

    Je testerais bien ton programme mais tu n'as pas fourni le fichier ScreenSaveColorBox.lfm. Peux-tu me le fournir ?
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 699
    Points : 15 042
    Points
    15 042
    Par défaut
    Salut, Gilles
    Citation Envoyé par gvasseur58 Voir le message
    Salut Jipété,

    Je testerais bien ton programme mais tu n'as pas fourni le fichier ScreenSaveColorBox.lfm. Peux-tu me le fournir ?
    Rhôôô le boulet le boulet le boulet ! Nan mais, je mérite des baffes !
    Tiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    object FormSaveColorBox: TFormSaveColorBox
      Left = 729
      Height = 256
      Top = 375
      Width = 188
      BorderIcons = []
      BorderStyle = bsSingle
      Caption = 'Save Color Box'
      ClientHeight = 256
      ClientWidth = 188
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      OnActivate = FormActivate
      OnCreate = FormCreate
      Position = poScreenCenter
      LCLVersion = '1.4.0.4'
      object ShapeColorBox: TShape
        Left = 59
        Height = 75
        Top = 38
        Width = 75
      end
      object LabelPixels: TLabel
        Left = 111
        Height = 13
        Hint = 'Size of bitmap'
        Top = 12
        Width = 33
        Caption = 'Pixels'
        ParentColor = False
        ParentShowHint = False
        ShowHint = True
      end
      object LabelNanometers: TLabel
        Left = 28
        Height = 13
        Top = 195
        Width = 18
        Caption = 'nm'
        ParentColor = False
      end
      object LabelWavelength: TLabel
        Left = 18
        Height = 13
        Top = 151
        Width = 63
        Caption = 'Wavelength'
        ParentColor = False
      end
      object LabelFrequency: TLabel
        Left = 117
        Height = 13
        Top = 151
        Width = 57
        Caption = 'Frequency'
        ParentColor = False
      end
      object LabelTHz: TLabel
        Left = 124
        Height = 13
        Top = 195
        Width = 20
        Caption = 'THz'
        ParentColor = False
      end
      object LabelRGB: TLabel
        Left = 5
        Height = 13
        Top = 120
        Width = 180
        Alignment = taCenter
        AutoSize = False
        ParentColor = False
      end
      object SpinEditnm: TSpinEdit
        Left = 25
        Height = 23
        Top = 168
        Width = 47
        MaxValue = 780
        MinValue = 380
        OnChange = SpinEditnmChange
        TabOrder = 0
        Value = 380
      end
      object SpinEditPixels: TSpinEdit
        Left = 59
        Height = 23
        Hint = 'Size of bitmap'
        Top = 8
        Width = 47
        Increment = 8
        MaxValue = 256
        MinValue = 16
        ParentShowHint = False
        ShowHint = True
        TabOrder = 1
        Value = 32
      end
      object BitBtnOK: TBitBtn
        Left = 9
        Height = 25
        Top = 224
        Width = 75
        Caption = '&OK'
        Kind = bkOK
        OnClick = BitBtnOKClick
        TabOrder = 2
      end
      object BitBtnCancel: TBitBtn
        Left = 105
        Height = 25
        Top = 224
        Width = 75
        Caption = '&Cancel'
        Kind = bkCancel
        OnClick = BitBtnCancelClick
        TabOrder = 3
      end
      object SpinEditTHz: TSpinEdit
        Left = 121
        Height = 23
        Top = 168
        Width = 47
        MaxValue = 788
        MinValue = 384
        OnChange = SpinEditTHzChange
        TabOrder = 4
        Value = 384
      end
      object spd: TSavePictureDialog
        left = 10
        top = 10
      end
    end
    Et pour me faire pardonner, après avoir posté, l'autre jour, j'ai codé viteuf' ce qui permet d'enregistrer, à mettre dans le bouton OK :
    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
    procedure TFormSaveColorBox.BitBtnOKClick(Sender: TObject);
    var
      sFilename: string;
      bmp: TBitmap;
    begin
      sFilename := SpinEditnm.Text  + LabelNanometers.Caption +
                   SpinEditTHz.Text + LabelTHz.Caption + '.bmp';
      spd.Options  := spd.Options+[ofPathMustExist];
      spd.FileName := sFilename;
      if not spd.Execute then exit;
      try
        bmp := TBitmap.Create;
        bmp.SetSize(SpinEditPixels.Value, SpinEditPixels.Value);
        bmp.PixelFormat := pf24bit;
        bmp.Canvas.Brush.Color := ShapeColorBox.Brush.Color; // /!\ .Brush /!\ sinon noir...
        bmp.Canvas.FillRect(0,0,bmp.Width,bmp.Height);
        //bmp.Canvas.FillRect(0,0,bmp.Width-1,bmp.Height-1); // -1 ça fait comme une ombre
        bmp.SaveToFile(spd.Filename);
        bmp.Free;
      except
        on E: Exception do begin
          MessageDlg('Error','Error: '+E.Message,mtError,[mbOk],0);
        end;
      end;
      Close;
    end;
    Désolé pour le contre-temps
    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
    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
    Salut, Gilles


    Rhôôô le boulet le boulet le boulet ! Nan mais, je mérite des baffes !

    Désolé pour le contre-temps
    Mais non, pas de souci... Je teste dès que possible, c'est-à-dire demain .
    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

  20. #20
    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 gvasseur58 Voir le message
    Mais non, pas de souci... Je teste dès que possible, c'est-à-dire demain .
    Bonjour Jipété,

    Je parviens à compiler ton programme, mais j'ai une erreur générale lors de l'exécution (construction de la fiche FormSpectra). Je gagnerais beaucoup de temps si tu pouvais me fournir une copie propre du projet. Merci.
    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

Discussions similaires

  1. [IDE][VS2005] Comment compiler projet et obtenir un exe ?
    Par Bing dans le forum Visual Studio
    Réponses: 18
    Dernier message: 07/11/2008, 22h15
  2. [VB6] Compiler une image dans un exe
    Par Vince dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 27/04/2006, 09h27
  3. compilation-link influence sur l'exe ?
    Par reptils dans le forum C++
    Réponses: 24
    Dernier message: 14/02/2006, 21h00
  4. Probleme en compilant le code avec C2.EXE ?!?!?
    Par angelevil dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/11/2005, 17h13
  5. [VB] COmment compiler une dll dans un exe (zlib.dll)
    Par Khrysby dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/11/2005, 13h10

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