Page 1 sur 1

InputRequesterSizeOfTable() / tableau dimensionnable

Publié : ven. 15/janv./2010 20:43
par Jacobus
Voici un petit truc pour permettre à l'utilisateur de votre éditeur de donner les dimensions qu'il veut à son tableau avant de l'insérer.
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 
@+

Re: InputRequesterSizeOfTable() / tableau dimensionnable

Publié : ven. 15/janv./2010 21:44
par Kwai chang caine
Merci 8)

Re: InputRequesterSizeOfTable() / tableau dimensionnable

Publié : ven. 15/janv./2010 21:53
par Backup
oui , bien cool , merci :)

Re: InputRequesterSizeOfTable() / tableau dimensionnable

Publié : dim. 17/janv./2010 19:26
par Jacobus
Hello!
Je viens d'éditer le code dans le premier post pour ajouter [une entête/un titre] au tableau.
Géré également directement lors de la personnalisation des dimensions.

@+ :wink: