Outil UNICODE

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Outil UNICODE

Message par MLD »

Bonjour
L'unicode nous surprend tous un peu. Les milliers de caractères possible
Comme par exemple l'euro que l'on ne trouve plus ect.
Donc j'ai réalisé ce petit outil sans prétention, mais qui me rend bien des services.
L'utilisation est simple:
Tapez un code en décimale ou en hexa et le caractère s'affiche.
Autre possiblité aprés avoir coché recherche par caractère. Taper un caractère ou copier le contenus du P.P dans la bonne case et le code
s'affiche.
si vous ête en reche par numéro, et que vous appuyez sur le bouton copie le caractère sera dans le P.P, en recherche par caractère
se sera le code héxa.
Bien entendus, vous pouvez amélioré la bête. Mais faite nous une démo. :wink:

Code : Tout sélectionner

; Code-Unicode By MLD le 19/09/2016
;PB 5.43LTS. Compilation uni_code
Enumeration
  #Ma_fen = 0
  #txt_1 = 1
  #string_1 = 2
  #string_2 = 3
  #string_3 = 4
  #bt_p = 5
  #bt_m = 6
  #CheckBox_num = 7
  #CheckBox_car = 8
  #Bt_copie = 9
  #Bt_Raz = 10
  #Bt_stop = 11
  #Etic_1 = 12
  #Etic_2 = 13
  #Etic_3 = 14
