[RESOLU]Curseur Pavé façon Linux

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

[RESOLU]Curseur Pavé façon Linux

Message 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:
Dernière modification par Ekim le ven. 28/déc./2018 0:09, modifié 1 fois.
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Curseur Pavé façon Linux

Message 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é ^^"
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

[RESOLU]Curseur Pavé façon Linux

Message 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:
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Re: Curseur Pavé façon Linux

Message 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?
Christophe
Messages : 43
Inscription : lun. 22/oct./2018 19:34
Localisation : Haisnes (62)

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

Message 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_()
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

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

Message 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.
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

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

Message par Ekim »

Impeccable) merci pour votre aide @Christophe et @Boby :wink:
Répondre