TextEditorGadget(), et environnement CustomGadget

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: TextEditorGadget(), et environnement CustomGadget

Message par graph100 »

Oh Mindphazer, plus rapide que moi ! j'avais même pas vu ;)

Alors, pour le topic :

Nouvelle mise à jour : 1.11.1400

ajout d'un nouveau gadget : le container, qui permet de mettre d'autre gadget en lui, et cela permet d'effectuer des redimensionnements automatiques, différent d'avec une fenetre, ou d'utiliser un splitter avec plusieurs gadgets.

correction de différents bug pour linux et windows
ajout de certaine constantes pour aller plus vite.

J'ai ajouté un code de démonstration simple avec des splitter et containers. :
ça donne ça ^^ :
Image


voir les 1ers post pour plus de renseignement ;)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: TextEditorGadget(), et environnement CustomGadget

Message par graph100 »

Mise à jour : 1.12.1516

Nouveau gadget : l'OptionButton, une sorte de Panel, mais qui n'affiche que du texte, permettant de sélectionner un réglage d'un paramètre avec une petite explication (par exemple)
pour l'utiliser, il faut d'abord le créer, puis ajouter des onglets avec la commande : CG_AddgadgetItem()

correction de quelques problèmes, ajout de commande (voir le 3ème post pour plus de précision)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: TextEditorGadget(), et environnement CustomGadget

Message par graph100 »

Nouvelle Maj : 1.13.1594

nouveau gadget : ImageSlide : permet d'afficher de petites vignettes défillantes avec la souris (roulette et click)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: TextEditorGadget(), et environnement CustomGadget

Message par Anonyme2 »

Salut graph100,

sous Seven 64 bit pro PB 4.60 beta 3 les 3 exemples bug sur la ligne 2498 du fichier CustomGadget.pbi
InitializeStructure(*obj, ICG_Glyphe)

L'erreur c'est invalid memory acces (read error at adress 0), sur la même machine en 32 bit c'est Ok

Il y a peut être un rapport avec le bug de la fonction InitializeStructure avec les chaines voir ici
http://www.purebasic.fr/english/viewtop ... eStructure
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: TextEditorGadget(), et environnement CustomGadget

Message par graph100 »

ah, tu doit compiler avec la beta x64 alors, moi je suis en sur 7 x64 et j'utilise le PB x86 ;)

Effectivement, dans cette structure il y a une chaine de caractère (une chaine fixe en plus -_-

Code : Tout sélectionner

Structure ICG_Glyphe
	*Adresse_Font.ICG_Font
	FrontColor.l
	BackColor.l
	
	char.s{1}
	
	ImageId.i
	Image.i
	
	Largeur.w
	Hauteur.w
EndStructure
après être aller voir le post indiqué, il me semble qu'il s’agit d'une autre erreur, ou alors c'est juste que toutes les chaines bugs. Je vais faire 2 3 tests avec la 64b pour voir et peut etre poster le truc.

Merci Denis pour avoir testé ;)

[edit] J'ai posté un bug sur le fofo anglais, effectivement ce sont les chaines fixes qui font bugués le truc.

Code : Tout sélectionner

Structure test
	chaine.s{2}
EndStructure


*pointeur.test = AllocateMemory(SizeOf(test))


InitializeStructure(*pointeur, test)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: TextEditorGadget(), et environnement CustomGadget

Message par graph100 »

nouvelle version : 1.13.1716

quelques corrections, ajout de la fonction copier / couper sur le TextEditorGadget

Et, passage à la version Pb4.60beta4, qui est Nécessaire pour exécuter le code !!
grace aux corrections de bug par l'equipe PB, ça fonctionne maintenant sur x64 ;)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: TextEditorGadget(), et environnement CustomGadget

Message par GeBonet »

Salut,
Je viens de voir ça de "Toms" sur le forum Anglais... Peut-être utile pour toi ?
Hi, everybody.
Creating new Gadgets on the Canvas seems to be quite popular.
So here's my take on it.
I had something like this using quite a lot of Win-Api.
Now here it is without any Api.
It's a bigger, more touchscreen-friendly TrackbarGadget that looks like a progressbar.

Updated exampled with less flickering of the TextGadgets (thanks to netmaestro) below:

Todo: SetFaderGadgetState(value.i)
http://www.purebasic.fr/english/viewtop ... 12&t=46945

Sans te déplacer voilà le code :

Code : Tout sélectionner

;-
;- BEGIN INCLUDE
;- 
EnableExplicit 
;-Flags
#TG_Fader_Horizontal    = 1

Structure faderGadget
	id.i
	state.i
	colorF.i
	colorB.i
	height.i
	width.i
	min.i
	max.i
	horizontal.i
	image.i
EndStructure 
Global NewList FaderGadgets.faderGadget()

