Page 1 sur 1

[RESOLU]Curseur Pavé façon Linux

Publié : jeu. 27/déc./2018 23:12
par Ekim
Bonsoirs à tous

j'ai un petit soucis que je n'arrive pas à élucider, j'éssais de faire apparaitre le petit curseur "pavé" de fin de ligne comme indiqué dans le titre, un truc façon "old school", voici un résidu de code de désespoir

Code : Tout sélectionner


ini=CreateImage(#PB_Any, 200, 200,24, $AAAAAA)

user$="Agent smith"
matricul$="15876754547"
txtinf$="anti-virus"

Procedure printtxt(lx,ly,txt$,gadid,imgid,time)
	For x=0 To Len(txt$)
		StartDrawing(ImageOutput(imgid))
		
		DrawingMode(#PB_2DDrawing_Transparent)
		
		DrawText(lx,ly,Left(UCase(txt$),x))
		Box(((Len(txt$)+x)-1)*5,ly+4,7,10,$AAAAAA)
		Box((Len(txt$)+x)*5,ly+4,7,10,$FFFFFF)
		
		Delay(time)
		StopDrawing()  
		
		SetGadgetState(gadid,ImageID(imgid))
	Next x
EndProcedure


If OpenWindow(0, 0, 0, 200, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	ImageGadget(0, 0, 0, 200,200, ImageID(ini))
	AddWindowTimer(0,0,50)
	
	Repeat
		Event = WaitWindowEvent()
		
		Select Event
			Case #PB_Event_Timer
				
				printtxt(5,14,user$,0,ini,120)
				printtxt(5,28,matricul$,0,ini,120)
				printtxt(5,42,txtinf$,0,ini,120)
				
				
		EndSelect		
		
	Until Event = #PB_Event_CloseWindow
EndIf
le problème à l'air simple mais en fait non :oops:

Re: Curseur Pavé façon Linux

Publié : jeu. 27/déc./2018 23:30
par boby

Code : Tout sélectionner

ini=CreateImage(#PB_Any, 200, 200,24, $CCCCCC)

user$="Agent smith"
matricul$="15876754547"
txtinf$="anti-virus"

Procedure printtxt(lx,ly,txt$,gadid,imgid,time)
   For x=0 To Len(txt$)
      StartDrawing(ImageOutput(imgid))
      
      DrawingMode(#PB_2DDrawing_Transparent)
      
      Box(0,ly,200,TextHeight(txt$),$CCCCCC)
      DrawText(lx,ly,Left(UCase(txt$),x))
      Box(lx+TextWidth(Left(UCase(txt$),x)),ly+4,7,10,$AAAAAA)
      
      Delay(time)
      StopDrawing() 
      
      SetGadgetState(gadid,ImageID(imgid))
  Next x
  StartDrawing(ImageOutput(imgid))
  Box(lx+TextWidth(UCase(txt$)),ly+4,7,10,$CCCCCC)
  StopDrawing()
EndProcedure


If OpenWindow(0, 0, 0, 200, 200, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   ImageGadget(0, 0, 0, 200,200, ImageID(ini))
   AddWindowTimer(0,0,50)
   
   Repeat
      Event = WaitWindowEvent()
      
      Select Event
         Case #PB_Event_Timer
            
            printtxt(5,14,user$,0,ini,120)
            printtxt(5,28,matricul$,0,ini,120)
            printtxt(5,42,txtinf$,0,ini,120)
            
            
      EndSelect      
      
   Until Event = #PB_Event_CloseWindow
EndIf
J'éspère que ce n'est que pour un exemple, par-ce que ce code est horrible :

1) On ne dessine pas avec le CPU.
2) On ne fait pas d'annimation (aussi basic soit elle) sur un image gadget.
3) On ne fait pa une animation dans une boucle, sinon on freez tout le reste.
4) On ne gére pas un delay d'étape d'animation avec un delay, soit tu ouvre un screen et tu setframerate, soit tu utilise un timer et tu elapsedmiliseconde.

J'éspère que j'aurais répondu à ta question malgré tout.
le problème à l'air simple mais en fait non :oops:
Bah en fait si... Suffisait le récupérer la taille du texte (gettextwidht / height) plutot que d'essaye vaguement de le deviner avec un calcule qe je n'ai pas compris d'où tu l'as tiré ^^"

[RESOLU]Curseur Pavé façon Linux

Publié : ven. 28/déc./2018 0:08
par Ekim
Merci @Boby et joyeuses fêtes à toi et à vous tous ;)

en effet mon code n'est pas très académique mais c'était du "vite fait" :lol:

ça fonctionne nickel :lol:

Re: Curseur Pavé façon Linux

Publié : ven. 28/déc./2018 2:37
par Ekim
@Boby, Juste au passage, comment s'y prends t-on pour le cas d'un éditorgadget?
en bout de texte faut ajouter +chr(219) par exemple?

Re: [RESOLU]Curseur Pavé façon Linux

Publié : ven. 28/déc./2018 10:33
par Christophe
@Ekim, pour un EditorGadget essaie ceci...

Code : Tout sélectionner

Global text$ ="Agent smith"+Chr(13)+"15876754547"+Chr(13)+"anti-virus"
Global x

CreateImage(0,8,16)
StartDrawing(ImageOutput(0))
Box(0,0,8,14, #Gray ! #White)
;Box(0,10,8,3, #Gray ! #White)
StopDrawing()

OpenWindow(0,0,0,600,400,"Curseur EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0,0,0,600,300)
SetActiveGadget(0)



Procedure Affiche()
  
  x2=Len(text$)
  x+1
  If x>x2 : ProcedureReturn :EndIf
  SetGadgetText(0,Left(text$,x))
  SendMessage_(GadgetID(0), #EM_SETSEL, $fffffff, $fffffff)  ; met le curseur en fin de ligne
  CreateCaret_(GadgetID(0), ImageID(0),0,0)
  ShowCaret_(0)
  
EndProcedure

x = 0
AddWindowTimer(0,1,200)
BindEvent(#PB_Event_Timer,@Affiche())

Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow

DestroyCaret_()

Re: [RESOLU]Curseur Pavé façon Linux

Publié : ven. 28/déc./2018 12:51
par boby
Pour du gadget custom tu as deux solutions, utiliser l'API (comme l'exemple donné par Christophe) mais tu perd le multi OS ou créer ton gadget toi même.

Ce que tu cherche à faire se fait facilement avec un simple canvas.

Re: [RESOLU]Curseur Pavé façon Linux

Publié : mer. 02/janv./2019 19:40
par Ekim
Impeccable) merci pour votre aide @Christophe et @Boby :wink: