Pour les amateurs d'unicode

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

Pour les amateurs d'unicode

Message par MLD »

Bonjours a tous
voici la nouvelle version de mon visualiseur de code Unicode.
Maintenant un clique dans la liste et vous avez le code décimal et hexa.
Pour cliquer dans la liste ,il faut que recherche par numéro soit coché.

Code : Tout sélectionner

; Code-Unicode By MLD le 19/09/2016 modifier le 27/10/2017
;PB 5.60. Compilation unicode
;**** constantes ****
#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:#listfont = 36:#conteneur = 37:#listcaract = 38:#imgtxt =39  

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 FontID5 = LoadFont(54,"Tahoma",24,#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;"
Global min,max
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 afflist(*valeur)
 ClearGadgetItems(38)
 For Z = min To max
  CreateImage(39,40,40,32,$D7C2C2)
  StartDrawing(ImageOutput(39))
   DrawingFont(FontID5)
   largtxt = TextWidth(Chr(Z));largeur txt
   hauttxt = TextHeight(Chr(Z));hauteur txt
   DrawText((40-largtxt)/2,(40-hauttxt)/2, Chr(Z),$FF0000,$D7C2C2)
  StopDrawing()
  AddGadgetItem(38,-1,Str(Z),ImageID(39))
  FreeImage(39)
 Next 
 SendMessage_(GadgetID(38),#WM_SETREDRAW,1,0) ; on redessine la liste
EndProcedure  

Procedure gestion_check(numcarac);************
  Static D2
  For ck = 16 To 34
   SetGadgetState(ck,#PB_Checkbox_Unchecked)
  Next
  Select numcarac
    Case 0 To 591;Latin
      numchek = 16:min = 0:max = 591:D=1
    Case 7680 To 7935 ;Latin étendu
      numchek = 17:min = 7680:max = 7935:D=2
    Case 1024 To 1327 ;Cyrillique 
      numchek = 18:min = 1024:max = 1327:D=3
    Case 880 To 1023 ;Grecque
      numchek = 19:min = 880:max = 1023:D=4
    Case 1424 To 1535 ;Hebreu
      numchek = 20:min = 1424:max = 1535:D=5   
    Case 1536 To 1791 ;Arabe
      numchek = 21:min = 1536:max = 1791:D=6     
    Case 8448 To 8587 ;Symboles de lettre
      numchek = 22:min = 8448:max = 8587:D=7    
    Case 8352 To 8399 ;Symboles courants
      numchek = 23:min = 8352:max = 8399:D=8       
    Case 9728 To 10175 ;Symboles divers
      numchek = 24:min = 9728:max = 10175:D=9       
    Case 9472 To 9599 ;Box drawing
      numchek = 25:min = 9472:max = 9599:D=10     
    Case 9632 To 9727 ;Figures géométriques
      numchek = 26:min = 9632:max = 9727:D=11       
    Case 9312 To 9471 ;(Alphanum)
      numchek = 27 :min = 9312:max = 9471:D=12    
    Case 8592 To 8703 ;Flèches
      numchek = 28:min = 8592:max = 8703:D=13       
    Case 10496 To 10623 ;Supplément flèches 
      numchek = 29:min = 10496:max = 10623:D=14   
    Case 10176 To 10223 ;Symboles math A 
      numchek = 30:min = 10176:max = 10223:D=15     
    Case 10624 To 10751 ;Symboles math B 
      numchek = 31:min = 10624:max = 10751:D=16       
    Case 8704 To 8956 ;Opérateur math A 
      numchek = 32:min = 8704:max = 8956 :D=17  
    Case 10752 To 11007 ;Opérateur math B 
      numchek = 33:min = 10752:max = 11007:D=18     
    Default
     numchek = 34:min = Val(GetGadgetText(3)):max = min +300 :D= Random(100,19)
 
 EndSelect
  If  D <> D2;pour ne pas déssiné la liste a chaque fois
    CreateThread(@afflist(),1)
    D2 = D
  EndIf
  If numcarac <> -1
   SetGadgetState(numchek,#PB_Checkbox_Checked)
   SetGadgetText(3,Str(numcarac))
   convert(1)
  EndIf
EndProcedure 

OpenWindow(#Ma_fen,600,200,1050,580,"Code Unicode",#PB_Window_BorderLess | #PB_Window_Invisible | #PB_Window_ScreenCentered)
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,792,540,80, 30,"Copie")
ButtonGadget(10,871,540,60, 30,"Raz")
ButtonGadget(11,930,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)
ContainerGadget(37,530,30,500,490,#PB_Container_Double) 
ListIconGadget(38,0,0,500,490, "Column 1", 100)
SendMessage_(GadgetID(38),#WM_SETREDRAW,0,0) ; le gadget n'est pas redessiné après un changement
SetGadgetColor(38,#PB_Gadget_BackColor,$D7C2C2)
SetGadgetAttribute(38,#PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
CloseGadgetList()
;  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 + **************************
       If Val(GetGadgetText(3))< 119199;pour nr pas avoir de dépassement
        p = Val(GetGadgetText(3))+1
        SetGadgetText(3,Str(P))
        gestion_check(Val(GetGadgetText(3)))
       EndIf  
      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 38;liste
       Select EventType()
         Case #PB_EventType_LeftClick
           If GetGadgetState(7) = 1;seulement par les numéros
             SetGadgetText(3,GetGadgetItemText(38, GetGadgetState(38) ,0))
             convert(1)
           EndIf  
       EndSelect      
      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
Zorro comme la dernière fois Tu as l'autorisation de l'inclure dans ton RAD (Pas le bistro) :mrgreen: :D
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Pour les amateurs d'unicode

Message par Micoute »

Très bon, j'adore, merci pour le partage.
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
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pour les amateurs d'unicode

Message par Kwai chang caine »

Cool merci pour le partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Pour les amateurs d'unicode

Message par MLD »

@ Micoute et KCC
Merci.
J'ai omis de dire que la copie c'est dans le presse papier.
Répondre