Macro RePaint(_INIT_)   
		
	Select FaderGadgets()\horizontal
		Case 0
			MouseY = GetGadgetAttribute(eventGadget, #PB_Canvas_MouseY )
			
			If _INIT_ = #True
				MouseY = FaderGadgets()\height
			EndIf
			
			StartDrawing(CanvasOutput(eventGadget))
  			Box(0, 0, FaderGadgets()\width, FaderGadgets()\height, FaderGadgets()\colorB)
  			
  			If  FaderGadgets()\image >= 0
  				ImagePos = MouseY
  				If ImagePos <0 : ImagePos = 0 : EndIf 
  				If  ImagePos >FaderGadgets()\height : ImagePos = FaderGadgets()\height : EndIf 
  				DrawImage(ImageID(FaderGadgets()\image), 0, ImagePos - ImageHeight(FaderGadgets()\image)/2)   
  			Else          
  				Box(0, MouseY, FaderGadgets()\width, FaderGadgets()\height-MouseY, FaderGadgets()\colorF)
  			EndIf 
  			
  			State=FaderGadgets()\height-MouseY
  			
  			If State<0 : State=0:EndIf
  			If State>FaderGadgets()\height:State=FaderGadgets()\height:EndIf
  									
  			FaderGadgets()\state = State
			StopDrawing()
					
		Case #True
			MouseX = GetGadgetAttribute(eventGadget, #PB_Canvas_MouseX )
			StartDrawing(CanvasOutput(eventGadget))
			
			  Box(0, 0, FaderGadgets()\width, FaderGadgets()\height, FaderGadgets()\colorB)
  			If  FaderGadgets()\image >= 0
  				ImagePos = MouseX
  				If ImagePos <0 : ImagePos = 0 : EndIf 
  				If  ImagePos >FaderGadgets()\width : ImagePos = FaderGadgets()\width : EndIf 
  				DrawImage(ImageID(FaderGadgets()\image), ImagePos - ImageWidth(FaderGadgets()\image)/2, 0)
  			Else 
  				Box(0, 0, MouseX, FaderGadgets()\height , FaderGadgets()\colorF)
  			EndIf 
  			State=FaderGadgets()\width-MouseX
  			If State<0 : State=0:EndIf 
  			If State>FaderGadgets()\width:State=FaderGadgets()\width:EndIf    
  			
  		StopDrawing()
	EndSelect 
	
	FaderGadgets()\state =    State
		
EndMacro 
Procedure FaderUpdate(eventGadget.i, eventType.i)
  
  Static  lDown.i    ;leftMouseDown
	Protected MouseX.i   ;
	Protected MouseY.i   ;
	Protected State.i   ;GadgetState
	Protected ImagePos.i   
	
	ForEach FaderGadgets()
			
		If FaderGadgets()\id = eventGadget
				
			Select eventType   
							
				Case #PB_Ignore
					Repaint(1)
						
				Case #PB_EventType_LeftButtonDown
					lDown = 1               
					RePaint(0)               
						
				Case #PB_EventType_LeftButtonUp
					lDown = 0
						
				Case #PB_EventType_MouseLeave
					lDown = 0
						
				Case #PB_EventType_MouseMove
						
					If lDown = 1
						Repaint(0)                  
					EndIf 
			EndSelect          
		EndIf 
	Next 
EndProcedure 
Procedure FaderGadget(id.i, x.i, y.i, width.i, height.i, min.i, max.i, FGColor.i, BGColor.i, CanvasFlags.i=0, flags=0, Image.i=-1)
		
	AddElement(FaderGadgets())
	With FaderGadgets()
		If id = #PB_Any
				\id = CanvasGadget(#PB_Any, x, y, width, height, CanvasFlags)
		Else 
				CanvasGadget(id, x, y, width, height, CanvasFlags)
				\id = id
		EndIf 
		
		StartDrawing(CanvasOutput(\id))
		Box(0, 0, width, height, BGColor)      
		StopDrawing()
  		\colorB = BGColor
  		\colorF = FGColor
  		\min    = min
  		\max    = max
  		\height = height
  		\width    = width
		If IsImage(image)
			\image    = image
		Else
			\image = -1
		EndIf 
		
		If flags & #TG_Fader_Horizontal
			\horizontal = #True
		EndIf 
		
		FaderUpdate(\id,#PB_Ignore)
		
		ProcedureReturn \id 
	EndWith 
	
EndProcedure 
Procedure GetFaderGadgetState(gadget.i, trueState=#False)
	Protected min.i, max.i   
	Protected state.i
	Protected height.i, width.i
	Protected scala.i   
	Protected position.f
	
	ForEach FaderGadgets()
		If FaderGadgets()\id = gadget
				
			If truestate = #True         
					ProcedureReturn FaderGadgets()\state
			Else
					
				min    = FaderGadgets()\min
				max    = FaderGadgets()\max
				state    = FaderGadgets()\state 
				height    = FaderGadgets()\height 
				width    = FaderGadgets()\width 
				Select FaderGadgets()\horizontal
					Case 1
						If width>0            
								position = state / width                     
						EndIf 
						scala = max-min
						ProcedureReturn max - (position * scala )
					Default 
						If height>0            
								position = state / height
						EndIf 
						scala = max-min
						ProcedureReturn position * scala + min
				EndSelect 
			EndIf 
		EndIf
	Next 
EndProcedure 

DisableExplicit 
;-
;- END INCLUDE
;- 
;- Example 
Define event.i
Define Any_Fader

Define OldValue_1.i 
Define OldValue_2.i 
Define OldValue_3.i 
Define OldValue_4.i 
Define OldValue_5.i 

Enumeration 4 ;{
	#Text_Static_1
	#Text_Value_1
	#Text_Static_2
	#Text_Value_2
	#Text_Static_3
	#Text_Value_3
	#Text_Static_4
	#Text_Value_4
	#Text_Static_5
	#Text_Value_5
EndEnumeration ;}

CreateImage(1, 90, 15)
  StartDrawing(ImageOutput(1))
  Box(0, 0, 90, 15, $0000FF)
  LineXY(0, 0, 90, 8, $00CC00)
  LineXY(0, 14, 90, 8, $00CC00)
  FillArea(0, 8, $00CC00, $00CC00)
  StopDrawing()


CreateImage(2, 15, 90)
  StartDrawing(ImageOutput(2))
  Box(0, 0, 15, 90, $0000FF)
  LineXY(0, 0, 8, 90, 0)
  LineXY(14, 0, 8, 90, 0)
  FillArea(8, 9, 0, 0)
  StopDrawing()
; -----------------------------------------------------------------------------------------------
OpenWindow(0, 0, 0, 705, 600, "FaderGadget", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  ;
          fadergadget(0     ,   5,   5,  90, 500,   0,  500, $0000FF, $000000)
          fadergadget(1     , 105,   5,  90, 500,1000,99999, $0000FF, $000022, 0, 1)
Any_Fader=fadergadget(#PB_Any,200,   5, 400,  90,   1,    2, $009900, $330000)
          fadergadget(2     , 200, 100, 400,  90, 100,    0, $0066cc, $003300, 0, #TG_Fader_Horizontal)
          fadergadget(3     , 200, 195, 400,  90, -10,   10, $0bb000, $033000, 0, #TG_Fader_Horizontal,5)
  ;
  TextGadget(#Text_Static_1,  5, 510, 40, 20, "Fader 1:")
  TextGadget(#Text_Value_1,  50, 510, 40, 20, Str(GetFaderGadgetState(0)))
  TextGadget(#Text_Static_2,105, 510, 40, 20, "Fader 2:")   
  TextGadget(#Text_Value_2, 155, 510, 40, 20, Str(GetFaderGadgetState(1)))
  TextGadget(#Text_Static_3,605,   5, 40, 20, "Fader 3:")      
  TextGadget(#Text_Value_3, 650,   5, 40, 20, Str(GetFaderGadgetState(Any_Fader)))
  TextGadget(#Text_Static_4,605, 105, 40, 20, "Fader 4:")   
  TextGadget(#Text_Value_4, 650, 105, 40, 20, Str(GetFaderGadgetState(2)))
  TextGadget(#Text_Static_5,605, 195, 40, 20, "Fader 5:")   
  TextGadget(#Text_Value_5, 650, 195, 40, 20, Str(GetFaderGadgetState(3)))

Repeat
	event = WaitWindowEvent(20)
	Select event
		Case #PB_Event_Gadget
			Select EventGadget()
				Case 0, 1, 2, 3, Any_Fader
					FaderUpdate(EventGadget(), EventType())
					
					If OldValue_1 <> GetFaderGadgetState(0)                  
						SetGadgetText(#Text_Value_1, Str(GetFaderGadgetState(0)))
						OldValue_1 = GetFaderGadgetState(0)   
					EndIf 
					
					If OldValue_2 <> GetFaderGadgetState(1)                  
						SetGadgetText(#Text_Value_2, Str(GetFaderGadgetState(1)))
						OldValue_2 = GetFaderGadgetState(1)   
					EndIf
					
					If OldValue_3 <> GetFaderGadgetState(Any_Fader)                  
						SetGadgetText(#Text_Value_3, Str(GetFaderGadgetState(Any_Fader)))
						OldValue_3 = GetFaderGadgetState(Any_Fader)   
					EndIf
					
					If OldValue_4 <> GetFaderGadgetState(2)                  
						SetGadgetText(#Text_Value_4, Str(GetFaderGadgetState(2)))
						OldValue_4 = GetFaderGadgetState(2)   
					EndIf
					
					If OldValue_5 <> GetFaderGadgetState(3)                  
						SetGadgetText(#Text_Value_5, Str(GetFaderGadgetState(3)))
						OldValue_5 = GetFaderGadgetState(3)   
					EndIf
			EndSelect 
	EndSelect 
Until event = #PB_Event_CloseWindow
End
Voilà, voilà... :D
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: TextEditorGadget(), et environnement CustomGadget

Message par graph100 »

merci ;), je prend dans ma besace
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: TextEditorGadget(), et environnement CustomGadget

Message par graph100 »

nouvelle version : 2.00.1800

CustomGadget :

Modification totale de la façon de gérer les gadgets,
On passe en une sorte de programmation objet qui permet de coder les gadget séparément
de la partie Gestion CustomGadget.

-> normalement il devrait être plus faciled d'ajouter des gadgets, sans se pencher sur
le code du projet entier


-> Ajout de 3 nouveaux Gadgets.
- ListViewEx (non exploitable encore)
- Graphic (à finir mais utilisable pour un affichage rapide de tableau simple)
- DMXSlider (à fignoler)

Comme d'habitude le code est disponible sur le 1er post.
Je vais maintenant m’atteler à compléter au possible les trucs déjà existants.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: TextEditorGadget(), et environnement CustomGadget

Message par GeBonet »

Ben beau travaille... :lol:
Détails : Dans "CustomGadget.pbi"
Constantes à déplacer de 1202 vers le début avant procédure sinon... trouve pas !

Code : Tout sélectionner

;{ constantes
#ICG_DMXSlider_Color_01 = $8E6235
#ICG_DMXSlider_Color_02 = $E9D6C2
#ICG_DMXSlider_Color_03 = $D5B08C
#ICG_DMXSlider_Color_04 = $F9F3ED
#ICG_DMXSlider_Color_05 = $B88957
#ICG_DMXSlider_Color_06 = $DCBD9E
#ICG_DMXSlider_Color_07 = $E6D0B9
#ICG_DMXSlider_Color_08 = $E9D6C2

#CG_DMXSlider_Color_Default = -1

A part ça super... Bonne continuation.
Gerhard
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: TextEditorGadget(), et environnement CustomGadget

Message par dayvid »

Bon salut déjà pour commencer, ensuite...

P.... la vache comme c'est bien 8O

graph100 est mon dieu :lol:

C'est tout bonnement superbe :o

J'aurais bien des idées graph100, si ça t'intéresse :)

Félicitation :D

Continue !!!!!!!!!
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: TextEditorGadget(), et environnement CustomGadget

Message par graph100 »

merci.

@GeBonet : ok, c'est noté. je maj ça de suite. (j'ai essayé de complétement séparé les partie gadgets de l'environnement, mais pour des raisons d'optimisation, j'ai intégré la base de couleur statique du DMXSlider dans l'environnement (pour pas la charger à chaque gadget))

(merci bcp pour le retour ^^)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: TextEditorGadget(), et environnement CustomGadget

Message par Ar-S »

Du coup tu as mis à jour ou pas ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: TextEditorGadget(), et environnement CustomGadget

Message par dayvid »

Je peut te donner pleins d'idées si tu veux graph100 !
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: TextEditorGadget(), et environnement CustomGadget

Message par graph100 »

@AR-S : yep c'est fait ;) (j'ai répondu un peu trop tot !)

@Dayvid : Écoute, comme je l'ai dis plus haut, je vais consacrer mon temps à venir à terminer mes chantiers actuels, et Fred sait si j'en ai quelques-uns ! Je veux pouvoir afficher que tout les gadgets actuels ont leurs fonctionnalités de croisière.
De plus j'ai déjà un dossier spécial avec des code de gadget récolté par-ci par-là, et j'ai ajouté ceux dont j'avais besoin pour mes autres projets immédiats (voir ScMangwa pour un aperçu)

Mon prochain truc immédiat, c'est de coder une trame vide pour des nouveaux gadgets. Car maintenant que y a des méthodes, il faut respecter une syntaxe et on peux faire un squelette vide pour toutes les futures additions.

Si tu veux tu peux mettre des idées, avec un code attenant c'est encore mieux ^^, mais par contre n'attend pas qu'elles soient concrétisées dans les mois à venir. Je suis encore étudiant, et en plein milieu d'un semestre assez lourd avec plein de boulot, dans une année importante pour la suite (je veux partir à l'étranger --> canada ;) ).

surtout ne prend pas mal ce que j'ai dis, toute participation est la bienvenue ! Surtout si y a du code clair, qui marche, ou bien des testeurs (encore merci Gebonet ;) )
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre