
Ce sont des commandes window ainsi qu'une multitude de commande pour faire des tableau style excel.
Ce n'est qu'un début mais les cellules, les bordures, les éditions, sélections, redimensionnement, police (taille,couleur,font),la fusino des cellules sont déjà en place.
J'aurai pu faire directement une image sur fenetre mais lorsque j'ai commencé je suis parti avec un gadgetimage au cas ou pour avoir plus de controle.
le fichier pour gérer les tableau. Le post suivant il y a le code kwin qui sert aux évènements.
Code : Tout sélectionner
XIncludeFile "kwin.pbi"
;--***** commande interne
Procedure kwar_init_tableau()
Structure struct
id_fenetre.l
id.l
nb_case.l
id_case.l
id_image.l
id_imagegadget.l
id_edit.l
largeur.l
hauteur.l
nb_col.l
nb_ligne.l
posx.l
posy.l
position_bordure.l
largeur_bordure.l
bordure_gauche.l
bordure_haut.l
bordure_droite.l
bordure_bas.l
couleur_bordure_g.l
couleur_bordure_h.l
couleur_bordure_d.l
couleur_bordure_b.l
num_col.l
num_ligne.l
color_bordure.l
color_fond_case.l
texte.s
sens_texte.l
color_texte_case.l
mode_backtexte.l
color_backtexte.l
font_texte_case.l
posx_case.l
posy_case.l
align_texte_h_case.l
align_texte_v_case.l
user_tx_colonne.l
user_tx_ligne.l
tx_colonne.l
tx_ligne.l
etat_case.l
mode_etat.l
EndStructure
#left_border = 1
#top_border = 10
#right_border = 100
#bottom_border = 1000
#all_border = 1111
#kwar_text_center = #PB_Text_Center
#kwar_text_right = #PB_Text_Right
#kwar_text_left = 1244
#kwar_text_top = 1245
#kwar_text_bottom = 1246
#kwar_text_sensH = 1247
#kwar_text_sensV = 1248
#kwar_copy_text = 1249
#kwar_copy_all = 1250
#kwar_noselected = 1251
#kwar_selected = 1252
#kwar_oneselect = 1253
#kwar_multiselect = 1254
Enumeration
#retour
EndEnumeration
Global NewList kwar_tableau.struct()
Global kwar_creation_liste = 1
EndProcedure
Macro kwar_calcul_taille_cellule(id)
;taille des colonne
SelectElement(kwar_tableau(),kwar_get_index(id))
largeur_tableau = kwar_tableau()\largeur
hauteur_tableau = kwar_tableau()\hauteur
nb_col = kwar_tableau()\nb_col
nb_lg = kwar_tableau()\nb_ligne
nb_case = kwar_tableau()\nb_case
largeur_bordure = kwar_tableau()\largeur_bordure
espace_colonne = largeur_tableau-(largeur_bordure*(nb_col+1))
espace_ligne = hauteur_tableau-(largeur_bordure*(nb_lg+1))
user_colonne = 0
user_ligne = 0
compteur_col = nb_col
For icol=1 To nb_col
kwar_select_case(id,1,icol)
If kwar_tableau()\user_tx_colonne>0
espace_colonne = espace_colonne-kwar_tableau()\user_tx_colonne
user_colonne = user_colonne + kwar_tableau()\user_tx_colonne
compteur_col = compteur_col-1
EndIf
Next
compteur_lg = nb_lg
For ilg=1 To nb_lg
kwar_select_case(id,ilg,1)
If kwar_tableau()\user_tx_ligne>0
espace_ligne = espace_ligne-kwar_tableau()\user_tx_ligne
user_ligne = user_ligne + kwar_tableau()\user_tx_ligne
compteur_lg = compteur_lg-1
EndIf
Next
If compteur_col>0
tx_colonne = espace_colonne/compteur_col
EndIf
If compteur_lg>0
tx_ligne = espace_ligne/compteur_lg
EndIf
largeur = user_colonne+(tx_colonne*compteur_col)+((nb_col+1)*largeur_bordure)
hauteur = user_ligne+(tx_ligne*compteur_lg)+((nb_lg+1)*largeur_bordure)
SelectElement(kwar_tableau(),kwar_get_index(id))
kwar_tableau()\largeur = largeur
kwar_tableau()\hauteur = hauteur
ResizeGadget(kwar_tableau()\id_imagegadget, kwar_tableau()\posx, kwar_tableau()\posy, largeur, hauteur)
ResizeImage(kwar_tableau()\id_image, largeur, hauteur)
For i=1 To nb_case
NextElement(kwar_tableau())
If kwar_tableau()\user_tx_colonne=0
kwar_tableau()\tx_colonne = tx_colonne
EndIf
If kwar_tableau()\user_tx_ligne=0
kwar_tableau()\tx_ligne = tx_ligne
EndIf
Next
EndMacro
Procedure kwar_get_index(id.l)
dep_tableau = 0
FirstElement(kwar_tableau())
ForEach kwar_tableau()
If kwar_tableau()\id = id
dep_tableau = ListIndex(kwar_tableau())
Break
EndIf
Next
ProcedureReturn dep_tableau
EndProcedure
Procedure kwar_get_count_column(id.l)
SelectElement(kwar_tableau(),kwar_get_index(id))
count_colonne = kwar_tableau()\nb_col
ProcedureReturn count_colonne
EndProcedure
Procedure kwar_get_count_line(id.l)
SelectElement(kwar_tableau(),kwar_get_index(id))
count_ligne = kwar_tableau()\nb_ligne
ProcedureReturn count_ligne
EndProcedure
Procedure.b kwar_select_case(id.l,ligne.l,colonne.l)
retour = 1
If ligne>0 And colonne>0
count_ligne = kwar_get_count_line(id)
count_colonne = kwar_get_count_column(id)
If ligne<=count_ligne And colonne<=count_colonne
idcase = ((ligne-1)*count_colonne)+colonne
SelectElement(kwar_tableau(),kwar_get_index(id)+idcase)
Else
retour = 0
EndIf
Else
retour = 0
EndIf
ProcedureReturn retour
EndProcedure
Procedure kwar_dessiner_bordure(casex.l,casey.l,largeur_bordure.l,couleur_bordure.l)
bordure = kwar_tableau()\position_bordure
bordure_g = kwar_tableau()\bordure_gauche
bordure_h = kwar_tableau()\bordure_haut
bordure_d = kwar_tableau()\bordure_droite
bordure_b = kwar_tableau()\bordure_bas
col_bor_g = kwar_tableau()\couleur_bordure_g
col_bor_h = kwar_tableau()\couleur_bordure_h
col_bor_d = kwar_tableau()\couleur_bordure_d
col_bor_b = kwar_tableau()\couleur_bordure_b
If Mid(Str(bordure),5,1)= "1" ; bordure gauche
Box(casex,casey,largeur_bordure,kwar_tableau()\tx_ligne+(2*largeur_bordure),couleur_bordure)
Box(casex+largeur_bordure,casey,bordure_g,kwar_tableau()\tx_ligne+(2*largeur_bordure),col_bor_g)
EndIf
If Mid(Str(bordure),4,1)= "1" ;bordure top
Box(casex,casey,kwar_tableau()\tx_colonne+(2*largeur_bordure),largeur_bordure,couleur_bordure)
Box(casex+largeur_bordure,casey+largeur_bordure,kwar_tableau()\tx_colonne+(2*largeur_bordure),bordure_h,col_bor_h)
EndIf
If Mid(Str(bordure),3,1)= "1" ;bordure droite
Box(casex+kwar_tableau()\tx_colonne+largeur_bordure,casey,largeur_bordure,kwar_tableau()\tx_ligne+(2*largeur_bordure),couleur_bordure)
Box(casex+kwar_tableau()\tx_colonne+largeur_bordure-bordure_d,casey+largeur_bordure,bordure_d,kwar_tableau()\tx_ligne+(2*largeur_bordure),col_bor_d)
EndIf
If Mid(Str(bordure),2,1)= "1" ;bordure basse
Box(casex,casey+kwar_tableau()\tx_ligne+largeur_bordure,kwar_tableau()\tx_colonne+(2*largeur_bordure),largeur_bordure,couleur_bordure)
Box(casex+largeur_bordure,casey+kwar_tableau()\tx_ligne+largeur_bordure-bordure_b,kwar_tableau()\tx_colonne+(2*largeur_bordure),bordure_b,col_bor_b)
EndIf
EndProcedure
Procedure kwar_draw_select(casex.l,casey.l,largeur_bordure.l)
bordure = kwar_tableau()\position_bordure
If Mid(Str(bordure),5,1)= "1" ; bordure gauche
Box(casex,casey,2,kwar_tableau()\tx_ligne+(4),RGB(50,50,50))
EndIf
If Mid(Str(bordure),4,1)= "1" ;bordure top
Box(casex,casey,kwar_tableau()\tx_colonne+(4),2,RGB(50,50,50))
EndIf
If Mid(Str(bordure),3,1)= "1" ;bordure droite
Box(casex+kwar_tableau()\tx_colonne+2,casey,2,kwar_tableau()\tx_ligne+4,RGB(0,0,0))
EndIf
If Mid(Str(bordure),2,1)= "1" ;bordure basse
Box(casex,casey+kwar_tableau()\tx_ligne+2,kwar_tableau()\tx_colonne+2,4,RGB(0,0,0))
EndIf
Box(casex+2,casey+2,kwar_tableau()\tx_colonne-2,kwar_tableau()\tx_ligne-2,RGB(207, 208, 2))
EndProcedure
Procedure.l kwar_detect_idcase(window.l)
;kwin_verif_init() à mettre avec le fichier kwinit
;position souris
souris_x = WindowMouseX(window)
souris_y = WindowMouseY(window)
idwin = kwin_IDover_gadget(WindowID(window))
idpb = kwin_get_idgadget(idwin)
ForEach kwar_tableau()
If kwar_tableau()\id_imagegadget = idpb
Break
EndIf
Next
position_x = souris_x-kwar_tableau()\posx
position_y = souris_y-kwar_tableau()\posy
largeur = kwar_tableau()\largeur
hauteur = kwar_tableau()\hauteur
nb_col = kwar_tableau()\nb_col
nb_lg = kwar_tableau()\nb_ligne
id_tableau = kwar_tableau()\id
For tx=1 To nb_col
kwar_select_case(id_tableau,1,tx)
cellule1 = kwar_tableau()\posx_case
If tx=nb_col
cellule2 = largeur
Else
kwar_select_case(id_tableau,1,tx+1)
cellule2 = kwar_tableau()\posx_case
EndIf
If cellule1<=position_x And cellule2>position_x
colonne = tx
Break
EndIf
Next
For ty=1 To nb_lg
kwar_select_case(id_tableau,ty,1)
cellule1 = kwar_tableau()\posy_case
If ty=nb_lg
cellule2 = hauteur
Else
kwar_select_case(id_tableau,ty+1,1)
cellule2 = kwar_tableau()\posy_case
EndIf
If cellule1<=position_y And cellule2>position_y
ligne = ty
Break
EndIf
Next
kwar_select_case(id_tableau,ligne,colonne)
id_case = kwar_tableau()\id_case
ProcedureReturn id_case
EndProcedure
Procedure.l kwar_idcase_to_line(id.l,idcase.l)
SelectElement(kwar_tableau(),kwar_get_index(id)+idcase)
ligne = kwar_tableau()\num_ligne
ProcedureReturn ligne
EndProcedure
Procedure.l kwar_over_line(window.l,id.l)
idcase = kwar_detect_idcase(window)
ligne = kwar_idcase_to_line(id,idcase)
ProcedureReturn ligne
EndProcedure
Procedure.l kwar_idcase_to_column(id.l,idcase.l)
SelectElement(kwar_tableau(),kwar_get_index(id)+idcase)
colonne = kwar_tableau()\num_col
ProcedureReturn colonne
EndProcedure
Procedure.l kwar_over_column(window.l,id.l)
idcase = kwar_detect_idcase(window)
colonne = kwar_idcase_to_column(id,idcase)
ProcedureReturn colonne
EndProcedure
Procedure kwar_refresh(id.l)
;rafraichit l'affichage du tableau
SelectElement(kwar_tableau(),kwar_get_index(id))
id_imagegadget = kwar_tableau()\id_imagegadget
id_image = kwar_tableau()\id_image
StartDrawing(ImageOutput(kwar_tableau()\id_image))
;Box(0,0,tableau()\largeur,tableau()\hauteur,tableau()\color_bordure);bordure
nb_col = kwar_tableau()\nb_col
nb_lg = kwar_tableau()\nb_ligne
largeur_bordure = kwar_tableau()\largeur_bordure
couleur_bordure = kwar_tableau()\color_bordure
casex = 0;largeur_bordure
casey = 0;largeur_bordure
For lg=1 To nb_lg
For col=1 To nb_col
NextElement(kwar_tableau())
Box(casex,casey,kwar_tableau()\tx_colonne+(2*largeur_bordure),kwar_tableau()\tx_ligne+(2*largeur_bordure),kwar_tableau()\color_fond_case)
kwar_tableau()\posx_case = casex
kwar_tableau()\posy_case = casey
If kwar_tableau()\etat_case = 1 And kwar_tableau()\mode_etat = #kwar_selected
kwar_draw_select(casex,casey,largeur_bordure)
Else
kwar_dessiner_bordure(casex,casey,largeur_bordure,couleur_bordure)
EndIf
axe_x = kwar_tableau()\bordure_droite - kwar_tableau()\bordure_gauche
axe_y = kwar_tableau()\bordure_bas - kwar_tableau()\bordure_haut
DrawingMode(kwar_tableau()\mode_backtexte)
If IsFont(kwar_tableau()\font_texte_case)
DrawingFont(FontID(kwar_tableau()\font_texte_case))
Else
DrawingFont(#PB_Font_Default)
EndIf
l_texte = TextWidth(kwar_tableau()\texte)
h_texte = TextHeight(kwar_tableau()\texte)
Select kwar_tableau()\align_texte_h_case
Case #kwar_text_center
decalh_texte = ((kwar_tableau()\tx_colonne-(l_texte)-axe_x)/2)+largeur_bordure
Case #kwar_text_right
decalh_texte = kwar_tableau()\tx_colonne-(l_texte+1)
Default
decalh_texte = 2 + largeur_bordure
EndSelect
Select kwar_tableau()\align_texte_v_case
Case #kwar_text_center
decalv_texte = ((kwar_tableau()\tx_ligne-h_texte)/2)+largeur_bordure - (axe_y/2)
Case #kwar_text_top
decalv_texte = 2 - axe_y
If decalv_texte <=0
decalv_texte = 0
EndIf
Default
decalv_texte = kwar_tableau()\tx_ligne - h_texte + 1.5*largeur_bordure - axe_y
EndSelect
DrawText(casex+decalh_texte,casey+decalv_texte,kwar_tableau()\texte,kwar_tableau()\color_texte_case,kwar_tableau()\color_backtexte)
casex = casex+kwar_tableau()\tx_colonne+largeur_bordure
Next
casey = casey+kwar_tableau()\tx_ligne+largeur_bordure
casex = 0;largeur_bordure
Next
StopDrawing()
SetGadgetState(id_imagegadget, ImageID(id_image))
EndProcedure
;--***** commande utilisateur
Procedure.l kwar_create(id.l,posx.l,posy.l,largeur.l,hauteur.l,nb_lg.l,nb_col.l)
If kwar_creation_liste = 0
kwar_init_tableau()
EndIf
;AddKeyboardShortcut(GetActiveWindow(),#PB_Shortcut_Return,#retour)
;on rentre les donnees du tableau
LastElement(kwar_tableau())
AddElement(kwar_tableau())
kwar_tableau()\id_fenetre = GetActiveWindow()
kwar_tableau()\nb_case = nb_col*nb_lg
kwar_tableau()\nb_col = nb_col
kwar_tableau()\nb_ligne = nb_lg
largeur_bordure = 1
tx_colonne = (largeur-((nb_col+1)*largeur_bordure))/nb_col
tx_ligne = (hauteur-((nb_lg+1)*largeur_bordure))/nb_lg
largeur = (tx_colonne*nb_col)+((nb_col+1)*largeur_bordure)
hauteur = (tx_ligne*nb_lg)+((nb_lg+1)*largeur_bordure)
kwar_tableau()\largeur = largeur
kwar_tableau()\hauteur = hauteur
kwar_tableau()\posx = posx
kwar_tableau()\posy = posy
kwar_tableau()\color_bordure = RGB(0, 0, 0)
kwar_tableau()\largeur_bordure = 1
;création de l'image
id_image = CreateImage(#PB_Any,largeur,hauteur)
kwar_tableau()\id_image = id_image
If id=#PB_Any
id_imagegadget = ImageGadget(#PB_Any,posx,posy,largeur,hauteur,ImageID(id_image))
id = id_imagegadget
Else
ImageGadget(id,posx,posy,largeur,hauteur,ImageID(id_image))
id_imagegadget = id
EndIf
id_edit = StringGadget(#PB_Any,0,0,50,20,"",#PB_String_BorderLess)
kwar_tableau()\id_edit = id_edit
HideGadget(id_edit,1)
kwar_tableau()\id = id
kwar_tableau()\id_imagegadget = id_imagegadget
;on remplit les cellules
largeur_bordure = 1
;tx_colonne = (largeur-((nb_col+1)*largeur_bordure))/nb_col
;tx_ligne = (hauteur-((nb_lg+1)*largeur_bordure))/nb_lg
compteur = 1
For i=1 To nb_lg
For t=1 To nb_col
AddElement(kwar_tableau())
kwar_tableau()\id_case = compteur
kwar_tableau()\num_ligne = i
kwar_tableau()\num_col = t
kwar_tableau()\color_fond_case = RGB(255,255,255)
kwar_tableau()\texte = "" ;Str(compteur)
kwar_tableau()\sens_texte = #kwar_text_sensH
kwar_tableau()\color_texte_case = RGB(0,0,0)
kwar_tableau()\mode_backtexte = #PB_2DDrawing_Transparent
kwar_tableau()\color_backtexte = RGB(255,255,255)
kwar_tableau()\align_texte_h_case = #kwar_text_center
kwar_tableau()\align_texte_v_case = #kwar_text_center
kwar_tableau()\font_texte_case = #PB_Default
kwar_tableau()\position_bordure = #all_border+10000
kwar_tableau()\bordure_gauche = 0
kwar_tableau()\couleur_bordure_g = RGB(0, 0, 0)
kwar_tableau()\bordure_haut = 0
kwar_tableau()\couleur_bordure_h = RGB(0, 0, 0)
kwar_tableau()\bordure_droite = 0
kwar_tableau()\couleur_bordure_d = RGB(0, 0, 0)
kwar_tableau()\bordure_bas = 0
kwar_tableau()\couleur_bordure_b = RGB(0, 0, 0)
kwar_tableau()\etat_case = 0
kwar_tableau()\mode_etat = #kwar_selected
;définition de la taille des cases
kwar_tableau()\user_tx_colonne = 0
kwar_tableau()\user_tx_ligne = 0
kwar_tableau()\tx_colonne = tx_colonne
kwar_tableau()\tx_ligne = tx_ligne
compteur = compteur+1
Next t
Next i
kwar_refresh(id)
ProcedureReturn id
EndProcedure
Procedure kwar_set_text(id.l,lg.l,col.l,texte$,alignV.l=#PB_Ignore,alignH.l=#PB_Ignore)
;Change le texte d'une cellule ainsi que l'alignement
;dep_tableau = index_tableau(id)
If kwar_select_case(id,lg,col)
kwar_tableau()\texte = texte$
If alignH<>#PB_Ignore
kwar_tableau()\align_texte_h_case = alignH
EndIf
If alignV<>#PB_Ignore
kwar_tableau()\align_texte_v_case = alignV
EndIf
kwar_refresh(id)
EndIf
EndProcedure
Procedure kwar_set_textcolor(id.l,lg.l,col.l,color.l)
;Change la couleur du texte
;Si col=0 on appplique à toute la ligne
;Si ligne=0 on applique à toute la colonne
;Si ligne=0 et colonne=0 on applique à tout le tableau
If lg=0 And col=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
For i=1 To nb_case
NextElement(kwar_tableau())
kwar_tableau()\color_texte_case = color
Next i
ElseIf lg=0 And col>0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_lg = kwar_tableau()\nb_ligne
For i=1 To nb_lg
kwar_Select_case(id,i,col)
kwar_tableau()\color_texte_case = color
Next i
ElseIf lg>0 And col=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
For i=1 To nb_col
kwar_Select_case(id,lg,i)
kwar_tableau()\color_texte_case = color
Next i
ElseIf lg>0 And col>0
If kwar_Select_case(id,lg,col)
kwar_tableau()\color_texte_case = color
EndIf
EndIf
kwar_refresh(id)
EndProcedure
Procedure kwar_set_backcolor(id.l,lg.l,col.l,color.l)
;Change la couleur de fond de(s) cellule(s)
;Si col=0 on applique à toute la ligne
;Si lg=0 on applique à toute la colonne
If lg=0 And col=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
For i=1 To nb_case
NextElement(kwar_tableau())
kwar_tableau()\color_fond_case = color
Next i
ElseIf lg=0 And col>0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_lg = kwar_tableau()\nb_ligne
For i=1 To nb_lg
kwar_Select_case(id,i,col)
kwar_tableau()\color_fond_case = color
Next i
ElseIf lg>0 And col=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
For i=1 To nb_col
kwar_Select_case(id,lg,i)
kwar_tableau()\color_fond_case = color
Next i
ElseIf lg>0 And col>0
If kwar_Select_case(id,lg,col)
kwar_tableau()\color_fond_case = color
EndIf
EndIf
kwar_refresh(id)
EndProcedure
Procedure kwar_set_border(id.l,largeur_bordure.l,color.l=#PB_Ignore)
;Défini la largeur et/ou la couleur de la bordure su tableau
SelectElement(kwar_tableau(),kwar_get_index(id))
If color<>#PB_Ignore
kwar_tableau()\color_bordure = color
EndIf
If largeur_bordure<>#PB_Ignore
kwar_tableau()\largeur_bordure = largeur_bordure
largeur = kwar_tableau()\largeur
hauteur = kwar_tableau()\hauteur
nb_lg = kwar_tableau()\nb_ligne
nb_col = kwar_tableau()\nb_col
kwar_calcul_taille_cellule(id)
EndIf
kwar_refresh(id)
EndProcedure
Procedure kwar_set_itemborder(id.l,lg.l,col.l,bordure.l)
;défini la présence bordure tableau dans les cellules
;Si colonne=#pb_ignore alors on compte avec les idcase et plus par ligne/colonne
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
max_col = kwar_tableau()\nb_col
max_lg = kwar_tableau()\nb_ligne
If Len(Str(bordure))<5
bordure = bordure+10000
EndIf
valid = 0
If col=#PB_Ignore And lg<=nb_case
SelectElement(kwar_tableau(),kwar_get_index(id)+lg)
col = kwar_idcase_to_column(id,lg)
lg = kwar_idcase_to_line(id,lg)
valid = 1
ElseIf kwar_select_case(id,lg,col)
valid = 1
EndIf
If valid = 1
kwar_tableau()\position_bordure = bordure
If Mid(Str(bordure),5,1)="0" And col-1>0
kwar_select_case(id,lg,col-1)
If Mid(Str(kwar_tableau()\position_bordure),3,1) = "1"
kwar_tableau()\position_bordure = kwar_tableau()\position_bordure - 100
EndIf
ElseIf Mid(Str(bordure),5,1)="1" And col-1>0
kwar_select_case(id,lg,col-1)
If Mid(Str(kwar_tableau()\position_bordure),3,1) = "0"
kwar_tableau()\position_bordure = kwar_tableau()\position_bordure + 100
EndIf
EndIf
If Mid(Str(bordure),4,1)="0" And lg-1>0
kwar_select_case(id,lg-1,col)
If Mid(Str(kwar_tableau()\position_bordure),2,1) = "1"
kwar_tableau()\position_bordure = kwar_tableau()\position_bordure - 1000
EndIf
ElseIf Mid(Str(bordure),4,1)="1" And lg-1>0
kwar_select_case(id,lg-1,col)
If Mid(Str(kwar_tableau()\position_bordure),2,1) = "0"
kwar_tableau()\position_bordure = kwar_tableau()\position_bordure + 1000
EndIf
EndIf
If Mid(Str(bordure),3,1)="0" And col+1<=max_col
kwar_select_case(id,lg,col+1)
If Mid(Str(kwar_tableau()\position_bordure),5,1) = "1"
kwar_tableau()\position_bordure = kwar_tableau()\position_bordure - 1
EndIf
ElseIf Mid(Str(bordure),3,1)="1" And col+1<=max_col
kwar_select_case(id,lg,col+1)
If Mid(Str(kwar_tableau()\position_bordure),5,1) = "0"
kwar_tableau()\position_bordure = kwar_tableau()\position_bordure + 1
EndIf
EndIf
If Mid(Str(bordure),2,1)="0" And lg+1<=max_lg
kwar_select_case(id,lg+1,col)
If Mid(Str(kwar_tableau()\position_bordure),4,1) = "1"
kwar_tableau()\position_bordure = kwar_tableau()\position_bordure - 10
EndIf
ElseIf Mid(Str(bordure),2,1)="1" And lg+1<=max_lg
kwar_select_case(id,lg+1,col)
If Mid(Str(kwar_tableau()\position_bordure),4,1) = "0"
kwar_tableau()\position_bordure = kwar_tableau()\position_bordure + 10
EndIf
EndIf
kwar_refresh(id)
EndIf
EndProcedure
Procedure kwar_set_font(id,police.l)
;change la police de tout le tableau
SelectElement(kwar_tableau(),kwar_get_index(id))
For i=1 To kwar_tableau()\nb_case
NextElement(kwar_tableau())
kwar_tableau()\font_texte_case = police
Next
EndProcedure
Procedure kwar_set_itemfont(id,lg.l,col.l,police.l)
;Change la police de la cellule
;SelectElement(kwar_tableau(),kwar_get_index(id))
;Si col=0 on applique à toute la ligne
;Si lg=0 on applique à toute la colonne
If lg=0 And col=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
For i=1 To nb_case
NextElement(kwar_tableau())
kwar_tableau()\font_texte_case = police
Next i
ElseIf lg=0 And col>0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_lg = kwar_tableau()\nb_ligne
For i=1 To nb_lg
kwar_Select_case(id,i,col)
kwar_tableau()\font_texte_case = police
Next i
ElseIf lg>0 And col=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
For i=1 To nb_col
kwar_Select_case(id,lg,i)
kwar_tableau()\font_texte_case = police
Next i
ElseIf lg>0 And col>0
If kwar_Select_case(id,lg,col)
kwar_tableau()\font_texte_case = police
EndIf
EndIf
kwar_refresh(id)
EndProcedure
Procedure kwar_set_state(id.l,lg.l,col.l,etat.b,multi.l=#kwar_oneselect)
;Change l'état de la cellule
If kwar_Select_case(id,lg,col)
etat_case = kwar_tableau()\etat_case
If etat = -1
etat = Abs(etat_case + etat)
EndIf
If etat = 1
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
If multi <> #kwar_multiselect
For t = 1 To nb_case
NextElement(kwar_tableau())
kwar_tableau()\etat_case = 0
Next
EndIf
EndIf
kwar_Select_case(id,lg,col)
kwar_tableau()\etat_case = etat
EndIf
kwar_refresh(id)
EndProcedure
Procedure kwar_set_widthcolumn(id.l,col.l,tx_col.l)
;Change la largeur de la colonne
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_lg = kwar_tableau()\nb_ligne
For i=1 To nb_lg
If kwar_Select_case(id,i,col)
kwar_tableau()\user_tx_colonne = tx_col
kwar_tableau()\tx_colonne = tx_col
EndIf
Next i
kwar_calcul_taille_cellule(id)
kwar_refresh(id)
EndProcedure
Procedure kwar_set_heightline(id.l,lg.l,tx_lg.l)
;Change la hauteur de la ligne
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
For i=1 To nb_col
If kwar_Select_case(id,lg,i)
kwar_tableau()\user_tx_ligne = tx_lg
kwar_tableau()\tx_ligne = tx_lg
EndIf
Next i
kwar_calcul_taille_cellule(id)
kwar_refresh(id)
EndProcedure
Procedure kwar_set_iteminborder(id.l,ligne.l,colonne.l,bordure.l,size.l=#PB_Ignore,color.l=#PB_Ignore)
;défini la présence bordure interne de cellule ainsi que taille et couleur
;si colonne=#pb_ignore alors on compte par idcase
If colonne=#PB_Ignore
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
EndIf
valid = 0
If colonne=#PB_Ignore And ligne<=nb_case
SelectElement(kwar_tableau(),kwar_get_index(id)+ligne)
valid = 1
ElseIf kwar_select_case(id,ligne,colonne)
valid = 1
EndIf
If valid
bordure = bordure + 10000
If Mid(Str(bordure),5,1)= "1" ; bordure gauche
If size<>#PB_Ignore
kwar_tableau()\bordure_gauche = size
EndIf
If color<>#PB_Ignore
kwar_tableau()\couleur_bordure_g = color
EndIf
EndIf
If Mid(Str(bordure),4,1)= "1" ;bordure top
If size<>#PB_Ignore
kwar_tableau()\bordure_haut = size
EndIf
If color<>#PB_Ignore
kwar_tableau()\couleur_bordure_h = color
EndIf
EndIf
If Mid(Str(bordure),3,1)= "1" ;bordure droite
If size<>#PB_Ignore
kwar_tableau()\bordure_droite = size
EndIf
If color<>#PB_Ignore
kwar_tableau()\couleur_bordure_d = color
EndIf
EndIf
If Mid(Str(bordure),2,1)= "1" ;bordure basse
If size<>#PB_Ignore
kwar_tableau()\bordure_bas = size
EndIf
If color<>#PB_Ignore
kwar_tableau()\couleur_bordure_b = color
EndIf
EndIf
kwar_refresh(id)
EndIf
EndProcedure
Procedure kwar_set_textalign(id.l,ligne.l,colonne.l,alignV.l=#PB_Ignore,alignH.l=#PB_Ignore)
;Change l'alignement du texte dans la cellule (ou les)
;Si col=0 on appplique à toute la ligne
;Si ligne=0 on applique à toute la colonne
;Si ligne=0 et colonne=0 on applique à tout le tableau
If lg=0 And col=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
For i=1 To nb_case
NextElement(kwar_tableau())
If alignV<>#PB_Ignore
kwar_tableau()\align_texte_v_case = alignV
EndIf
If alignH<>#PB_Ignore
kwar_tableau()\align_texte_h_case = alignH
EndIf
Next i
ElseIf lg=0 And col>0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_lg = kwar_tableau()\nb_ligne
For i=1 To nb_lg
kwar_Select_case(id,i,col)
If alignV<>#PB_Ignore
kwar_tableau()\align_texte_v_case = alignV
EndIf
If alignH<>#PB_Ignore
kwar_tableau()\align_texte_h_case = alignH
EndIf
Next i
ElseIf lg>0 And col=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
For i=1 To nb_col
kwar_Select_case(id,lg,i)
If alignV<>#PB_Ignore
kwar_tableau()\align_texte_v_case = alignV
EndIf
If alignH<>#PB_Ignore
kwar_tableau()\align_texte_h_case = alignH
EndIf
Next i
ElseIf lg>0 And col>0
If kwar_Select_case(id,lg,col)
If alignV<>#PB_Ignore
kwar_tableau()\align_texte_v_case = alignV
EndIf
If alignH<>#PB_Ignore
kwar_tableau()\align_texte_h_case = alignH
EndIf
EndIf
EndIf
kwar_refresh(id)
EndProcedure
Procedure kwar_set_backtext(id.l,ligne.l,colonne.l,color.l,mode.l=#PB_2DDrawing_Transparent)
;Change le mode d'affichage du texte avec ou sans fond de texte en couleur
;Si col=0 on appplique à toute la ligne
;Si ligne=0 on applique à toute la colonne
;Si ligne=0 et colonne=0 on applique à tout le tableau
If ligne0 And colonne=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
For i=1 To nb_case
NextElement(kwar_tableau())
kwar_tableau()\color_backtexte = color
kwar_tableau()\mode_backtexte = mode
Next i
ElseIf ligne=0 And colonne>0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_lg = kwar_tableau()\nb_ligne
For i=1 To nb_lg
kwar_Select_case(id,i,colonne)
kwar_tableau()\color_backtexte = color
kwar_tableau()\mode_backtexte = mode
Next i
ElseIf ligne>0 And colonne=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
For i=1 To nb_col
kwar_Select_case(id,ligne,i)
kwar_tableau()\color_backtexte = color
kwar_tableau()\mode_backtexte = mode
Next i
ElseIf ligne>0 And colonne>0
If kwar_Select_case(id,ligne,colonne)
kwar_tableau()\color_backtexte = color
kwar_tableau()\mode_backtexte = mode
EndIf
EndIf
kwar_refresh(id)
EndProcedure
Procedure kwar_set_itemmode(id.l,ligne.l,colonne.l,mode.l)
;Défini si la cellule peut être sélectionnée ou pas (vérrouillée)
;Si col=0 on appplique à toute la ligne
;Si ligne=0 on applique à toute la colonne
;Si ligne=0 et colonne=0 on applique à tout le tableau
If ligne0 And colonne=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
For i=1 To nb_case
NextElement(kwar_tableau())
If mode <> #kwar_noselected And mode <> #kwar_selected
mode = #kwar_noselected
EndIf
kwar_tableau()\mode_etat = mode
Next i
ElseIf ligne=0 And colonne>0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_lg = kwar_tableau()\nb_ligne
For i=1 To nb_lg
kwar_Select_case(id,i,colonne)
If mode <> #kwar_noselected And mode <> #kwar_selected
mode = #kwar_noselected
EndIf
kwar_tableau()\mode_etat = mode
Next i
ElseIf ligne>0 And colonne=0
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
For i=1 To nb_col
kwar_Select_case(id,ligne,i)
If mode <> #kwar_noselected And mode <> #kwar_selected
mode = #kwar_noselected
EndIf
kwar_tableau()\mode_etat = mode
Next i
ElseIf ligne>0 And colonne>0
If kwar_Select_case(id,ligne,colonne)
If mode <> #kwar_noselected And mode <> #kwar_selected
mode = #kwar_noselected
EndIf
kwar_tableau()\mode_etat = mode
EndIf
EndIf
kwar_refresh(id)
EndProcedure
Procedure kwar_set_width(id.l,largeur.l)
;Redéfinition de la largeur du tableau
SelectElement(kwar_tableau(),kwar_get_index(id))
kwar_tableau()\largeur = largeur
kwar_calcul_taille_cellule(id)
kwar_refresh(id)
EndProcedure
Procedure kwar_set_height(id.l,hauteur.l)
;Rdéfinition de la hauteur du tableau
SelectElement(kwar_tableau(),kwar_get_index(id))
kwar_tableau()\hauteur = hauteur
kwar_calcul_taille_cellule(id)
kwar_refresh(id)
EndProcedure
Procedure.l kwar_count(id.l)
;Renvoie le nombre de cellule du tableau
SelectElement(kwar_tableau(),kwar_get_index(id))
valeur = kwar_tableau()\nb_case
ProcedureReturn valeur
EndProcedure
Procedure.l kwar_get_state(id.l)
;Renvoie l'ID de la première cellule active
cellule = -1
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
For i=1 To nb_case
NextElement(kwar_tableau())
If kwar_tableau()\etat_case = 1
cellule = i
Break
EndIf
Next
ProcedureReturn cellule
EndProcedure
Procedure.l kwar_get_itemstate(id.l,ligne.l,col.l=#PB_Ignore)
;Renvoie l'état de la cellule sélectionnée
;Si colonne=#pb_ignore alors on compte avec les idcase et plus par ligne/colonne
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_case = kwar_tableau()\nb_case
retour = -1
If col=#PB_Ignore And ligne<=nb_case
SelectElement(kwar_tableau(),kwar_get_index(id)+ligne)
retour = kwar_tableau()\etat_case
Else
If kwar_Select_case(id,ligne,col)
retour = kwar_tableau()\etat_case
EndIf
EndIf
ProcedureReturn retour
EndProcedure
Procedure.l kwar_get_aligntext(id.l,lg.l,col.l)
If kwar_Select_case(id,lg,col)
alignement = kwar_tableau()\align_texte_h_case
EndIf
ProcedureReturn alignement
EndProcedure
Procedure.l kwar_get_textcolor(id.l,lg.l,col.l)
If kwar_Select_case(id,lg,col)
couleur = kwar_tableau()\color_texte_case
EndIf
ProcedureReturn couleur
EndProcedure
Procedure.l kwar_get_backcolor(id.l,lg.l,col.l)
If kwar_select_case(id,lg,col)
couleur = kwar_tableau()\color_fond_case
EndIf
ProcedureReturn couleur
EndProcedure
Procedure.l kwar_get_itemfont(id.l,lg.l,col.l)
If kwar_select_case(id,lg,col)
police = kwar_tableau()\font_texte_case
EndIf
ProcedureReturn police
EndProcedure
Procedure.s kwar_get_text(id.l,lg.l,col.l)
If kwar_Select_case(id,lg,col)
texte$ = kwar_tableau()\texte
EndIf
ProcedureReturn texte$
EndProcedure
Procedure.l kwar_get_widthcolumn(id.l,col.l)
If kwar_Select_case(id,1,col)
taille = kwar_tableau()\tx_colonne
EndIf
ProcedureReturn taille
EndProcedure
Procedure.l kwar_get_heigthline(id.l,lg.l)
If kwar_Select_case(id,lg,1)
taille = kwar_tableau()\tx_ligne
EndIf
ProcedureReturn taille
EndProcedure
Procedure.l kwar_get_bordercolor(id.l)
SelectElement(kwar_tableau(),kwar_get_index(id))
couleur = kwar_tableau()\color_bordure
ProcedureReturn couleur
EndProcedure
Procedure.l kwar_get_itemborder(id.l,ligne.l,col.l=#PB_Ignore);si il n'y a que la ligne alors c'est un idcase
;Renvoie la position des bordures de la cellule
If col=#PB_Ignore
SelectElement(kwar_tableau(),kwar_get_index(id)+ligne)
valeur = kwar_tableau()\position_bordure
Else
If kwar_select_case(id,ligne,col)
valeur = kwar_tableau()\position_bordure
EndIf
EndIf
ProcedureReturn valeur
EndProcedure
Procedure.l kwar_get_widthborder(id)
;Renvoie la largeur de la bordure tableau
SelectElement(kwar_tableau(),kwar_get_index(id))
taille = kwar_tableau()\largeur_bordure
ProcedureReturn taille
EndProcedure
Procedure.l kwar_get_modebacktext(id.l,ligne.l,colonne.l)
;Renvoie le mode d'affichage du texte dans les cellules
kwar_select_case(id,ligne,colonne)
mode = kwar_tableau()\mode_backtexte
ProcedureReturn mode
EndProcedure
Procedure.l kwar_get_backtext_color(id.l,ligne.l,colonne.l)
;Renvoie la couleur du fond de texte à ne pas confondre avec la couleur de la cellule
kwar_select_case(id,ligne,colonne)
color = kwar_tableau()\color_backtexte
ProcedureReturn color
EndProcedure
Procedure kwar_insert_line(id.l,lg.l)
;Insère une ligne dans le tableau après la ligne spécifié
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
nb_case = kwar_tableau()\nb_case
nb_ligne = kwar_tableau()\nb_ligne
kwar_tableau()\nb_case = nb_case + nb_col
kwar_tableau()\nb_ligne = nb_ligne + 1
If kwar_select_case(id,lg,nb_col)
For u=1 To nb_col
AddElement(kwar_tableau())
kwar_tableau()\color_fond_case = RGB(255,255,255)
kwar_tableau()\texte = ""
kwar_tableau()\color_texte_case = RGB(0,0,0)
kwar_tableau()\align_texte_h_case = #kwar_text_center
kwar_tableau()\font_texte_case = #PB_Default
;kwar_tableau()\position_bordure = #all_border+10000
kwar_tableau()\user_tx_ligne = 0
kwar_tableau()\etat_case = 0
Next
For u=1 To nb_col
kwar_select_case(id,lg,u)
user_x = kwar_tableau()\user_tx_colonne
tx_col = kwar_tableau()\tx_colonne
bordure = kwar_tableau()\position_bordure
kwar_select_case(id,lg+1,u)
kwar_tableau()\user_tx_colonne = user_x
kwar_tableau()\tx_colonne = tx_col
kwar_tableau()\position_bordure = bordure
Next
SelectElement(kwar_tableau(),kwar_get_index(id))
compteur = 1
For i=1 To nb_ligne+1
For t=1 To nb_col
NextElement(kwar_tableau())
kwar_tableau()\id_case = compteur
kwar_tableau()\num_ligne = i
kwar_tableau()\num_col = t
compteur = compteur+1
Next t
Next i
EndIf
kwar_calcul_taille_cellule(id)
kwar_refresh(id)
EndProcedure
Procedure kwar_insert_column(id,col.l)
;Insère une colonne dans le tableau après la colonne spécifié
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
nb_case = kwar_tableau()\nb_case
nb_ligne = kwar_tableau()\nb_ligne
kwar_tableau()\nb_case = nb_case + nb_ligne
kwar_tableau()\nb_col = nb_col + 1
If kwar_select_case(id,nb_ligne,col)
For u=1 To nb_ligne
kwar_select_case(id,u,col)
AddElement(kwar_tableau())
kwar_tableau()\color_fond_case = RGB(255,255,255)
kwar_tableau()\texte = ""
kwar_tableau()\color_texte_case = RGB(0,0,0)
kwar_tableau()\align_texte_h_case = #kwar_text_center
kwar_tableau()\font_texte_case = #PB_Default
;kwar_tableau()\position_bordure = #all_border+10000
kwar_tableau()\user_tx_colonne = 0
kwar_tableau()\etat_case = 0
Next
For u=1 To nb_ligne
kwar_select_case(id,u,col)
user_y = kwar_tableau()\user_tx_ligne
tx_lg = kwar_tableau()\tx_ligne
bordure = kwar_tableau()\position_bordure
kwar_select_case(id,u,col+1)
kwar_tableau()\user_tx_ligne = user_y
kwar_tableau()\tx_ligne = tx_lg
kwar_tableau()\position_bordure = bordure
Next
SelectElement(kwar_tableau(),kwar_get_index(id))
compteur = 1
For i=1 To nb_ligne
For t=1 To nb_col+1
NextElement(kwar_tableau())
kwar_tableau()\id_case = compteur
kwar_tableau()\num_ligne = i
kwar_tableau()\num_col = t
compteur = compteur+1
Next t
Next i
EndIf
kwar_calcul_taille_cellule(id)
kwar_refresh(id)
EndProcedure
Procedure kwar_delete_line(id.l,lg.l)
;Efface une ligne
If kwar_select_case(id,lg,1)
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
nb_case = kwar_tableau()\nb_case
nb_ligne = kwar_tableau()\nb_ligne
For y=1 To nb_col
kwar_select_case(id,lg,(nb_col+1)-y)
DeleteElement(kwar_tableau())
Next y
SelectElement(kwar_tableau(),kwar_get_index(id))
kwar_tableau()\nb_case = nb_case - nb_col
nb_ligne = nb_ligne - 1
kwar_tableau()\nb_ligne = nb_ligne
compteur = 1
For i=1 To nb_ligne
For t=1 To nb_col
NextElement(kwar_tableau())
kwar_tableau()\id_case = compteur
kwar_tableau()\num_ligne = i
kwar_tableau()\num_col = t
compteur = compteur+1
Next t
Next i
EndIf
kwar_calcul_taille_cellule(id)
kwar_refresh(id)
EndProcedure
Procedure kwar_delete_column(id.l,col.l)
;Efface une colonne
If kwar_select_case(id,1,col)
SelectElement(kwar_tableau(),kwar_get_index(id))
nb_col = kwar_tableau()\nb_col
nb_case = kwar_tableau()\nb_case
nb_ligne = kwar_tableau()\nb_ligne
For y=1 To nb_ligne
kwar_select_case(id,(nb_ligne+1)-y,col)
DeleteElement(kwar_tableau())
Next y
SelectElement(kwar_tableau(),kwar_get_index(id))
kwar_tableau()\nb_case = nb_case - nb_ligne
nb_col = nb_col - 1
kwar_tableau()\nb_col = nb_col
compteur = 1
For i=1 To nb_ligne
For t=1 To nb_col
NextElement(kwar_tableau())
kwar_tableau()\id_case = compteur
kwar_tableau()\num_ligne = i
kwar_tableau()\num_col = t
compteur = compteur+1
Next t
Next i
EndIf
kwar_calcul_taille_cellule(id)
kwar_refresh(id)
EndProcedure
Procedure kwar_delete_array(id.l)
;Efface un tableau et détruit le gadget
SelectElement(kwar_tableau(),kwar_get_index(id))
id_imagegadget = kwar_tableau()\id_imagegadget
id_image = kwar_tableau()\id_image
nb_case = kwar_tableau()\nb_case
For u=0 To nb_case
SelectElement(kwar_tableau(),kwar_get_index(id)+(nb_case-u))
DeleteElement(kwar_tableau())
Next
FreeImage(id_image)
FreeGadget(id_imagegadget)
EndProcedure
Procedure kwar_itemcopy(id.l,ligne.l,colonne.l,lgcopy.l,colcopy.l,mode.l=#Null)
kwar_select_case(id,ligne,colonne)
texte$ = kwar_tableau()\texte
sens_texte = kwar_tableau()\sens_texte
couleur_texte = kwar_tableau()\color_texte_case
police = kwar_tableau()\font_texte_case
couleur_fond = kwar_tableau()\color_fond_case
alignH = kwar_tableau()\align_texte_h_case
alignV = kwar_tableau()\align_texte_v_case
color_backtexte = kwar_tableau()\color_backtexte
mode_backtexte = kwar_tableau()\mode_backtexte
pos_bordure = kwar_tableau()\position_bordure
bordure_g = kwar_tableau()\bordure_gauche
col_bordure_g = kwar_tableau()\couleur_bordure_g
bordure_h = kwar_tableau()\bordure_haut
col_bordure_h = kwar_tableau()\couleur_bordure_h
bordure_d = kwar_tableau()\bordure_droite
col_bordure_d = kwar_tableau()\couleur_bordure_d
bordure_b = kwar_tableau()\bordure_bas
col_bordure_b = kwar_tableau()\couleur_bordure_b
kwar_select_case(id,lgcopy,colcopy)
kwar_tableau()\texte = texte$
kwar_tableau()\sens_texte = sens_texte
If mode<>#Null
kwar_tableau()\font_texte_case = police
kwar_tableau()\color_fond_case = couleur_fond
kwar_tableau()\align_texte_h_case = alignH
kwar_tableau()\align_texte_v_case = alignV
kwar_tableau()\mode_backtexte = mode_backtexte
kwar_tableau()\color_backtexte = color_backtexte
kwar_tableau()\position_bordure = pos_bordure
kwar_tableau()\bordure_gauche = bordure_g
kwar_tableau()\couleur_bordure_g = col_bordure_g
kwar_tableau()\bordure_haut = bordure_h
kwar_tableau()\couleur_bordure_h = col_bordure_h
kwar_tableau()\bordure_droite = bordure_d
kwar_tableau()\couleur_bordure_d = col_bordure_d
kwar_tableau()\bordure_bas = bordure_b
kwar_tableau()\couleur_bordure_b = col_bordure_b
kwar_set_itemborder(id,lgcopy,colcopy,pos_bordure)
EndIf
kwar_refresh(id)
EndProcedure
Procedure.s kwar_edititem(id.l,ligne.l,colonne.l)
SelectElement(kwar_tableau(),kwar_get_index(id))
id_edit = kwar_tableau()\id_edit
AddKeyboardShortcut(kwar_tableau()\id_fenetre,#PB_Shortcut_Return,#retour)
AddKeyboardShortcut(kwar_tableau()\id_fenetre,#PB_Shortcut_Escape,#ESC)
posx = kwar_tableau()\posx + kwar_tableau()\largeur_bordure
posy = kwar_tableau()\posy + kwar_tableau()\largeur_bordure
kwar_select_case(id,ligne,colonne)
If kwar_tableau()\font_texte_case<>#PB_Default
SetGadgetFont(id_edit,FontID(kwar_tableau()\font_texte_case))
EndIf
SetGadgetColor(id_edit,#PB_Gadget_BackColor,kwar_tableau()\color_fond_case)
SetGadgetColor(id_edit,#PB_Gadget_FrontColor,kwar_tableau()\color_texte_case)
SetGadgetText(id_edit,kwar_tableau()\texte)
ResizeGadget(id_edit,kwar_tableau()\posx_case+posx,kwar_tableau()\posy_case+posy,kwar_tableau()\tx_colonne,kwar_tableau()\tx_ligne)
HideGadget(id_edit,0)
DisableGadget(id,1)
SetActiveGadget(id_edit)
memo$ = GetGadgetText(id_edit)
Repeat
event = WaitWindowEvent()
texte$ = GetGadgetText(id_edit)
If EventMenu() = #ESC
texte$ = memo$
Break
EndIf
Until event = #PB_Event_Menu And EventMenu() = #Retour
;texte$ = GetGadgetText(id_edit)
HideGadget(id_edit,1)
kwar_tableau()\texte = texte$
DisableGadget(id,0)
kwar_refresh(id)
ProcedureReturn texte$
EndProcedure
If OpenWindow(0, 100, 200, 300, 200, "2D Drawing Test") And CreateGadgetList(WindowID(0))
; Create an offscreen image, with a green circle in it.
; It will be displayed later
;LoadFont(1, "Arial", 13)
LoadFont(2,"courrier",15)
gadget1 = kwar_create(#PB_Any,10,10,201,101,4,4)
kwar_set_itemfont(1,3,3,2)
; Create a gadget to display our nice image
kwar_create(2,10,120,100,52,2,3)
kwar_set_text(1,2,4,"l2,c4",#kwar_Text_left,#kwar_text_center)
kwar_set_textcolor(1,3,3,RGB(200,50,120))
kwar_set_backcolor(1,3,3,RGB(200,240,255))
kwar_set_text(1,3,3,"100 m",#kwar_text_center,#kwar_text_center)
;kwar_set_textalign(gadget1,3,3,#kwar_text_top,#kwar_Text_left)
kwar_set_border(1,3,RGB(200,100,200))
kwar_set_widthcolumn(2,3,60)
kwar_set_heightline(1,4,40)
;kwar_set_itemborder(1,2,1,#right_border+#left_border)
kwar_set_itemborder(1,6,#PB_Ignore,#right_border+#left_border)
For i=1 To 4
kwar_set_backcolor(1,i,1,RGB(50*i,200,150))
;kwar_set_itemborder(1,i,1,#left_border+#right_border)
Next
kwar_set_itemmode(gadget1,2,2,#kwar_selected)
kwar_set_iteminborder(gadget1,3,3,#bottom_border,2,kwar_get_bordercolor(gadget1))
;kwar_set_iteminborder(gadget1,3,3,#all_border,1,#PB_Ignore)
; This is the 'event loop'. All the user actions are processed here.
; It's very easy to understand: when an action occurs, the EventID
; isn't 0 and we just have to see what have happened...
;
Repeat
EventID = WaitWindowEvent()
Select Eventid
Case #PB_Event_Gadget
If EventType()=#PB_EventType_LeftClick
Select EventGadget()
Case gadget1
kwar_set_state(gadget1,kwar_over_line(0,gadget1),kwar_over_column(0,gadget1),1,#kwar_oneselect)
kwar_edititem(gadget1,kwar_over_line(0,gadget1),kwar_over_column(0,gadget1))
EndSelect
EndIf
If EventType()=#PB_EventType_RightClick
Select EventGadget()
Case gadget1
kwar_set_state(gadget1,kwar_over_line(0,gadget1),kwar_over_column(0,gadget1),1,#kwar_multiselect)
;kwar_set_text(gadget1,kwar_over_line(0,1),kwar_over_column(0,1),Str(compteur),#kwar_text_bottom)
;compteur = compteur+1
;kwar_itemcopy(gadget1,1,1,3,4,1)
;kwar_set_backtext(gadget1,3,3,RGB(200,255,200),#PB_2DDrawing_Default)
;kwar_insert_line(gadget1,2)
;kwar_delete_line(gadget1,3)
;kwar_delete_column(gadget1,2)
;kwar_set_border(gadget1,5,RGB(255,150,150))
Case 2
kwar_set_state(2,kwar_over_line(0,2),kwar_over_column(0,2),-1,#kwar_multiselect)
kwar_set_width(2,200)
kwar_set_height(2,20)
EndSelect
EndIf
EndSelect
Until EventID = #PB_Event_CloseWindow ; If the user has pressed on the window close button
EndIf
End