Page 1 sur 2

Bloquer un WebGadget toujours en bas [Résolu]

Publié : mar. 27/janv./2009 16:32
par Kwai chang caine
Bonjour les copains.
C'est moi !!!! :D

Bon j'ai un autre probleme :?

Comment feriez vous pour que la scrollbar reste toujours en bas.
Car maintenant que j'arrive a ecrire ligne a ligne, si ça depasse la fenetre evidement la scrollbar aparait, mais comme c'est a chaque fois une nouvelle page, cette inhibée du bulbe se remet en haut :?

Et si je rajoute l'instruction,

Code : Tout sélectionner

SetGadgetAttribute(0, #PB_Web_ScrollY, 1000)
c'est encore pire car elle va bien en bas mais remonte immediatement et ça saute encore plus :twisted:

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 800, 500, "", #PB_Window_SystemMenu) 
  
 WebGadget(0, 0, 0, 800, 500, "") 
 Entete$ = "<html><head><title></title>" 
 Entete$ + "<div class='page'><h2>"+#CRLF$ 
 Fin$ + "</h2></div></body></html>"+#CRLF$ 
    
 For i = 1 To 100

  html$ + "La ligne " + Str(i) + " de KCC est ecrite<br>" 
  SetGadgetItemText(0, #PB_Web_HtmlCode, Entete$ + html$ + Fin$) 
  While WaitWindowEvent(1):Wend 
 ; SetGadgetAttribute(0, #PB_Web_ScrollY, 1000)
   
 Next 
  
 MessageRequester("Youuupi!!!", "KCC est heureux :-))") 
 Repeat 
  event = WaitWindowEvent(100) 
 Until event = #PB_Event_CloseWindow 

EndIf 
End 
 
Merci de votre patience
Bonne journée

Publié : mar. 27/janv./2009 17:46
par Patrick88
facile,

fais le poirier,

ta barre de défilement se retrouvera forcément en bas..

:P

pat

Publié : mar. 27/janv./2009 17:58
par Kwai chang caine
Mais dis donc toi....t'ai un rigolo :lol:
T'as mangé un clown aujourd'hui :D

Au lieu de dire des "cognandises" tu pourrais pas essayer de me pondre une ligne de la mort, avant que ce soit "quinquin" qui se decarcasse et que tu dise que tu savais :?

C'est rigolo, j'crois que j'ai déjà vu ce film "queque" part :roll: :lol:

Publié : mar. 27/janv./2009 18:42
par GeBonet
Salut,

EN fait... C'est juste il suffit de regarder jusque la fin...
Tu retire ton : MessageRequester("Youuupi!!!", "KCC est heureux :-))")

C'est plus visible et tu augmente un peu ta boucle... Disons jusque 20

Puis dans ton : SetGadgetAttribute(0, #PB_Web_ScrollY, 2000)
Repeat
event = WaitWindowEvent(100)
Until event = #PB_Event_CloseWindow

Et avant de toucher à une touche tu verras que ta barre va revenir tranquillement en dessous... En montrant la dernière ligne...

Voilà, voilà ? En fait y avait presque pas de problème... Sauf 1000 ça parait beaucoup... Mais ici il faudrait évaluer la taille de ce qui disparait en dessous... Pour l'ajouter au dessus pour faire descendre la barre en dessous vraiment...
A++

Publié : mar. 27/janv./2009 18:44
par Patrick88
déja en modifiant le code comme ça j'obtiens quelque chose de mieux

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 800, 500, "", #PB_Window_SystemMenu)
 
 WebGadget(0, 0, 0, 800, 500, "")
 Entete$ = "<html><head><title></title>"
 Entete$ + "<div class='page'><h2>"+#CRLF$
 Fin$ + "</h2></div></body></html>"+#CRLF$
   
 For i = 1 To 100

  html$ + "La ligne " + Str(i) + " de KCC est ecrite<br>"
  SetGadgetItemText(0, #PB_Web_HtmlCode, Entete$ + html$ + Fin$)
  While WindowEvent():Wend
 Next
 
 SetGadgetAttribute(0, #PB_Web_ScrollY, 1000 )
 
 
 ;MessageRequester("Youuupi!!!", "KCC est heureux :-))")
 Repeat
  event = WaitWindowEvent()
 Until event = #PB_Event_CloseWindow

EndIf
End 
pat

Publié : mar. 27/janv./2009 18:49
par venom
bonjour,

je raisonne peut être mal mais je me dit que si une ligne prend 25 de taille comme c'est le cas de ton exemple et bien je multiplie i*25 ?
ceux qui donne ceux ci

Code : Tout sélectionner

SetGadgetAttribute(0, #PB_Web_ScrollY, i*25)
comme sa meme si je change la valeur de i :

Code : Tout sélectionner

for i = 1 to 72
et bien la scroll va pile en bas

après il doit y avoir moins barbare :D





@++

Publié : mar. 27/janv./2009 18:59
par GeBonet
En fait excuse... Plutôt fait une boucle jusque 20 seulement...

Car ce que je dis avant c'est cela le problème... Ou est la dernière ligne ???
C'est ce qu'il faudrait évaluer avant pour savoir ou il faudra placer la "barre" pour qu'il montre la dernière ligne... En réalité il doit faire remonter le tout... pour être en dessous !

DONC la solution :

Une fois l'écran remplis, faire défiler l'ensemble de ce qui est dans la fenêtre... d'une ligne vers le haut pour afficher la dernière ligne etc...

Et ainsi la barre sera toujours en bas et les "X" dernières lignes aussi...
A réfléchir...

Publié : mar. 27/janv./2009 21:28
par Kwai chang caine
Tout d'abord merci à tous de votre interet 8)
Mais le probleme de la chose.....c'est qu'a chaque fois que l'on fait un

Code : Tout sélectionner

SetGadgetItemText(0, #PB_Web_HtmlCode, Entete$ + html$ + Fin$) 
On remet une page neuve, donc on ne peut pas faire descendre d'un cran, puisque la scrollbar remonte obligatoirement tout en haut a chaque fois qu'elle rencontre cette instruction.

C'est la qu'est l'OS :?

Publié : mar. 27/janv./2009 21:42
par GeBonet
Ben, c'est possible... WebGadget fait ça ? C'est con ! Il faudrait pouvoir au moins afficher on on veux dans cette page... :(
Kwai chang caine a écrit :On remet une page neuve, donc on ne peut pas faire descendre d'un cran, puisque la scrollbar remonte obligatoirement tout en haut a chaque fois qu'elle rencontre cette instruction. C'est la qu'est l'OS :?
Pourtant les lignes s'affiche bien les unes derrière les autres... Mais dans un espace ou l'on n'a pas le contrôle... C'est ça ? A part de dire l'ascenseur il est là... Ce qui serait bien si il affichait les lignes de l'endroit ou on lui indique... Mais c'est pas ça ! De plus que si c'est une autre police plus petite ou plus grandes compliqué de savoir "en point ou on est ?"

Mais bon, c'est normalement fait pour afficher des pages Web hein...

Demain il y aura bien un plus illuminé avec une API de derrière les fagots qui apparaitra
:lol:

Publié : mar. 27/janv./2009 21:47
par Patrick88
GeBonet a écrit :Demain il y aura bien un plus illuminé avec une API de derrière les fagots qui apparaitra
:lol:
bin ouais là faut attendre demain....

parce que les illuminés y sont tous dehors....

dans la nuit, qui sont...

sur les trottoirs,

sur les places publiques,

le long des routes....

pour éclairer dans la nuit, qui sont dehors, les illuminés...

:lol: :lol: :lol: :lol: :lol:

pat

Publié : mar. 27/janv./2009 22:16
par Kwai chang caine
Bon bah les copain aujourd'hui KCC il est performant.
Il pete la forme

Un copain avec qui je discute souvent, m'a dit que l'on resolvait souvent un probleme en le posant.
En plus ce qu'a dit GEBONET a allumé une etincelle dans la bouse qui me sert de cerveau.

Je me suis dit KCC t'es une burne, si WebGadget remet à zero la page a chaque fois, pourquoi ne fait tu pas un ...(ATTENTION grand mot de l'ASM) OFFSET des instruction deja passée.
Comme ça on a bien la derniere qui s'affiche, et ce sont les precedentes qui ne s'affiche plus.
Pour ça fastoche un tablo et on fait un decalage en comparaison en comptant la hauteur des lignes comme m'a mis sur la voie VENOM :wink:

Alors attention ça marche, mais y'a pas de fluidité au resizing, et encore des aleas pour l'arret de la fenetre.
La je crois que c'est a la portée de tout le monde.
Mais peut etre un callback sera necessaire.
Je vous pose ma reflexion, ainsi que sur le site US

Je pense que demain..... je pourrais ameliorer ça
Comme quoi quand on peut pas rentrer par la porte...faut rentrer par la fenetre :D
Et aussi si elle veut pas par devant, alors il faut essayer par d..... :oops: :lol:

Code : Tout sélectionner

#Form = 1
#WebGadget = 2
Dim Html.s(1000) 

Entete$ = "<html><head><title></title>" 
Entete$ + "<div class='page'><h2>"+#CRLF$ 
Fin$ + "</h2></div></body></html>"+#CRLF$ 

OpenWindow(#Form, 0, 0, 800, 500, "", #PB_Window_SystemMenu|#PB_Window_SizeGadget) 
WebGadget(#WebGadget, 0, 0, WindowWidth(#Form) - 10, WindowHeight(#Form) - 10, "") 

For i = 1 To 400

 ; On calcule le nombre de lignes max tenant dans la fenetre
 NBreLignes = GadgetHeight(#WebGadget) / 28

 html(i) = "La ligne " + Str(i) + " de KCC est ecrite<br>" 
 
 If i < NbreLignes
  
  For w = 1 To 25
   Html$ + html(w)
  Next 
 
 Else
 
  For w = i - NBreLignes To i
   Html$ + html(w)
  Next 
   
 EndIf
 
 
 Event = WindowEvent() 
 
 If Event
  
  Select Event
   Case #PB_Event_CloseWindow 
    Break
   Case #PB_Event_SizeWindow
    ResizeGadget(#WebGadget, #PB_Ignore, #PB_Ignore, WindowWidth(#Form) - 10, WindowHeight(#Form) - 10)
  EndSelect
    
 Else
 
  SetGadgetItemText(#WebGadget, #PB_Web_HtmlCode, Entete$ + html$ + Fin$) 
  While WindowEvent():Wend
  
 EndIf
  
 Delay(30)
 Html$ = ""
 
Next 

End 
Bon apres KCC, il va se coucher, parce que deux solution trouvée dans la meme journée, c'est l'overdose 8O

Publié : mar. 27/janv./2009 23:55
par GeBonet
Non, ça peux fonctionner, mais comme c'est pas fait pour ça ce serait nettement mieux une solution du type :

Comme pour l'ENTER" dans un StringGadget, trouver une API qui va simuler un Clic sur le bouton ou une action de la souris sur la la ScrollBar et faire monter d'une ligne la page et ce juste avant d'afficher la ligne suivante qui viendrait alors se mettre dernière ligne en bas de la WebGadget... Et ce dès que les lignes atteignent la première fois la dernière ligne...
A partir de la c'est valable quelque soit la taille des caractères et du nombre de ligne... Soit presque rien à changer...

Trouver l'API à actionner à partir de la première fin de page... et pour les autres lignes et c'est tout :lol: :lol: :lol:

Ou peut-être le code PB que je ne connais pas encore...

Bonne nuit :lol: [/u]

Publié : mer. 28/janv./2009 12:30
par Patrick88
un truc genre
SendMessage_(GadgetID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, NULL)

pat

Publié : mer. 28/janv./2009 13:27
par Kwai chang caine
ATTENTION !!!
Plus personne ne bouge.
Le femmes et les enfants d'abord

Aujourd'hui la terre s'arrete de tourner autour du soleil.
Car aujourd'hui KCC viens de faire sa premiere CALLBACK a lui personnel tout seul :D

Oui mes amis......je sais que vous ne croyez pas une seule lettre de ce que vous venez de lire.
KCC, la serpillere du forum, le relicat de giclette, la poussiere de sciure de programmeur, viens d'acceder au noyau de windows tout seul come un grand.
KCC il est drolement fier :D

Alors voila, apres une nuit a reposer mon neurone, j'ai continué ce matin mon idée.
Donc grace aux geniales callback, je peux fermer l'appli au milieu de la boucle, resizer, et surtout sortir au milieu de la boucle et que ce soit la derniere ligne qui apparaisse :D
Et bien sur aussi la premiere fonction recherchée....que la derniere ligne entrée soit toujours visible en bas de la fenetre :?

Donc voici le gros OEUF que KCC y viens de pondre.....
ATENTION il doit etre encore "Hachement" brut, car il a drolement fait mal au derriere de KCC pour le pondre :?

Il me reste a trouver un ajustement automatique par raport a la hauteur du texte (Je ne sais pas si la detection est possible en HTML ou pure ???)

Code : Tout sélectionner

NBreLignes = GadgetHeight(#WebGadget) / 21 
Et j'aimerais savoir si, je fais pas du mal à sortir en plein milieu de la callback ??? :roll:
Et si bien sur ......"quinquin" de la famille, peut faire mieux que blanc :D

Code : Tout sélectionner

#Form = 1 
#WebGadget = 2 
Dim Html.s(1000) 
Global Stop
Global TotalHtml.s

Entete$ = "<html><head><title></title>" 
Entete$ + "<div class='page'>"+#CRLF$ 
Fin$ + "</div></body></html>"+#CRLF$ 

Procedure WinCallback(hWnd, uMsg, wParam, lParam) 
 
 If uMsg = #WM_SIZE 
 
  ResizeGadget(#WebGadget, #PB_Ignore, #PB_Ignore, WindowWidth(#Form) - 10, WindowHeight(#Form) - 10) 
  
 ElseIf uMsg = #WM_CLOSE 
   End
 ElseIf wParam =  #VK_ESCAPE
  Stop = #True
 EndIf 

 ProcedureReturn #PB_ProcessPureBasicEvents 

EndProcedure 

OpenWindow(#Form, 0, 0, 800, 500, "", #PB_Window_SystemMenu|#PB_Window_SizeGadget) 
WebGadget(#WebGadget, 0, 0, WindowWidth(#Form) - 10, WindowHeight(#Form) - 10, "") 
SetWindowCallback(@WinCallback())

For i = 1 To 100

 NBreLignes = GadgetHeight(#WebGadget) / 21 

 html(i) = "La ligne " + Str(i) + " de KCC est ecrite<br>" 
 TotalHtml + html(i)
 
 If i < NbreLignes 
  
  For w = 1 To 25 
   Html$ + html(w) 
  Next 
  
 Else 
  
  For w = i - NBreLignes To i 
   Html$ + html(w) 
  Next 
    
 EndIf 
     
 SetGadgetItemText(#WebGadget, #PB_Web_HtmlCode, Entete$ + html$ + Fin$) 
 While WindowEvent():Wend 
 Delay(70) 
 Html$ = "" 
 
 If Stop
  Break
 EndIf
   
Next 

SetGadgetItemText(#WebGadget, #PB_Web_HtmlCode, Entete$ + TotalHtml + Fin$) 
While WindowEvent():Wend 
SetGadgetAttribute(#WebGadget, #PB_Web_ScrollY, 1000000)

Repeat  
 Evenement = WaitWindowEvent() 
Until Evenement = #PB_Event_CloseWindow

End

Publié : mer. 28/janv./2009 15:01
par GeBonet
Salut,

C'est bien et ça fonctionne.... MAIS ! Regarde ton code que je te renvois

Code : Tout sélectionner

#Form = 1
#WebGadget = 2
Dim Html.s(1000)
Global Stop
Global TotalHtml.s

Entete$ = "<html><head><title></title>"
Entete$ + "<div class='page'>"+#CRLF$
Fin$ + "</div></body></html>"+#CRLF$

;Procedure WinCallback(hWnd, uMsg, wParam, lParam)
;    If uMsg = #WM_SIZE
;        ResizeGadget(#WebGadget, #PB_Ignore, #PB_Ignore, WindowWidth(#Form) - 10, WindowHeight(#Form) - 10)
;    ElseIf uMsg = #WM_CLOSE
;        End
;    ElseIf wParam =  #VK_ESCAPE
;        Stop = #True
;    EndIf
;    ProcedureReturn #PB_ProcessPureBasicEvents

;EndProcedure

OpenWindow(#Form, 0, 0, 800, 500, "", #PB_Window_SystemMenu|#PB_Window_SizeGadget)
    WebGadget(#WebGadget, 0, 0, WindowWidth(#Form) - 10, WindowHeight(#Form) - 10, "")
    ;SetWindowCallback(@WinCallback())
    
   ; Sous cette forme Utile mais pas à chaque boucle ??? 
    NBreLignes = GadgetHeight(#WebGadget) / 21

    ; le problème ou on pèche le "/21" pourquoi 21 ? 
    ;****************************************
    For i = 1 To 150
        html(i) = "La ligne " + Str(i) + " de KCC est ecrite<br>"
        TotalHtml + html(i)      
        If i < NbreLignes
            For w = 1 To 25
               Html$ + html(w)
            Next
        Else
            For w = i - NBreLignes To i
               Html$ + html(w)
            Next
        EndIf
        SetGadgetItemText(#WebGadget, #PB_Web_HtmlCode, Entete$ + html$ + Fin$)
        While WindowEvent():Wend
        Delay(70)
        Html$ = ""
        If Stop
            Break
        EndIf
    Next
    SetGadgetItemText(#WebGadget, #PB_Web_HtmlCode, Entete$ + TotalHtml + Fin$)
    While WindowEvent():Wend
    SetGadgetAttribute(#WebGadget, #PB_Web_ScrollY, 1000000)

    Repeat 
        Evenement = WaitWindowEvent()
    Until Evenement = #PB_Event_CloseWindow

End
J'ai neutralisé la CallBack... Parce que cela n'est pas utile ! A moins que je ne me trompe pour je ne sais quoi ?
Et déplacer ton compteur de ligne hors de la boucle... Connaitre une fois le nombre de ligne c'est suffisant
A+