Tableur

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Tableur

Message par LavaLava »

Je cherche à faire un petit tableur de x lignes et y colones.
J'utilise ListIconGadget et tout va bien pour l'affichage.
Par contre je n'arrive pas à selecionner un elements autre que ceux de la premier colone ...
Mon but est de pouvoir editer un element (directement ou par l'intermediaire d'un inputrequester).
Cela est-il possible avec Listicongadget ou existe til un autre gadget permetant cela ?

PS: dans la doc de listicongadget ont voit sur l'image d'exemple, un petit triangle à droite du mot Nom. Comment fait-on pour l'afficher ? Si c'est Api ... taper deux fois ...
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

pour listicon gadget avec plusieurs colonnes, c'est normal.
seules les lignes sont concernées globalement.
Mais il suffit de créer plusieurs listicongadget les une à côté des autres.

Sinon tu peux créer un tableau de stringgadget

ou comme ça:

code commencé il y a longtemps, mais jamais fini. Donc c'est pas top, mais ça peut t'aider. (Miracle, il trainait encore sur mon disque)
TAB pour valider une entrée

Code : Tout sélectionner


OpenConsole():InitKeyboard()
hauteur.l=0
largeur.l=0
nligne=30:ncolonne=30
basel=1:basec=1:courantl=1:courantc=1:edit.b=0
Dim tab.s(nligne,ncolonne)
Dim type.s(nligne,ncolonne)
Global edit
Global tab,type,ncolonne,nligne,basel,basec,courantl,courantc
Declare refresh()

win.l=OpenWindow(0,0,0,800,500,#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered |#PB_Window_SystemMenu|#PB_Window_TitleBar,"Tableur")
CreateMenu(0,win)
MenuTitle("Fichiers")
MenuItem(10,"Ouvrir")
MenuItem(11,"Sauver")
MenuItem(12,"Sauver comme")
MenuTitle("Edition")
MenuItem(21,"Copier")
MenuItem(22,"Coller")

CreateGadgetList(win)
EditorGadget (2,100,10,600,40,#PB_Container_Raised)
;ScrollAreaGadget(1,0,80,790,410,ncolonne*60,nligne*20,30,#PB_ScrollArea_Single)
ContainerGadget(1,5,80,13*60,19*20,#PB_Container_raised|#PB_Container_double)
CreateImage(0,13*60,19*20)
ImageGadget(3,0,0,13*60,19*20,UseImage(0))

CloseGadgetList()
run.b=1:ligne=1:colonne=1

Repeat
event=WaitWindowEvent()

If WindowHeight()<>hauteur Or WindowWidth()<>largeur
hauteur=WindowHeight():largeur=WindowWidth()
;ResizeGadget(1,5,80,largeur-10,hauteur-90)
refresh()
EndIf

ExamineKeyboard()

If KeyboardReleased(#PB_Key_Tab)
tab(courantl,courantc)=GetGadgetText(2)
If courantl<nligne : courantl=courantl+1:EndIf
refresh()
EndIf

If KeyboardReleased(#PB_Key_down)
PrintN("down")
EndIf
If KeyboardReleased(#PB_Key_up) And ligne>1
ligne=ligne-1:ActivateGadget(colonne+1000*ligne)
EndIf

Select event

Case 513
If WindowMouseX()>72 And WindowMouseY()>152
courantc=basec+Round((WindowMouseX()-12)/60,0)-1
courantl=basel+Round((WindowMouseY()-132)/20,0)-1
PrintN(Str(WindowMouseX())+" "+Str(WindowMouseY()))
PrintN(Str(courantl)+" "+Str(courantc))
refresh()
ActivateGadget(2)
EndIf

Case #PB_Event_Gadget

  Select EventType()

  
  EndSelect

Case #PB_EventCloseWindow
run=0

EndSelect

Until run=0
CloseConsole():CloseWindow(win)
End

Procedure refresh()
If courantl>basel+16: basel=basel+1:EndIf
If courantc>basec+10: basec=basec+1:EndIf
If courantl=basel And basel>1: basel=basel-1:EndIf
If courantc=basec And basec>1 : basec=basec-1:EndIf

StartDrawing(ImageOutput())
Box(0,0,13*60,19*20,RGB(255,255,255))
FrontColor(0,0,0)
For i=1 To 19
For j=1 To 13
Line(60*j,20,1,19*20+50)
Line(60,20*i,13*60,1)
Locate(60*(j)+2,20*(i)+2)
DrawText(Left(tab(basel+i-1,basec+j-1),7))
Next j
Next i
FrontColor(0,0,255)
For i=1 To 19
Locate(0,19*i):DrawText("L "+Str(basel+i-1))
Next i
For j=1 To 13
Locate(60*j,0):DrawText("C "+Str(basec+j-1))
Next j
FrontColor(255,0,0)
DrawingMode(4)
Box(60*(courantc-basec+1)+1,20*(courantl-basel+1)+1,60,20)
DrawImage(0,0,0)
StopDrawing()
SetGadgetState(3,UseImage(0))
SetGadgetText(2,tab(courantl,courantc))

EndProcedure
ou encore (encore un reliquat!)

Code : Tout sélectionner

OpenConsole():InitKeyboard()
hauteur.l=300
largeur.l=500
nligne=30:ncolonne=30
win.l=OpenWindow(0,0,0,800,500,#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered |#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_TitleBar,"Tableur")
PrintN(Str(win))
CreateGadgetList(win)
ScrollAreaGadget(1,0,0,790,590,ncolonne*60+90,nligne*20+50,30)
For i.l=1 To ncolonne
For j.l=1 To nligne
StringGadget(1000*j+i,60*i,20*j,60,20,"")
Next j
Next i
CloseGadgetList()
run.b=1:ligne=1:colonne=1

Repeat
event=WaitWindowEvent()

If WindowHeight()<>hauteur Or WindowWidth()<>largeur
hauteur=WindowHeight():largeur=WindowWidth()
ResizeGadget(1,0,0,largeur-10,hauteur-10)
EndIf

ExamineKeyboard()
If KeyboardReleased(#PB_Key_Return) And colonne<ncolonne
colonne=colonne+1:ActivateGadget(colonne+1000*ligne)
EndIf
If KeyboardReleased(#PB_Key_down) And ligne<nligne
ligne=ligne+1:ActivateGadget(colonne+1000*ligne)
EndIf
If KeyboardReleased(#PB_Key_up) And ligne>1
ligne=ligne-1:ActivateGadget(colonne+1000*ligne)
EndIf
;If KeyboardReleased(#PB_Key_left) And colonne>1
;colonne=colonne-1:ActivateGadget(colonne+1000*ligne)
;EndIf
;If KeyboardReleased(#PB_Key_Right) And colonne<ncolonne
;colonne=colonne+1:ActivateGadget(colonne+1000*ligne)
;EndIf

Select event

Case #PB_Event_Gadget

  Select EventType()

  Case #PB_EventType_Focus
  n.l=EventGadgetID():ligne=Round(n/1000,0):colonne=n-1000*ligne
  PrintN(Str(ligne)+"   "+Str(colonne))

  EndSelect

Case #PB_EventCloseWindow
run=0

EndSelect

Until run=0
CloseConsole():CloseWindow(win)
End
Pas faire attention à la console
Je ne les ai pas modifié, et ils étaient en cours de construction...
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Message par LavaLava »

Merci pour ton boulot !
Je vais m'y mettre ...
Répondre