EndEnumeration
Declare afcarac(nc)
Global FontID1 = LoadFont(30,"Tahoma",12,#PB_Font_Bold)
Global FontID2 = LoadFont(31,"Tahoma",36,#PB_Font_HighQuality)
Global FontID3 = LoadFont(32,"Tahoma",12,#PB_Font_HighQuality)
Global A$="NUL;SOH;STX;ETX;EOT;ENQ;ACK;BEL;BS;HT;LF;VT;FF;CR;SO;SI;DLE;DC1;DC2;DC3;DC4;NAK;SYN;ETB;CAN;EM;SUB;ESC;FS;GS;RS;US;SP;" 
Macro Select(num)
 If num = 1 Or num = 3    
   SetGadgetColor(2,#PB_Gadget_BackColor,$FFFFFF)
   SetGadgetColor(3,#PB_Gadget_BackColor,$2FFFAD)
   SetGadgetColor(4,#PB_Gadget_BackColor,$2FFFAD)
   DisableGadget(2,1):DisableGadget(3,0):DisableGadget(4,0)
   DisableGadget(5,0):DisableGadget(6,0)
   If num = 3
     SetGadgetText(2,"NUL")
     SetGadgetText(3,"0")
     SetGadgetText(4,"00")
   EndIf  
 Else
   SetGadgetColor(2,#PB_Gadget_BackColor,$2FFFAD)
   SetGadgetColor(3,#PB_Gadget_BackColor,$FFFFFF)
   SetGadgetColor(4,#PB_Gadget_BackColor,$FFFFFF)
   For x = 2 To 4
     SetGadgetText(x,"")
   Next
   DisableGadget(2,0):DisableGadget(3,1):DisableGadget(4,1)
   DisableGadget(5,1):DisableGadget(6,1)
 EndIf  
EndMacro

Procedure GestionCaret(Gadget) ; Gestion du caret dans stringGadget
 SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)    
 y = Debut_Position
 Texte.s = GetGadgetText(Gadget)
 x =Len(Texte)
 Texte2.s = Left(Texte,y ) + Right(Texte,x-y)
 SendMessage_(GadgetID(Gadget), #EM_SETSEL, x, x) 
EndProcedure

Procedure convert(n)
  If n = 1
    SetGadgetText(4,Hex(Val(GetGadgetText(3)))) 
  EndIf
  If n = 2
    SetGadgetText(3,Str(Val("$" + GetGadgetText(4)))) 
  EndIf 
  If GetGadgetState(7) = 1
    afcarac(Val(GetGadgetText(3)))
  EndIf  
EndProcedure 

Procedure afcarac(nc)
 If nc < 33 
   car$ = StringField(A$,nc+1,";")
 Else
   car$ = Chr(nc)
 EndIf
 If nc = 127:car$ = "DEL":EndIf
 If nc = 160:car$ = "NBSP":EndIf
 SetGadgetText(2,car$)
EndProcedure

Procedure carnum(car$)
  If Len(car$) >1
    SetGadgetText(2,UCase(car$))
    GestionCaret(2)
    car$ = GetGadgetText(2)
    For c  = 1 To 32
      If car$ = StringField(A$,c+1,";")
        num = c
        Break
      EndIf
    Next
    If car$ = "DEL" :num = 127:EndIf
    If car$ = "NBSP" :num = 160:EndIf
    SetGadgetText(3,Str(num))
    convert(1)
  Else
    SetGadgetText(3,Str(Asc(GetGadgetText(2))))
    convert(1)
  EndIf 
EndProcedure  

OpenWindow(#Ma_fen,600,200,300,400,"Code Unicode",#PB_Window_BorderLess | #PB_Window_Invisible)
SetClassLongPtr_(WindowID(#Ma_fen),#GCL_STYLE,$00020000)
HideWindow(#Ma_fen,0)
StickyWindow(#Ma_fen,1)
; gadgets
N$ = "   CODE  UNICODE"
For x = 1 To Len(N$)
 L$ = L$ + Mid(N$,x,1) + Chr(10) 
Next
TextGadget(1,0,0,30,400,L$,#PB_Text_Center)
SetGadgetColor(1,#PB_Gadget_BackColor,$45DDB0)
SetGadgetFont(1,FontID1)
StringGadget(2,50,50,140,65,"NUL",#ES_CENTER)
SendMessage_(GadgetID(2),#EM_LIMITTEXT,4, 0)
SetGadgetFont(2,FontID2)
StringGadget(3,50,170,120,25,"0",#ES_CENTER|#PB_String_Numeric)
SetGadgetFont(3,FontID1)
StringGadget(4,50,235,120,25,"00",#ES_CENTER|#PB_String_UpperCase)
SetGadgetFont(4,FontID1)
ButtonGadget(5,210,177,40,40,"+")
SetGadgetFont(5,FontID1)
ButtonGadget(6,210,218,40,40,"-")
SetGadgetFont(6,FontID1)
CheckBoxGadget(7,50,290,180,25,"Recherche par numéro")
CheckBoxGadget(8,50,320,200,25,"Recherche par caractère")
ButtonGadget(9,62,360,80, 30,"Copie")
ButtonGadget(10,141,360,60, 30,"Raz")
ButtonGadget(11,200,360,80, 30,"Stop")
TextGadget(12,50,20,140,25,"Caractère",#PB_Text_Center)
TextGadget(13,50,140,120,25,"Code décimal",#PB_Text_Center)
TextGadget(14,50,205,140,25,"Code héxadécimal",#PB_Text_Center)
For b = 7 To 14
  SetGadgetFont(b,FontID3)
Next
;  Taches préparatoires
SetGadgetState(7,#PB_Checkbox_Checked)
Select(1)
;  Boucle générale
Repeat
 Event = WaitWindowEvent()
  If Event = #WM_LBUTTONDOWN
   SendMessage_(WindowID(#Ma_fen), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
  EndIf
  If Event = #PB_Event_Gadget
    Select EventGadget()
      Case 2 ;string caractere
        Select EventType()
          Case #PB_EventType_Change
            carnum(GetGadgetText(2))
        EndSelect    
      Case 3 ;string décimale
        Select EventType()
         Case #PB_EventType_Change       
         convert(1) 
        EndSelect    
      Case 4 ;string hexa  
        Select EventType()
          Case #PB_EventType_Change
           convert(2) 
       EndSelect
     Case 5 ;bt +
        p = Val(GetGadgetText(3))+1
        SetGadgetText(3,Str(P))
        convert(1)
      Case 6 ;bt -
        If Val(GetGadgetText(3)) > 0
          M = Val(GetGadgetText(3)) -1
          SetGadgetText(3,Str(M))
          convert(1)
        EndIf  
      Case 7 ;checKbox num
        SetGadgetState(7,#PB_Checkbox_Checked)
        SetGadgetState(8,#PB_Checkbox_Unchecked)
        Select(1)
      Case 8 ;checKbox car
        SetGadgetState(8,#PB_Checkbox_Checked)
        SetGadgetState(7,#PB_Checkbox_Unchecked)
        For z = 3 To 4
          SetGadgetText(z,"")
        Next
        Select(2)
        SetActiveGadget(2)
      Case 9 ;bt copie
        ClearClipboard()
        If GetGadgetState(7)= 1
          SetClipboardText(GetGadgetText(2))
        Else
          SetClipboardText(GetGadgetText(4)) 
        EndIf  
      Case 10 ;bt_raz
        SetGadgetState(7,#PB_Checkbox_Checked)
        SetGadgetState(8,#PB_Checkbox_Unchecked)
        Select(3)    
      Case 11 ;bt_stop 
      CloseWindow(0)  
      Break
   EndSelect
 EndIf
ForEver
End
Tapez par exemple 22500 en décimal et vous aurez du chinois :roll:
Dernière modification par MLD le mer. 21/sept./2016 8:57, modifié 1 fois.
Mesa
Messages : 1093
Inscription : mer. 14/sept./2011 16:59

Re: Outil UNICODE

Message par Mesa »

Excellent :D

Donner le choix de la police serait pas mal aussi.

Mesa.
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Outil UNICODE

Message par MLD »

Merci
Mesa a écrit :

Donner le choix de la police serait pas mal aussi.

Mesa.
Pourquoi faire :?: :oops:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Outil UNICODE

Message par Zorro »

exemple de choix de fontes ;)

Code : Tout sélectionner

;Liste (et choix) des fontes de votre systeme

Enumeration
		#win
		#Combo_fonte
		#Gadget_text
		#fonte
Endenumeration
Global Dim Fonts.S(0), CountFonts.L=0, i.L,fonte$
Declare enumfontfamproc(*lpelf.enumlogfont, *lpntm.newtextmetric , fonttype, lparam)
Declare loadsysfonts()

If OpenWindow(0, 0, 0, 220, 100, "Fontes list", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
		ComboBoxGadget(#Combo_fonte, 10,50,150,30)
		LoadSysFonts() ; on scan les fontes du system
		SetGadgetState(#Combo_fonte, 1)
		fonte$=GetGadgetItemText(#Combo_fonte,  GetGadgetState(#Combo_fonte) ) 
		If   LoadFont(#fonte,Trim(fonte$),12) And fonte$<>""										;	 
				SetGadgetFont(#PB_Default, FontID(#fonte))
				TextGadget(#Gadget_text, 10, 10,220,35,"text exemple By Zorro")
		EndIf
		
		Repeat
				Event = WaitWindowEvent()
				Select Event
				Case #PB_Event_Gadget
						Select EventGadget()
						Case #Combo_fonte
								fonte$=GetGadgetItemText(#Combo_fonte,  GetGadgetState(#Combo_fonte) ) 
								If   LoadFont(#fonte,Trim(fonte$),12) And fonte$<>""										;	 
										SetGadgetFont(#PB_Default, FontID(#fonte))
										TextGadget(#Gadget_text, 10, 10,220,35,"text exemple By Zorro")
								EndIf
						EndSelect
				EndSelect
		Until Event = #PB_Event_CloseWindow
EndIf

Procedure EnumFontFamProc(*lpelf.ENUMLOGFONT, *lpntm.NEWTEXTMETRIC , FontType, lParam)
		CountFonts=CountFonts+1
		ReDim Fonts(CountFonts)
		Fonts(CountFonts-1)=PeekS(@*lpelf\elfLogFont\lfFaceName[0])
		ProcedureReturn 1
EndProcedure
;Chargement des fonts system
Procedure LoadSysFonts()
		hwnd = GetDesktopWindow_()
		hdc = GetDC_(hwnd)
		EnumFontFamilies_(hdc, 0, @EnumFontFamProc(), 0)
		ReleaseDC_ (hwnd, hdc)
		SortArray(Fonts(), #PB_Sort_Ascending | #PB_Sort_NoCase)
		For i=1 To CountFonts-1
				AddGadgetItem(#Combo_fonte, -1, Fonts(i))
		Next i
EndProcedure
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Outil UNICODE

Message par MLD »

@Zorro

c'est bien ton truc, mais c'est pas vraiment le sujet; Ou je me trompe :roll: :oops:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Outil UNICODE

Message par Zorro »

MLD a écrit :@Zorro

c'est bien ton truc, mais c'est pas vraiment le sujet; Ou je me trompe :roll: :oops:
Mesa a écrit :Donner le choix de la police serait pas mal aussi.

Mesa.

c'est ce que fait mon code , il donne le choix de la fonte ! (de la police de caracteres)
donc t'a plus qu'a copier coller dans ton code, pour permettre le choix de la fonte affichée par ton outils !

je suis carrément dans le sujet ! :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Outil UNICODE

Message par JohnJohnsonSHERMAN »

Excellent, et super pratique ! Et en plus y'a des efforts de design, c'est simple et sympa... J'aime ce genre de designs, et d'outils pratiques, alors vraiment trés beau boulot :P
Il manque juste une table de catégories, parce que chercher un caractère parmis 2^16 autres, ca peut être long des fois.... Un truc comme une Combobox avec des catégories de caractéres (ASCII, Accentués, Chinois, Japonais, Symboles, Opérateurs mathématiques, Fléches, et tout le bazar...). Là ce serait le top... Tiens comment on a ce caractére déja? Allez hop! et voila le code :mrgreen:

Merci pour ce petit utilitaire indispensable avec le passage Unicode :wink:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Demivec
Messages : 90
Inscription : sam. 18/sept./2010 18:13

Re: Outil UNICODE

Message par Demivec »

@MLD: Merci pour le code.

Code : Tout sélectionner

Global A$ = "NUL;STX;SOT;ETX;EOT;ENQ;ACK;BEL;BS;HT;LF;VT;FF;CT;SO;SI;DLE;DC1;DC2;DC3;DC4;NAK;SYN;ETB;CAN;EM;SUB;ESC;FS;GS;RS;US;SP;"
Ce ne sont pas exactes.

Devrait être:

Code : Tout sélectionner

Global A$ = "NUL;SOH;STX;ETX;EOT;ENQ;ACK;BEL;BS;HT;LF;VT;FF;CR;SO;SI;DLE;DC1;DC2;DC3;DC4;NAK;SYN;ETB;CAN;EM;SUB;ESC;FS;GS;RS;US;SP;"
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Outil UNICODE

Message par PAPIPP »

Bonjour à tous

Petite modification qui tient compte des remarques de Zorro et de Demivec.
Choix de la police et correction des caractères non éditables.

Code : Tout sélectionner

; Code-Unicode By MLD le 19/09/2016
;PB 5.43LTS. Compilation uni_code
Enumeration
	#Ma_fen = 0
	#txt_1 = 1
	#string_1 = 2
	#string_2 = 3
	#string_3 = 4
	#bt_p = 5
	#bt_m = 6
	#CheckBox_num = 7
	#CheckBox_car = 8
	#Bt_copie = 9
	#Bt_Raz = 10
	#Bt_stop = 11
	#Etic_1 = 12
	#Etic_2 = 13
	#Etic_3 = 14
EndEnumeration
Declare afcarac(nc)
CHOIX=FontRequester("Arial", 10, #PB_FontRequester_Effects)
global choix_font.s=SelectedFontName()
Global FontID1 = LoadFont(30,"Tahoma",12,#PB_Font_Bold)
Global FontID2 = LoadFont(31,choix_font,36,#PB_Font_HighQuality)
Global FontID3 = LoadFont(32,"Tahoma",12,#PB_Font_HighQuality)
; Global A$ = "NUL;STX;SOT;ETX;EOT;ENQ;ACK;BEL;BS;HT;LF;VT;FF;CT;SO;SI;DLE;DC1;DC2;DC3;DC4;NAK;SYN;ETB;CAN;EM;SUB;ESC;FS;GS;RS;US;SP;"
Global A$ = "NUL;SOH;STX;ETX;EOT;ENQ;ACK;BEL;BS;HT;LF;VT;FF;CR;SO;SI;DLE;DC1;DC2;DC3;DC4;NAK;SYN;ETB;CAN;EM;SUB;ESC;FS;GS;RS;US;SP;"
Macro Select(num)
If num = 1 Or num = 3    
		SetGadgetColor(2,#PB_Gadget_BackColor,$FFFFFF)
		SetGadgetColor(3,#PB_Gadget_BackColor,$2FFFAD)
		SetGadgetColor(4,#PB_Gadget_BackColor,$2FFFAD)
		DisableGadget(2,1):DisableGadget(3,0):DisableGadget(4,0)
		DisableGadget(5,0):DisableGadget(6,0)
		If num = 3
			SetGadgetText(2,"NUL")
			SetGadgetText(3,"0")
			SetGadgetText(4,"00")
		EndIf  
Else
		SetGadgetColor(2,#PB_Gadget_BackColor,$2FFFAD)
		SetGadgetColor(3,#PB_Gadget_BackColor,$FFFFFF)
		SetGadgetColor(4,#PB_Gadget_BackColor,$FFFFFF)
		For x = 2 To 4
			SetGadgetText(x,"")
		Next
		DisableGadget(2,0):DisableGadget(3,1):DisableGadget(4,1)
		DisableGadget(5,1):DisableGadget(6,1)
EndIf  
EndMacro

Procedure GestionCaret(Gadget) ; Gestion du caret dans stringGadget
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)    
y = Debut_Position
Texte.s = GetGadgetText(Gadget)
x =Len(Texte)
Texte2.s = Left(Texte,y ) + Right(Texte,x-y)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, x, x) 
EndProcedure

Procedure convert(n)
	If n = 1
		SetGadgetText(4,Hex(Val(GetGadgetText(3)))) 
	EndIf
	If n = 2
		SetGadgetText(3,Str(Val("$" + GetGadgetText(4)))) 
	EndIf 
	If GetGadgetState(7) = 1
		afcarac(Val(GetGadgetText(3)))
	EndIf  
EndProcedure 

Procedure afcarac(nc)
If nc < 33 
		car$ = StringField(A$,nc+1,";")
Else
		car$ = Chr(nc)
EndIf
If nc = 127:car$ = "DEL":EndIf
If nc = 160:car$ = "NBSP":EndIf
SetGadgetText(2,car$)
EndProcedure

Procedure carnum(car$)
	If Len(car$) >1
		SetGadgetText(2,UCase(car$))
		GestionCaret(2)
		car$ = GetGadgetText(2)
		For c  = 1 To 32
			If car$ = StringField(A$,c+1,";")
				num = c
				Break
			EndIf
		Next
		If car$ = "DEL" :num = 127:EndIf
		If car$ = "NBSP" :num = 160:EndIf
		SetGadgetText(3,Str(num))
		convert(1)
	Else
		SetGadgetText(3,Str(Asc(GetGadgetText(2))))
		convert(1)
	EndIf 
EndProcedure  

OpenWindow(#Ma_fen,600,200,300,400,"Code Unicode",#PB_Window_BorderLess | #PB_Window_Invisible)
SetClassLongPtr_(WindowID(#Ma_fen),#GCL_STYLE,$00020000)
HideWindow(#Ma_fen,0)
StickyWindow(#Ma_fen,1)
; gadgets
N$ = "   CODE  UNICODE"
For x = 1 To Len(N$)
L$ = L$ + Mid(N$,x,1) + Chr(10) 
Next
TextGadget(1,0,0,30,400,L$,#PB_Text_Center)
SetGadgetColor(1,#PB_Gadget_BackColor,$45DDB0)
SetGadgetFont(1,FontID1)
StringGadget(2,50,50,140,65,"NUL",#ES_CENTER)
SendMessage_(GadgetID(2),#EM_LIMITTEXT,4, 0)
SetGadgetFont(2,FontID2)
StringGadget(3,50,170,120,25,"0",#ES_CENTER|#PB_String_Numeric)
SetGadgetFont(3,FontID1)
StringGadget(4,50,235,120,25,"00",#ES_CENTER|#PB_String_UpperCase)
SetGadgetFont(4,FontID1)
ButtonGadget(5,210,177,40,40,"+")
SetGadgetFont(5,FontID1)
ButtonGadget(6,210,218,40,40,"-")
SetGadgetFont(6,FontID1)
CheckBoxGadget(7,50,290,180,25,"Recherche par numéro")
CheckBoxGadget(8,50,320,200,25,"Recherche par caractère")
ButtonGadget(9,62,360,80, 30,"Copie")
ButtonGadget(10,141,360,60, 30,"Raz")
ButtonGadget(11,200,360,80, 30,"Stop")
TextGadget(12,20,20,280,25,"Caractère "+ choix_font,#PB_Text_Center)
; TextGadget(12,50,20,140,25,"Caractère"+ choix_font,#PB_Text_Center)
TextGadget(13,50,140,120,25,"Code décimal",#PB_Text_Center)
TextGadget(14,50,205,140,25,"Code héxadécimal",#PB_Text_Center)
For b = 7 To 14
	SetGadgetFont(b,FontID3)
Next
;  Taches préparatoires
SetGadgetState(7,#PB_Checkbox_Checked)
Select(1)
;  Boucle générale
Repeat
Event = WaitWindowEvent()
	If Event = #WM_LBUTTONDOWN
		SendMessage_(WindowID(#Ma_fen), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
	EndIf
	If Event = #PB_Event_Gadget
		Select EventGadget()
			Case 2 ;string caractere
				Select EventType()
					Case #PB_EventType_Change
						carnum(GetGadgetText(2))
				EndSelect    
			Case 3 ;string décimale
				Select EventType()
					Case #PB_EventType_Change       
					convert(1) 
				EndSelect    
			Case 4 ;string hexa  
				Select EventType()
					Case #PB_EventType_Change
						convert(2) 
				EndSelect
			Case 5 ;bt +
				p = Val(GetGadgetText(3))+1
				SetGadgetText(3,Str(P))
				convert(1)
			Case 6 ;bt -
				If Val(GetGadgetText(3)) > 0
					M = Val(GetGadgetText(3)) -1
					SetGadgetText(3,Str(M))
					convert(1)
				EndIf  
			Case 7 ;checKbox num
				SetGadgetState(7,#PB_Checkbox_Checked)
				SetGadgetState(8,#PB_Checkbox_Unchecked)
				Select(1)
			Case 8 ;checKbox car
				SetGadgetState(8,#PB_Checkbox_Checked)
				SetGadgetState(7,#PB_Checkbox_Unchecked)
				For z = 3 To 4
					SetGadgetText(z,"")
				Next
				Select(2)
				SetActiveGadget(2)
			Case 9 ;bt copie
				ClearClipboard()
				If GetGadgetState(7)= 1
					SetClipboardText(GetGadgetText(2))
				Else
					SetClipboardText(GetGadgetText(4)) 
				EndIf  
			Case 10 ;bt_raz
				SetGadgetState(7,#PB_Checkbox_Checked)
				SetGadgetState(8,#PB_Checkbox_Unchecked)
				Select(3)    
			Case 11 ;bt_stop 
			CloseWindow(0)  
			Break
		EndSelect
EndIf
ForEver
End

Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Outil UNICODE

Message par MLD »

Bonjour a tous

Merci pour vos compliments

Quelques précisions:
Je vois toujours pas pourqoi un changement de police soit utile ?. Sauf pour eventuellement une table de notes de musique.
Les codes utilisés de $00 a $0020 (Nul,ect) sont ceux de Microsoft Windows codepage 1252 (latin1). Ceux que vous me proposés sont ceux de wikipédia (latin de base). Lesquels utilisés ??
JohnJohnsonSHERMAN Je retient ton idée de faire une recherche rapide par table. Dés que j'aurai un peu de temps, je regarde ceci.
Dernière modification par MLD le mar. 20/sept./2016 10:37, modifié 1 fois.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Outil UNICODE

Message par Zorro »

MLD a écrit : Je vois toujours pas pourqoi un changement de police soit utile ?.
ben c'est pourtant tres simple , toute les polices de caracteres, ne disposent pas de tout les caracteres !

dans le cadre d'un prg, et pour une police précise ,ça permet de vérifier , que cette police, permet bien d'afficher Tel ou tel caractere ...
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Outil UNICODE

Message par MLD »

@Zorro
Je suppose que prenant une police standart Microsoft, que Windows étant en unicode, tout devrais être compatible.
Dailleur tape en hexa dans l'outil (26FD) par exemple c'est quand même surprnant non 8O :lol:
Sauf pour de l'exotisme :mrgreen:
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Outil UNICODE

Message par MLD »

@Zorro

Mais si tu as des exemples fait voir.
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Outil UNICODE

Message par PAPIPP »

Bonjour à tous

Essayez les polices suivantes symbol , Marlett, Msoutlook, Webding …..ETC.. par exemple
d'autre part toute les polices ne sont pas unicode. EX: Avec l'indice 20000 différence entre la police Tahoma et Arialuni (unicode de MS)
Voir https://fr.wikipedia.org/wiki/Table_des ... 0000-0FFF) tous les sous-ensembles
Enfin on peut créer sa propre police

A+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Outil UNICODE

Message par Zorro »

@Papipp

non pas vraiment, ce que je demandais, c'etait de pouvoir changer de fonte a la volée
et pas seulement au lancement (voir plus loin :) )

@MLD

utilises ce code , entre le code 376 (Ÿ)
je ne sais pas si tu as beaucoup de fontes installées sur ton ordi
mais tu verra que le caracteres est bien présent dans beaucoup de fontes, mais pas toutes !
(une fois que tu as selectionné la premiere fonte de la liste
utilise la fleche du bas pour faire defiler et voir ce qui se passe ;) (ça va plus vite que de choisir a chaque fois )

chez moi le caractere 376 n'existe pas dans les polices :
@FangSong
@KaiTi
@SimHei
Courier
FixedSys
Marlett
Ms Sans Serif
Ms Serif
Symbol <<<bon c'est normal
System
Webdings

voila ;)

le code :

Code : Tout sélectionner

; Code-Unicode By MLD le 19/09/2016
;PB 5.43LTS. Compilation uni_code
Enumeration
		#Ma_fen = 0
		#txt_1 = 1
		#string_1 = 2
		#string_2 = 3
		#string_3 = 4
		#bt_p = 5
		#bt_m = 6
		#CheckBox_num = 7
		#CheckBox_car = 8
		#Bt_copie = 9
		#Bt_Raz = 10
		#Bt_stop = 11
		#Etic_1 = 12
		#Etic_2 = 13
		#Etic_3 = 14
		;Zorro
		#Combo_fonte
		#Gadget_text
		#fonte
EndEnumeration
; **************Zorro **********************

Global Dim Fonts.S(0), CountFonts.L=0, i.L,fonte$
;**************************************

Declare gestioncaret(gadget) ; gestion du caret dans stringgadget
Declare convert(n)
Declare afcarac(nc)
Declare carnum(car$)
;*** Zorro ***
Declare enumfontfamproc(*lpelf.enumlogfont, *lpntm.newtextmetric , fonttype, lparam)
Declare loadsysfonts()
;************


Declare afcarac(nc)
Global FontID1 = LoadFont(30,"Tahoma",12,#PB_Font_Bold)
Global FontID2 = LoadFont(31,"Tahoma",36,#PB_Font_HighQuality)
Global FontID3 = LoadFont(32,"Tahoma",12,#PB_Font_HighQuality)
Global A$ = "NUL;SOH;STX;ETX;EOT;ENQ;ACK;BEL;BS;HT;LF;VT;FF;CR;SO;SI;DLE;DC1;DC2;DC3;DC4;NAK;SYN;ETB;CAN;EM;SUB;ESC;FS;GS;RS;US;SP;"
Macro Selecte(num)
		If num = 1 Or num = 3   
				SetGadgetColor(2,#PB_Gadget_BackColor,$FFFFFF)
				SetGadgetColor(3,#PB_Gadget_BackColor,$2FFFAD)
				SetGadgetColor(4,#PB_Gadget_BackColor,$2FFFAD)
				DisableGadget(2,1):DisableGadget(3,0):DisableGadget(4,0)
				DisableGadget(5,0):DisableGadget(6,0)
				If num = 3
						SetGadgetText(2,"NUL")
						SetGadgetText(3,"0")
						SetGadgetText(4,"00")
				EndIf 
		Else
				SetGadgetColor(2,#PB_Gadget_BackColor,$2FFFAD)
				SetGadgetColor(3,#PB_Gadget_BackColor,$FFFFFF)
				SetGadgetColor(4,#PB_Gadget_BackColor,$FFFFFF)
				For x = 2 To 4
						SetGadgetText(x,"")
				Next
				DisableGadget(2,0):DisableGadget(3,1):DisableGadget(4,1)
				DisableGadget(5,1):DisableGadget(6,1)
		EndIf 
EndMacro;<
		
;]
OpenWindow(#Ma_fen,600,200,300,450,"Code Unicode",#PB_Window_BorderLess | #PB_Window_Invisible)
SetClassLongPtr_(WindowID(#Ma_fen),#GCL_STYLE,$00020000)

HideWindow(#Ma_fen,0)
StickyWindow(#Ma_fen,1)
; gadgets
N$ = "   CODE  UNICODE"
For x = 1 To Len(N$)
		L$ = L$ + Mid(N$,x,1) + Chr(10)
Next
TextGadget(1,0,0,30,400,L$,#PB_Text_Center) ;#Gadget_text
SetGadgetColor(1,#PB_Gadget_BackColor,$45DDB0)
SetGadgetFont(1,FontID1)
StringGadget(2,50,50,140,65,"NUL",#ES_CENTER)
SendMessage_(GadgetID(2),#EM_LIMITTEXT,4, 0)
SetGadgetFont(2,FontID2)
StringGadget(3,50,170,120,25,"0",#ES_CENTER|#PB_String_Numeric)
SetGadgetFont(3,FontID1)
StringGadget(4,50,235,120,25,"00",#ES_CENTER|#PB_String_UpperCase)
SetGadgetFont(4,FontID1)
ButtonGadget(5,210,177,40,40,"+")
SetGadgetFont(5,FontID1)
ButtonGadget(6,210,218,40,40,"-")
SetGadgetFont(6,FontID1)
CheckBoxGadget(7,50,290,180,25,"Recherche par numéro")
CheckBoxGadget(8,50,320,200,25,"Recherche par caractère")
ButtonGadget(9,62,360,80, 30,"Copie")
ButtonGadget(10,141,360,60, 30,"Raz")
ButtonGadget(11,200,360,80, 30,"Stop")
TextGadget(12,50,20,140,25,"Caractère",#PB_Text_Center)
TextGadget(13,50,140,120,25,"Code décimal",#PB_Text_Center)
TextGadget(14,50,205,140,25,"Code héxadécimal",#PB_Text_Center)
For b = 7 To 14
		SetGadgetFont(b,FontID3)
Next

; Zorro
ComboBoxGadget(#Combo_fonte, 60,400,150,30)
LoadSysFonts() ; on scan les fontes du system
SetGadgetState(#Combo_fonte, 1)
fonte$=GetGadgetItemText(#Combo_fonte,  GetGadgetState(#Combo_fonte) )
If   LoadFont(#fonte,Trim(fonte$),24) And fonte$<>""                              ;   
		SetGadgetFont(2, FontID(#fonte))			
EndIf	;<	
		;  Taches préparatoires
		SetGadgetState(7,#PB_Checkbox_Checked)
		Selecte(1)
		;  Boucle générale
		Repeat
				Event = WaitWindowEvent()
				If Event = #WM_LBUTTONDOWN
						SendMessage_(WindowID(#Ma_fen), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
				EndIf
				If Event = #PB_Event_Gadget
						Select EventGadget()
						Case 2 ;string caractere
								Select EventType()
								Case #PB_EventType_Change
										carnum(GetGadgetText(2))
								EndSelect   
						Case 3 ;string décimale
								Select EventType()
								Case #PB_EventType_Change       
										convert(1)
								EndSelect   
						Case 4 ;string hexa 
								Select EventType()
								Case #PB_EventType_Change
										convert(2)
								EndSelect
						Case 5 ;bt +
								p = Val(GetGadgetText(3))+1
								SetGadgetText(3,Str(P))
								convert(1)
						Case 6 ;bt -
								If Val(GetGadgetText(3)) > 0
										M = Val(GetGadgetText(3)) -1
										SetGadgetText(3,Str(M))
										convert(1)
								EndIf 
						Case 7 ;checKbox num
								SetGadgetState(7,#PB_Checkbox_Checked)
								SetGadgetState(8,#PB_Checkbox_Unchecked)
								Selecte(1)
						Case 8 ;checKbox car
								SetGadgetState(8,#PB_Checkbox_Checked)
								SetGadgetState(7,#PB_Checkbox_Unchecked)
								For z = 3 To 4
										SetGadgetText(z,"")
								Next
								Selecte(2)
								SetActiveGadget(2)
						Case 9 ;bt copie
								ClearClipboard()
								If GetGadgetState(7)= 1
										SetClipboardText(GetGadgetText(2))
								Else
										SetClipboardText(GetGadgetText(4))
								EndIf 
						Case 10 ;bt_raz
								SetGadgetState(7,#PB_Checkbox_Checked)
								SetGadgetState(8,#PB_Checkbox_Unchecked)
								Selecte(3)   
						Case 11 ;bt_stop
								CloseWindow(0) 
								Break
						Case #Combo_fonte
								fonte$=GetGadgetItemText(#Combo_fonte,  GetGadgetState(#Combo_fonte) ) 
								If   LoadFont(#fonte,Trim(fonte$),12) And fonte$<>""										;	 
										;SetGadgetFont(#PB_Default, FontID(#fonte))
										SetGadgetFont(2, FontID(#fonte))
								EndIf
						EndSelect
				EndIf
		ForEver
		End
		
		
		;-zone Procedures
		
		Procedure GestionCaret(Gadget) ; Gestion du caret dans stringGadget
				SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)   
				y = Debut_Position
				Texte.s = GetGadgetText(Gadget)
				x =Len(Texte)
				Texte2.s = Left(Texte,y ) + Right(Texte,x-y)
				SendMessage_(GadgetID(Gadget), #EM_SETSEL, x, x)
		EndProcedure
		
		Procedure convert(n)
				If n = 1
						SetGadgetText(4,Hex(Val(GetGadgetText(3))))
				EndIf
				If n = 2
						SetGadgetText(3,Str(Val("$" + GetGadgetText(4))))
				EndIf
				If GetGadgetState(7) = 1
						afcarac(Val(GetGadgetText(3)))
				EndIf 
		EndProcedure
		
		Procedure afcarac(nc)
				If nc < 33
						car$ = StringField(A$,nc+1,";")
				Else
						car$ = Chr(nc)
				EndIf
				If nc = 127:car$ = "DEL":EndIf
				If nc = 160:car$ = "NBSP":EndIf
				SetGadgetText(2,car$)
		EndProcedure
		
		Procedure carnum(car$)
				If Len(car$) >1
						SetGadgetText(2,UCase(car$))
						GestionCaret(2)
						car$ = GetGadgetText(2)
						For c  = 1 To 32
								If car$ = StringField(A$,c+1,";")
										num = c
										Break
								EndIf
						Next
						If car$ = "DEL" :num = 127:EndIf
						If car$ = "NBSP" :num = 160:EndIf
						SetGadgetText(3,Str(num))
						convert(1)
				Else
						SetGadgetText(3,Str(Asc(GetGadgetText(2))))
						convert(1)
				EndIf
		EndProcedure 
		
		
		; Zorro 
		Procedure EnumFontFamProc(*lpelf.ENUMLOGFONT, *lpntm.NEWTEXTMETRIC , FontType, lParam)
				CountFonts=CountFonts+1
				ReDim Fonts(CountFonts)
				Fonts(CountFonts-1)=PeekS(@*lpelf\elfLogFont\lfFaceName[0])
				ProcedureReturn 1
		EndProcedure
		;Chargement des fonts system
		Procedure LoadSysFonts()
				hwnd = GetDesktopWindow_()
				hdc = GetDC_(hwnd)
				EnumFontFamilies_(hdc, 0, @EnumFontFamProc(), 0)
				ReleaseDC_ (hwnd, hdc)
				SortArray(Fonts(), #PB_Sort_Ascending | #PB_Sort_NoCase)
				For i=1 To CountFonts-1
						AddGadgetItem(#Combo_fonte, -1, Fonts(i))
				Next i
		EndProcedure
ps: tu codes comme un cochon !! :lol:
utilisation de chiffres au lieu de constantes .... creation d'une macro ayant le meme nom qu'une fonction Purebasic "select"
(qui a reussi a mettre en vrac mon Tabuleur )
ben c'est pas simple de passer derriere toi :roll: :)

je m'empresse d'ajouter que ton prg est bien cool :)

d'ailleurs me permet tu de le distribuer avec mon EPB ?
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre