Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? | |
| | Auteur | Message |
---|
Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? Dim 29 Avr 2018 - 21:30 | |
| J'ai du très lourd à vous soumettre ! Depuis 2 jours j'ai des bugs aléatoires dans mon code. Je dis bien ALÉATOIRES !!! Codeurs, ne rigolez pas, vous allez vite comprendre pourquoi et ça devrait aussi vous ouvrir bien des horizons sur des problèmes que vous n'avez peut-être jamais réussi à résoudre. Je ne vous raconte pas la démarche pour en arriver là pour vous épargner la prise de tête. J'ai ainsi découvert que pour un MEMO, la fonction ITEM_READ$, qui permet de lire une ligne de ce mémo, est totalement dépendante de la largeur de ce mémo. Si par exemple vous faites un ITEM_ADD sur la ligne 1 du mémo, eh bien la chaîne lue ne sera pas celle correspondant au contenu de la ligne 1 (ce qui semblerait logique), mais à une chaîne arbitrairement tronquée en fonction de la largeur physique du mémo. Un truc de fou. Démonstration : - Code:
-
' Ci-dessous c'est juste pour centrer l'écran left 0,(screen_x/2)-(width(0)/2) : top 0,(screen_y/2)-(height(0)/2)
' Début de la démo du bug fou memo 1 : top 1, 50 dim texte$
width 1,400 item_add 1,"1 - ceci est une très grande phrase pour réaliser cette démonstration" item_add 1,"2 - ceci est une autres grande phrase pour réaliser cette démonstration" item_add 1,"3 - allez une dernière très grande phrase pour réaliser cette démonstration"
texte$ = item_read$(1,1) print texte$
message "Je viens d'imprimer la Ligne 1 du mémo." + chr$(13) + "Maintenant, je vais réduire la largeur du MEMO et de nouveau imprimer la ligne 1" width 1,100 texte$ = item_read$(1,1) print texte$
message "Vous avez vu le résultat ? La chaine est tronquée." message "En gros, le numéro de ligne est dépendant de la largeur du MEMO." + chr$(13) + "Et la ligne 2 pour vous c'est laquelle : 'grande phrase...' ou '2 - ceci...' ?" texte$ = item_read$(1,2) print texte$
Quand j'ai enfin découvert ça, j'ai cru pleurer ! Et faut pas me dire que c'est un comportement voulu...
Dernière édition par Fredisland le Lun 30 Avr 2018 - 12:29, édité 2 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? Dim 29 Avr 2018 - 21:36 | |
| C'est bien connu que le contenu du Memo s'adapte à la largeur physique de ce Memo. C'est à dire que si une une ligne est plus longue que le contenant, le surplus sera débordé constituera sur l'item suivant, et autres éventuellement. Ça dépend de la longueur des lignes, de la t aille des caractères, etc., tout ce qui déborde va dans la ligne suivante et constitue un item à part.
Et donc, si on veut éviter ce phénomène, il faut dimensionner la largeur du Memo en conséquence, c'est vrai que c'est un peu aléatoire, mais c'est comme ça. Contrairement au List ou Dlist.
C'est vrai que ce n'est pas bien précisé dans la doc, mais comme tu vois (!) on s'en aperçoit très vite.
Dernière édition par JL35 le Dim 29 Avr 2018 - 21:40, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? Dim 29 Avr 2018 - 21:39 | |
| Regarde cette version uniquement modifiée en ligne 5. Ca fonctionne normalement: - Code:
-
' Ci-dessous c'est juste pour centrer l'écran left 0,(screen_x/2)-(width(0)/2) : top 0,(screen_y/2)-(height(0)/2)
' Début de la démo du bug fou memo 1 : top 1, 50 : bar_both 1 dim texte$
width 1,400 item_add 1,"1 - ceci est une très grande phrase pour réaliser cette démonstration" item_add 1,"2 - ceci est une autres grande phrase pour réaliser cette démonstration" item_add 1,"3 - allez une dernière très grande phrase pour réaliser cette démonstration"
texte$ = item_read$(1,1) print texte$
message "Je viens d'imprimer la Ligne 1 du mémo." + chr$(13) + "Maintenant, je vais réduire la largeur du MEMO et de nouveau imprimer la ligne 1" width 1,100 texte$ = item_read$(1,1) print texte$
message "Vous avez vu le résultat ? La chaine est tronquée." message "En gros, le numéro de ligne est dépendant de la largeur du MEMO." + chr$(13) + "Et la ligne 2 pour vous c'est laquelle : 'grande phrase...' ou '2 - ceci...' ?" texte$ = item_read$(1,2) print texte$
En fait, c'est normal. Le mémo, par défaut, fait un "word wrap", générant ainsi plusieurs lignes à l'a place d'une seule lorsque la ligne dépasse la largeur du mémo. Et ce sont de vraies nouvelles lignes, comme tu as pu le constater. Mais, en ajoutant les scrollbars horizontales et verticales, ce comportement disparaît et tout rentre dans l'ordre. Donc, pas de panique - la solution est simple ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? Dim 29 Avr 2018 - 21:41 | |
| Klaus, c'est toi le meilleur, il fallait y penser ! En plus, les BAR_xxx sont réservées aux MEMOs ! | |
| | | Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: Re: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? Dim 29 Avr 2018 - 21:45 | |
| - Klaus a écrit:
- Mais, en ajoutant les scrollbars horizontales et verticales, ce comportement disparaît et tout rentre dans l'ordre. Donc, pas de panique - la solution est simple !
Tu viens de me sauver la vie. Je commençais à me faire un width MEMO, 10000 !!!! Et à propos de word wrap, à quand un ww sur synédit | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? Dim 29 Avr 2018 - 21:49 | |
| Et le BAR_HORIZONTAL marche même sur un MEMO caché (Hidden), là je découvre, moi qui prévoyais toujours de grandes largeurs, comme Fredisland... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? Dim 29 Avr 2018 - 22:15 | |
| Je viens de découvrir le problème que j'avais avec les mémos en terme de programmation.
Merci à vous trois, je mets ce sujet dans ma réserve des sujets importants (pour moi) du forum.
A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? Dim 29 Avr 2018 - 23:19 | |
| Euh... content si ça vous a servi à quelque chose... mais ça fait longtemps que ça fait partie des codes de mes programmes de démo, en particulier pour toutes les fonctions qui retournent des infos dans un mémo: - Code:
-
memo 17 : hide 17 : bar_both 17 res% = dll_callx("...fonction...",handle(17),...) et le mémo 17 contient les infos choisies, une info par ligne, quelque soit sa longueur. | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? Lun 30 Avr 2018 - 0:07 | |
| Ah oui, c'est une belle astuce, je me contentais de poser un 'width x,power(2,20)' | |
| | | Contenu sponsorisé
| Sujet: Re: [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? | |
| |
| | | | [RÉSOLU] ITEM_READ arbitraire sur MEMO : un bug ? | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |