Outil UNICODE (version 2)

Programmation d'applications complexes
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Outil UNICODE (version 2)

Message par MLD »

Bonjour a tous

Suite aux remarques positives de certains, voici la version de cet outil.
Il comporte maintenant une recherche rapide par thème. J'ai choisis les thème de manière forcément arbitraire. Si cela ne convient pas
a certains, comme je donne le code, ils éffecturont les modifications qu'il souhaitent.

Zorro! Tu peu inclure dans ton logiciel :lol: :lol:

Fonctionnement:
1° Recherche par numéro
Tapez un chiffre dédimal ou héxadécimal dans la case appropriée et le cractère s'affiche. Un appuis sur copié met le caractère
dans presse papier

2° Recherche par caractère.
Tapez, ou importez par le presse papier un caractère dans la case appropriée, le code décimal et hexadécimale s'affichent.
Un appuis sur copié met le code héxadécimale dans le presse papier.

3° Recherche par thème. (Ne fonctionne que si la case recherche par numéro est coché.)
Cochez la case du thème souhaité. Le premier caracactère du thème s'affiche. déplacez vous avec les boutons + -
Un appuis sur copié met le caractère dans presse papier

Code : Tout sélectionner

; Code-Unicode By MLD le 19/09/2016
;PB 5.43LTS. Compilation unicode
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
  #Etic_4 = 15
  #CheckBox_th_1 = 16
  #CheckBox_th_2 = 17
  #CheckBox_th_3 = 18
  #CheckBox_th_4 = 19
  #CheckBox_th_5 = 20
  #CheckBox_th_6 = 21
  #CheckBox_th_7 = 22
  #CheckBox_th_8 = 23
  #CheckBox_th_9 = 24
  #CheckBox_th_10 = 25
  #CheckBox_th_11 = 26
  #CheckBox_th_12 = 27
  #CheckBox_th_13 = 28
  #CheckBox_th_14 = 29
  #CheckBox_th_15 = 30
  #CheckBox_th_16 = 31
  #CheckBox_th_17 = 32
  #CheckBox_th_18 = 33
  #CheckBox_th_19 = 34
  #traitvert = 35
EndEnumeration
Declare afcarac(nc)
Global FontID1 = LoadFont(50,"Tahoma",12,#PB_Font_Bold)
Global FontID2 = LoadFont(51,"Tahoma",36,#PB_Font_HighQuality)
Global FontID3 = LoadFont(52,"Tahoma",12,#PB_Font_HighQuality)
Global FontID4 = LoadFont(53,"Tahoma",11,#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 Selects(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)
   For d = 16 To 34
     DisableGadget(d,0) 
   Next  
   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)
   For d = 16 To 34
     DisableGadget(d,1) 
   Next  
 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

Procedure gestion_check(numcarac)
  For ck = 16 To 34
   SetGadgetState(ck,#PB_Checkbox_Unchecked) 
  Next
  Select numcarac
    Case 0 To 591;Latin
      numchek = 16
    Case 7680 To 7935 ;Latin étendu
      numchek = 17
    Case 1024 To 1327 ;Cyrillique  
      numchek = 18
    Case 880 To 1023 ;Grecque 
      numchek = 19  
    Case 1424 To 1535 ;Hebreu 
      numchek = 20    
    Case 1536 To 1791 ;Arabe 
      numchek = 21     
    Case 8448 To 8587 ;Symboles de lettre 
      numchek = 22    
    Case 8352 To 8399 ;Symboles courants 
      numchek = 23     
    Case 9728 To 10175 ;Symboles divers 
      numchek = 24     
    Case 9472 To 9599 ;Box drawing 
      numchek = 25    
    Case 9632 To 9727 ;Figures géométriques 
      numchek = 26      
    Case 9312 To 9471 ;(Alphanum) 
      numchek = 27    
    Case 8592 To 8703 ;Flèches 
      numchek = 28     
    Case 10496 To 10623 ;Supplément flèches  
      numchek = 29  
    Case 10176 To 10223 ;Symboles math A  
      numchek = 30    
    Case 10624 To 10751 ;Symboles math B  
      numchek = 31      
    Case 8704 To 8956 ;Opérateur math A  
      numchek = 32  
    Case 10752 To 11007 ;Opérateur math B  
      numchek = 33    
    Default
     numchek = 34 
  EndSelect    
  If numcarac <> -1
   SetGadgetState(numchek,#PB_Checkbox_Checked)
   SetGadgetText(3,Str(numcarac))
   convert(1)
  EndIf 
EndProcedure  

OpenWindow(#Ma_fen,600,200,515,580,"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,580,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,180,120,25,"0",#ES_CENTER|#PB_String_Numeric)
SetGadgetFont(3,FontID1)
StringGadget(4,50,280,120,25,"00",#ES_CENTER|#PB_String_UpperCase)
SetGadgetFont(4,FontID1)
ButtonGadget(5,210,190,40,40,"+")
SetGadgetFont(5,FontID1)
ButtonGadget(6,210,248,40,40,"-")
SetGadgetFont(6,FontID1)
CheckBoxGadget(7,50,360,200,25,"Recherche par numéro")
CheckBoxGadget(8,50,420,200,25,"Recherche par caractère")
ButtonGadget(9,282,540,80, 30,"Copie")
ButtonGadget(10,361,540,60, 30,"Raz")
ButtonGadget(11,420,540,80, 30,"Stop")
TextGadget(12,50,20,140,25,"Caractère",#PB_Text_Center)
SetGadgetColor(12,#PB_Gadget_FrontColor,$FF0000)
TextGadget(13,50,150,120,25,"Code décimal",#PB_Text_Center)
TextGadget(14,50,250,140,25,"Code héxadécimal",#PB_Text_Center)
TextGadget(15,280,20,190,25,"Recherche par thème",#PB_Text_Center)
SetGadgetColor(15,#PB_Gadget_FrontColor,$FF0000)
For b = 7 To 15
  SetGadgetFont(b,FontID3)
Next
CheckBoxGadget(16,295,50,220,20,"Latin standard")
CheckBoxGadget(17,295,75,220,20,"Latin étendu")
CheckBoxGadget(18,295,100,220,20,"Cyrillique")
CheckBoxGadget(19,295,125,220,20,"Grecque")
CheckBoxGadget(20,295,150,220,20,"Hébreu")
CheckBoxGadget(21,295,175,220,20,"Arabe")
CheckBoxGadget(22,295,200,220,20,"Symboles de lettres")
CheckBoxGadget(23,295,225,220,20,"Symboles courants")
CheckBoxGadget(24,295,250,220,20,"Symboles divers")
CheckBoxGadget(25,295,275,220,20,"Box drawing")
CheckBoxGadget(26,295,300,220,20,"Figures géométriques")
CheckBoxGadget(27,295,325,220,20,"(Alphanumérique)")
CheckBoxGadget(28,295,350,220,20,"Flèches")
CheckBoxGadget(29,295,375,220,20,"Supplément flèches")
CheckBoxGadget(30,295,400,220,20,"Symboles mathématiques A")
CheckBoxGadget(31,295,425,220,20,"Symboles mathématiques B")
CheckBoxGadget(32,295,450,220,20,"Opérateurs mathématiques A")
CheckBoxGadget(33,295,475,220,20,"Opérateurs mathématiques B")
CheckBoxGadget(34,295,500,220,20,"Autres")
For b = 16 To 34
  SetGadgetFont(b,FontID4)
Next
TextGadget(35,270,90,1,390,"");trait vert
SetGadgetColor(35,#PB_Gadget_BackColor,$FF00FF)
;  Taches préparatoires
SetGadgetState(7,#PB_Checkbox_Checked)
Selects(1)
gestion_check(Val(GetGadgetText(3)))
;  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))
            gestion_check(Val(GetGadgetText(3)))
        EndSelect    
      Case 3 ;string décimale
        Select EventType()
         Case #PB_EventType_Change       
           gestion_check(Val(GetGadgetText(3)))
           GestionCaret(3)
        EndSelect    
      Case 4 ;string hexa  
        Select EventType()
          Case #PB_EventType_Change
            convert(2) 
            gestion_check(Val(GetGadgetText(3)))
            GestionCaret(4)
       EndSelect
     Case 5 ;bt +
        p = Val(GetGadgetText(3))+1
        SetGadgetText(3,Str(P))
        gestion_check(Val(GetGadgetText(3)))
      Case 6 ;bt -
        If Val(GetGadgetText(3)) > 0
          M = Val(GetGadgetText(3)) -1
          SetGadgetText(3,Str(M))
          gestion_check(Val(GetGadgetText(3)))
        EndIf  
      Case 7 ;checKbox num
        SetGadgetState(7,#PB_Checkbox_Checked)
        SetGadgetState(8,#PB_Checkbox_Unchecked)
        Selects(1)
      Case 8 ;checKbox car
        SetGadgetState(8,#PB_Checkbox_Checked)
        SetGadgetState(7,#PB_Checkbox_Unchecked)
        For z = 3 To 4
          SetGadgetText(z,"")
        Next
        Selects(2)
        SetActiveGadget(2)
      Case 16 ;checKbox latin
        gestion_check(0)
      Case 17 ;checKbox latin étendu
        gestion_check(7680)
      Case 18 ;checKbox cyrillique
        gestion_check(1024)  
      Case 19 ;checKbox Grecque
        gestion_check(880) 
      Case 20 ;checKbox Hebreu
        gestion_check(1424)   
      Case 21 ;checKbox Arabe
        gestion_check(1536)     
      Case 22 ;checKbox Symboles de lettre
        gestion_check(8448)    
      Case 23 ;checKbox Symboles courant
        gestion_check(8352)    
      Case 24 ;checKbox Symboles divers
        gestion_check(9728)   
      Case 25 ;checKbox Box drawing
        gestion_check(9472)     
      Case 26 ;checKbox Figures géométriques
        gestion_check(9632)      
      Case 27 ;checKbox (Alphanum)
        gestion_check(9312)   
      Case 28 ;checKbox Flèches
        gestion_check(8592)   
      Case 29 ;checKbox Supplément flèches
        gestion_check(10496)  
      Case 30 ;Symboles math A 
        gestion_check(10176)      
      Case 31 ;Symboles math B 
        gestion_check(10624)      
      Case 32 ;Opérateurs math A 
        gestion_check(8704)        
      Case 33 ;Opérateurs math B 
        gestion_check(10752)
      Case 34 ;autres
         gestion_check(-1)
      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)
        gestion_check(0)
        Selects(3)    
      Case 11 ;bt_stop 
      CloseWindow(0)  
      Break
   EndSelect
 EndIf
ForEver
End
Dernière modification par MLD le sam. 24/sept./2016 8:29, modifié 2 fois.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Outil UNICODE (version 2)

Message par Micoute »

Merci beaucoup MLD, c'est du très bon travail, j'adore !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Outil UNICODE (version 2)

Message par Zorro »

Merci :)

si quelqu'un veux le meme code avec le choix de la fonte en plus
ya qu'a demander .. :)
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 (version 2)

Message par MLD »

Bonjour a tous

Merçi a Zorro et Micoute

heu! petit bug :oops: Le code est modifier dans le 1er post :lol:
Répondre