Simple et pas MegaTop mais cela est plus sympa comme option d'édition non?
Edit: 17/01/10
- Ajouté la possibilité de créer une ligne d'entête / de titre sur toute la largeur du tableau.
Méthode et exemple :
Windows et PB 4.40
Code : Tout sélectionner
Enumeration
#win
#btn_Insert
#edit
#Status
EndEnumeration
Procedure Editor_InsertText(gadget,Text$)
ProcedureReturn SendMessage_(GadgetID(gadget),#EM_REPLACESEL,0,Text$)
EndProcedure
Procedure.s Editor_InsertTableHeader(Title$ = "", nbcol=5, largeur=2000, cellfontsize=20)
;Ajoute une ligne d'entête au tableau avec un titre choisi par l'utilisateur
HTitle.s = "{\rtf1\trowd\fs"+Str(cellfontsize)+" \cellx"+Str(nbcol*largeur)+"\intbl "+Title$+"\cell\row}"
ProcedureReturn HTitle
EndProcedure
Procedure.s Editor_InsertTable(nbcol=5, nbligne=5, largeur=2000, cellfontsize=20)
; les paramètres sont optionnels et peuvent être modifés / utile pour insérer un tableau par défaut
; si les valeurs de 'InputRequesterSizeOfTable' ne sont pas modifiées, ce seront les valeurs par défaut qui prévaleront
result.s = "{\rtf1\trowd"
result +"\fs"+Str(cellfontsize)+" " ; Font Size = hauteur de cellule
For i=1 To nbcol
result + "\cellx"+Str(i*largeur)
Next
For j=1 To nbligne
result + "\intbl"
For i=1 To nbcol
result + "\cell"
Next
result + "\row"
Next
result + "}"
ProcedureReturn result
EndProcedure
Procedure.l InputRequesterSizeOfTable(EditGadget,Titre$,Message$)
Protected Result, Window, Text, Text1, Str1, Text2, Str2, Text3, combo1, Text4, combo2, CheckHeader, OK, Defaut, Cancel
Window = OpenWindow(#PB_Any,0,0,300,210,Titre$,#PB_Window_ScreenCentered)
If Window
Text = TextGadget(#PB_Any,0,0,300,20,Message$)
SetGadgetColor(Text, #PB_Gadget_FrontColor, RGB(255,255, 255))
SetGadgetColor(Text, #PB_Gadget_BackColor, RGB(61, 123, 194))
Text1 = TextGadget(#PB_Any,10,32,50,15,"Colonnes")
Str1 = SpinGadget(#PB_Any,70,30,30,20,1,100,#PB_Spin_Numeric)
SetGadgetState (Str1, 5) : SetGadgetText(Str1, "5")
GadgetToolTip(Str1,"Nombre de colonnes")
Text2 = TextGadget(#PB_Any,160,32,50,20,"Lignes")
Str2 = SpinGadget(#PB_Any,210,30,30,20,1,100,#PB_Spin_Numeric)
SetGadgetState (Str2, 5) : SetGadgetText(Str2, "5")
GadgetToolTip(Str2,"Nombre de lignes")
Text3 = TextGadget(#PB_Any,10,72,50,20,"Hauteur")
combo1 = ComboBoxGadget(#PB_Any,70,70,60,20) ;{
AddGadgetItem(combo1, -1, "10")
AddGadgetItem(combo1, -1, "12")
AddGadgetItem(combo1, -1, "14")
AddGadgetItem(combo1, -1, "16")
AddGadgetItem(combo1, -1, "18")
AddGadgetItem(combo1, -1, "20")
AddGadgetItem(combo1, -1, "22")
AddGadgetItem(combo1, -1, "24")
AddGadgetItem(combo1, -1, "26")
AddGadgetItem(combo1, -1, "28")
AddGadgetItem(combo1, -1, "30")
AddGadgetItem(combo1, -1, "32")
AddGadgetItem(combo1, -1, "34")
AddGadgetItem(combo1, -1, "36")
AddGadgetItem(combo1, -1, "38")
AddGadgetItem(combo1, -1, "40") ;}
GadgetToolTip(combo1,"Hauteur des cellules correspondant à la taille de la police")
Text4 = TextGadget(#PB_Any,160,72,50,20,"Largeur")
combo2 = ComboBoxGadget(#PB_Any,210,70,60,20);{
AddGadgetItem(combo2, -1, "250")
AddGadgetItem(combo2, -1, "500")
AddGadgetItem(combo2, -1, "1000")
AddGadgetItem(combo2, -1, "1500")
AddGadgetItem(combo2, -1, "2000")
AddGadgetItem(combo2, -1, "2500")
AddGadgetItem(combo2, -1, "3000");}
GadgetToolTip(combo2,"Largeur des cellules")
CheckHeader = CheckBoxGadget(#PB_Any,10,100,280,20,"Ajouter une ligne d'entête au tableau")
StringTitle = StringGadget(#PB_Any,10,125,280,20,"")
GadgetToolTip(StringTitle,"Saisissez le titre qui sera ajouté à l'entête")
DisableGadget(StringTitle,1) ; permet d'activer le titre que si nécessaire avec la CheckBoxGadget()
ContainerGadget(#PB_Any,5,150,290,55, #PB_Container_Flat)
OK = ButtonGadget(#PB_Any,10,15,80,25,"OK",#PB_Button_Default)
Defaut = ButtonGadget(#PB_Any,100,15,80,25,"Défaut")
Cancel = ButtonGadget(#PB_Any,200,15,80,25,"Annuler")
CloseGadgetList()
Repeat ;{
If WaitWindowEvent() = #PB_Event_Gadget
If EventGadget() = CheckHeader
If GetGadgetState(CheckHeader) = #PB_Checkbox_Checked
DisableGadget(StringTitle,0) : SetActiveGadget(StringTitle)
Else
DisableGadget(StringTitle,1)
EndIf
ElseIf EventGadget() = OK
Result = 1
If GetGadgetState(CheckHeader) = #PB_Checkbox_Checked
Title$ = GetGadgetText(StringTitle)
Editor_InsertText(EditGadget,Editor_InsertTableHeader(Title$,Val(GetGadgetText(Str1)),Val(GetGadgetText(combo2)), Val(GetGadgetText(combo1))))
EndIf
Editor_InsertText(EditGadget,Editor_InsertTable(Val(GetGadgetText(Str1)), Val(GetGadgetText(Str2)), Val(GetGadgetText(combo2)), Val(GetGadgetText(combo1))))
AddGadgetItem(EditGadget,-1,"")
Break
ElseIf EventGadget() = Defaut
Result = 2
Editor_InsertText(EditGadget,Editor_InsertTable()) ; utilisation des paramètres par défaut, initialisés lors de la création de la procédure
AddGadgetItem(EditGadget,-1,"")
Break
ElseIf EventGadget() = Cancel
Result = 0
Break
EndIf
EndIf
If GetKeyState_(#VK_RETURN) > 1
Result = 0
Break
EndIf ;}
ForEver
EndIf
CloseWindow(Window)
ProcedureReturn Result
EndProcedure
;-Win main
If OpenWindow(#win,0,0,800,600,"Tableau",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(#btn_Insert, 10,5,80,20,"Insérer")
EditorGadget(#edit, 10,30,780, 540)
;-Statusbar
If CreateStatusBar(#Status, WindowID(MainWindow))
AddStatusBarField(#PB_Ignore)
EndIf
StatusBarText(#Status, 0, "Prêt...")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #btn_Insert
Resultat = InputRequesterSizeOfTable(#edit,"Tableau","Dimensions de votre tableau")
If Resultat = 1
StatusBarText(#Status, 0, "Votre tableau a été créé avec vos dimensions")
ElseIf Resultat = 2
StatusBarText(#Status, 0, "Votre tableau a été créé avec les dimensions par défaut")
ElseIf Resultat = 0
StatusBarText(#Status, 0, "La création du tableau a été annulée par l'utilisateur")
EndIf
EndSelect
EndIf
;-End
If Event = #PB_Event_CloseWindow
Quitter = 1
EndIf
Until Quitter
End
EndIf