Page 3 sur 3

Re: WebGadget() et récupération du code html d'une page web.

Publié : jeu. 12/sept./2013 12:08
par nico
Mais il y aura toujours une limite que tu ne pourras pas dépasser alors pourquoi ce ne serait pas voulu, regarde ce code, j'obtiens une limite de 3641 caractères affichable (window 7), au delà le texte ne s'affiche plus d'où la nécessité de limiter le texte dans une Listbox sous peine que rien ne s'affiche:

Code : Tout sélectionner

If OpenWindow(0,0,0,420,420,"ListViewGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  ListViewGadget(0,10,10,400,400)
  
  ; limite 3642 -> LONGUEUR DU TEXTE + 0 de fin de chaine.
  texte.s = LSet("A", 3640, "A"); 3640 ça passe, 3641 ça ne passe plus!
  
  AddGadgetItem (0,-1,texte)
  AddGadgetItem (0,-1,"Dobro")
  
  SendMessage_(GadgetID(0), #LB_SETHORIZONTALEXTENT, $FFFF, 0) 
  POINTER.s= Space (68000)
  SendMessage_(GadgetID(0), #LB_GETTEXT, 0, @pointer) 
  
  Debug Len(pointer)
  
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf

Re: WebGadget() et récupération du code html d'une page web.

Publié : jeu. 12/sept./2013 13:59
par Backup
oui nous sommes d'accord ;)
mais si en V5.20 nous sommes passé a un Gadget editor , alors ,normalement, il ne devrai pas y avoir de limite ...

ps: je n'ai pas testé la v5.20 ... j'attends la version finale

Re: WebGadget() et récupération du code html d'une page web.

Publié : jeu. 12/sept./2013 18:45
par nico
Voici les limites que j'obtiens avec un EditorGadget, il y a de la marge, il est peut être possible de modifier cela avec des options, ce qui signifie que là aussi, le texte sera tronqué si celui ci est supérieur à 60128:

Code : Tout sélectionner

 If OpenWindow(0, 0, 0, 820, 820, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
    EditorGadget(0, 10, 10, 800, 800) 
    
    ;Nombre de caractères maximum affichable pour une seule ligne : 2732
    texte.s = LSet("A", 2728, "B") + "Fin"
    AddGadgetItem(0, -1, texte) 
    
    
    ; Nombre de caractères maximum affichable en une seul fois sur plusieurs lignes : 60128 sur 23 lignes
    ; L' EditorGadget va renvoyer automatiquement à la ligne si le texte est trop long.
    texte.s = LSet("A", 60124, "B") + "Fin"
    AddGadgetItem(0, -1, texte) 
 
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
  EndIf 

Re: WebGadget() et récupération du code html d'une page web.

Publié : jeu. 12/sept./2013 19:05
par Backup
oui mais la ton test ne veux plus dire grand chose
car dans le cas qui nous préoccupe , il s'agissait de faire afficher une page HTML donc avec des retours à la ligne

le debugger de la version 5.11 ne peut pas afficher les phrases séparées par des retours a la ligne (chr(10) ) d'ou la coupure avec [...]

mais si, en Version 5.20 , nous sommes passé sur un éditor gadget , alors plus de problèmes ...
les lignes seront affichées a la ligne , et non plus sur une seule ligne ..

du coup la limite pour une seule ligne est certes , a prendre en compte (a inscrire dans la doc )
mais cela relativise , car devoir tout afficher sur une seule ligne, n'as pas trop d’intérêt :)

maintenant la limite total reste un point noir ...
est-ce de cela que Fred parle en disant qu'il a fixé le probleme ?

Re: WebGadget() et récupération du code html d'une page web.

Publié : jeu. 12/sept./2013 19:27
par nico
C'est juste des tests pour infos, avec le debugger de la 5.20 Bêta 19 j'ai toujours une limite de 2732 caractères par ligne mais il semble qu'il n'y ai pas de limite restrictive effectivement sur la longueur max du texte, je me suis arrêté à 1 million.

Fred a en effet corrigé le problème.

Re: WebGadget() et récupération du code html d'une page web.

Publié : ven. 13/sept./2013 9:44
par PAPIPP
Bonjour à tous
Nico a parfaitement indiqué la correction sur la PB520 B19
Voici un prg qui permet de récupérer maintenant le code HTML dans Debug avec WEBGADGET.

Code : Tout sélectionner

OpenConsole("resultat")
CreateFile(0,"TEST_PP.html")
If OpenWindow(0,0,0,1250,850,"WebGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	WebGadget(1,10,10,1200,800,"http://www.purebasic.com")
	dep.q=ElapsedMilliseconds()
	flag=0
	Resultat$=GetGadgetItemText(1,#PB_Web_HtmlCode     )
	dlres=Len(resultat$)
	Repeat
	Delay(10)
		Resultat$=GetGadgetItemText(1,#PB_Web_HtmlCode)
		lres=Len(resultat$)
		If lres=mlres And flag=0 And lres>dlres
			Resultat$=GetGadgetItemText(1,#PB_Web_HtmlCode)
			PrintN(Resultat$)
			Debug Resultat$
			WriteString(0,Resultat$,#PB_UTF8)
			flag+1
		EndIf 
		mlres=lres
	Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
CloseConsole()
CloseFile(0)
RunProgram("TEST_PP.html")
Par contre j’ai toujours un pb avec le code de falsam génèré sur Debug avec l’utilisation de #PB_EventType_DownloadEnd.

Code : Tout sélectionner

OpenConsole("resultat_")
CreateFile(0,"TEST_FAL.html")
If OpenWindow(0,0,0,600,300,"WebGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  WebGadget(1,10,10,580,280,"http://www.purebasic.com")
 NBpassage=0 
  Repeat
    Event=WaitWindowEvent()
    GEvent=EventGadget()
    TEvent=EventType()
    Select Event
      Case #PB_Event_Gadget
        Select GEvent
          Case 1
            Select TEvent
              Case #PB_EventType_DownloadEnd
              nbpassage+1
                Resultat$=GetGadgetItemText(1,#PB_Web_HtmlCode)
                Debug Resultat$
                PrintN(Resultat$)
                 WriteString(0,Resultat$,#PB_UTF8)
             EndSelect
        EndSelect
      Case #PB_Event_CloseWindow
        Break
    EndSelect
  ForEver
 EndIf 
CloseConsole()
CloseFile(0)
RunProgram("TEST_FAL.html")
Debug nbpassage
End

D’une part il y a deux passages dans la case #PB_EventType_DownloadEnd
Le premier passage génère 5 caractères parasites en Hexa "FF DD 3C 0D 0A" qui demeurent au deuxième passage, par contre le code généré est complet + 5 caractères parasites en tête.
Il est difficile d’utiliser le code pourtant complet sans retirer les caractères parasites
Or après enregistrement par l’option "enregistrer" de debug il est impossible de voir ces caractères dans un éditeur classique il faut utiliser un éditeur hexa. Par contre si on utilise l’option "copier tout" avec récupération dans un éditer classique il n’y a pas de pb pour retirer ces 5 caractères parasites.
Je vous signale ces pb car non seulement je ne comprends pas la génération des 5 caractères parasites en tête ,mais aussi pour la difficulté que j’ai eu à retirer ces caractères dans un éditeur classique à partir du nouveau Debug.

Le nouveau debug nettement plus agréable que le précédent nous réserve encore quelque surprise.

Avez-vous les mêmes pb chez vous ?

PC:
j'ai testé le nouveau debug et je ne suis arrivé à 50 000 000 de caractères avec des fins de ligne #LF$.
Voici le prg pour tester. Je n'ai pas testé comme nico le nb max de caractères dans une ligne.

Code : Tout sélectionner

#MAX=50000000; <- vous pouvez modifier le nombre de d'octets supporté par debug ici 50 000 000 
              ; mais à partir de la PB520 B19 ce n'est pas le maximum et en plus #LF$ #LFCR$ ect..mise en forme du texte
#MAX_100=(#MAX/100)
Structure Alpha
  StructureUnion
    ALP1.s{1}[#MAX]
    ALP100.s{100}[#MAX_100]
    ALPT.s{#MAX}
  EndStructureUnion
EndStructure
Define A1.ALPHA
Debug "chaque ligne fait 100 caractères avec au debut le Nombre des centaines ou le N° de ligne et en fin #LF$ que l'on ne voit pas"
NBoct=Len(Str(#max_100))
    ; _____0____-----1----_____2____-----3----_____4____-----5----_____6____-----7----_____8____-----9----
Sign$="012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678" +#LF$
sig$="_"+Right(sign$,100-(nboct+1))
nbz$=ReplaceString(Space(nboct)," ","0")
For X=0 To #max_100-1
deb$=Right(nbz$+Str(x),NBoct)
  A1\ALP100[X]=deb$+sig$
Next
Debug A1\ALPT
Debug "nombre d'octets édités en une fois ="+Str(Len(A1\ALPT))
; OpenConsole("Essai(chaine de caractère")
; PrintN(A1\ALPT)
; Input()
; CloseConsole()
A+

Re: WebGadget() et récupération du code html d'une page web.

Publié : sam. 14/sept./2013 18:11
par nico
Pour ton premier code, j'ai essayé une soluce du forum anglais lorsque j'avais poster le problème du #PB_EventType_DownloadEnd, mais ça ne fonctionne pas, son code n'est finalement pas bon. C'est un problème et je n'ai pas de solution simple.