InputRequesterSizeOfTable() / tableau dimensionnable

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

InputRequesterSizeOfTable() / tableau dimensionnable

Message 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 
@+
Dernière modification par Jacobus le dim. 17/janv./2010 19:22, modifié 1 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: InputRequesterSizeOfTable() / tableau dimensionnable

Message par Kwai chang caine »

Merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: InputRequesterSizeOfTable() / tableau dimensionnable

Message par Backup »

oui , bien cool , merci :)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Re: InputRequesterSizeOfTable() / tableau dimensionnable

Message 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:
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Répondre