Tableur
-
- Messages : 127
- Inscription : mar. 15/mars/2005 16:37
Tableur
Bonjour à tous
Je fais depuis 3 ans des relevés météo grâce à une petite station météo.
Jusqu'à présent je note mes relevés sur un tableau Excel et je fais mes calculs de moyennes avec les formules d’Excel.
N’ayant pour l’instant fait que des petits jeux (Tétris,Sokoban etc) et quelques autres programmes avec PureBasic je me suis dis voila l’occasion de passer à d’autres méthode de programmation.
Mon problème revient à faire une sorte de tableur ma question est donc la suivante :
Est-il possible avec ListIconGadget de faire un tableau ou l’on peut rentrer des valeurs au clavier dans des cases de différentes colonnes, de faire les calculs puis d’afficher dans ce tableau les résultats avec différentes couleurs bleu pour les valeurs négatives, rouge pour les positives etc.
En vous remerciant de vos réponses
Amitiés
Pascal
Je fais depuis 3 ans des relevés météo grâce à une petite station météo.
Jusqu'à présent je note mes relevés sur un tableau Excel et je fais mes calculs de moyennes avec les formules d’Excel.
N’ayant pour l’instant fait que des petits jeux (Tétris,Sokoban etc) et quelques autres programmes avec PureBasic je me suis dis voila l’occasion de passer à d’autres méthode de programmation.
Mon problème revient à faire une sorte de tableur ma question est donc la suivante :
Est-il possible avec ListIconGadget de faire un tableau ou l’on peut rentrer des valeurs au clavier dans des cases de différentes colonnes, de faire les calculs puis d’afficher dans ce tableau les résultats avec différentes couleurs bleu pour les valeurs négatives, rouge pour les positives etc.
En vous remerciant de vos réponses
Amitiés
Pascal
c'est possible oui mais pas facile.
sauf si tu t'orientes vers une userlibrary dédiée telle que eGrid.
voir ici :
http://www.purebasic.fr/english/viewtop ... highlight=
sauf si tu t'orientes vers une userlibrary dédiée telle que eGrid.
voir ici :
http://www.purebasic.fr/english/viewtop ... highlight=
-
- Messages : 127
- Inscription : mar. 15/mars/2005 16:37
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Et en version free voire OS, qu'y a t il comme possibilité ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
A part eGrid (maintenant shareware), il y a :Progi1984 a écrit :Et en version free voire OS, qu'y a t il comme possibilité ?
CSGrid : http://www.purebasic.fr/english/viewtopic.php?t=17586
xGrid : www.purebasic.fr/english/viewtopic.php?t=21723
CreateGadget (Lib de PBOSL), à utiliser avec RAGrid.lib : http://pbosl.purearea.net/index.php?site=Libs
-
- Messages : 305
- Inscription : mer. 05/janv./2005 12:58
- Localisation : http://www.tib-net.com/meca/index.htm
J'avais pondu ce code pour faire un tableau...
Code : Tout sélectionner
Enumeration #PB_Compiler_EnumerationValue
#saisie
#area_tableau
#image_tableau
#image_colonne_temp
#image_colonne
#image_ligne_temp
#image_ligne
#image_coin
#image_coin_hg
#image_coin_hd
#image_coin_bg
EndEnumeration
#tab_x=10
#tab_y=10
#tab_l=400
#tab_h=400
#tab_nb_colonne=20
#tab_largeur_colonne=60
#tab_nb_ligne=100
#tab_hauteur_ligne=20
#tab_largeur_colonne_tete=20
Enumeration
#Fenetre_base
EndEnumeration
Global der_x,der_y,der_c,der_l
Procedure lecture_tableau()
Global Dim tarif(#tab_nb_colonne,#tab_nb_ligne)
For i=0 To #tab_nb_ligne
prix=20+Random(100)
For j=0 To #tab_nb_colonne
tarif(j,i)=prix*(j+1)
Next
Next
EndProcedure
Procedure deplace_ligne_colonne()
pos_x=GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)
pos_y=GetGadgetAttribute(#area_tableau,#PB_ScrollArea_y)
CreateGadgetList(WindowID(#Fenetre_base))
GrabImage(#image_colonne_temp, #image_colonne, pos_x, 0, #tab_l-#tab_largeur_colonne_tete-20, #tab_hauteur_ligne)
ImageGadget(#image_colonne,#tab_x+#tab_largeur_colonne_tete+1,#tab_y,10,10,ImageID(#image_colonne))
GrabImage(#image_ligne_temp, #image_ligne, 0, pos_y, #tab_largeur_colonne_tete, #tab_h-20-#tab_hauteur_ligne)
ImageGadget(#image_ligne,#tab_x,#tab_y+#tab_hauteur_ligne+1,10,10,ImageID(#image_ligne))
EndProcedure
Procedure creation_ligne_colonne()
CreateGadgetList(WindowID(#Fenetre_base))
li=#tab_nb_colonne*#tab_largeur_colonne
hi=#tab_nb_ligne*#tab_hauteur_ligne
;{- colonne
CreateImage(#image_colonne_temp,li,#tab_hauteur_ligne)
LoadFont(1, "Arial", 10)
StartDrawing(ImageOutput(#image_colonne_temp))
Box(0, 0, li,hi,$AEAEAE)
DrawingFont(FontID(1))
DrawingMode(1)
For i=1 To #tab_hauteur_ligne/2
LineXY(0,i,li,i,RGB(196+5*i,196+5*i,196+5*i))
LineXY(0,#tab_hauteur_ligne-i,li,#tab_hauteur_ligne-i,RGB(196+5*i,196+5*i,196+5*i))
Next
For i=1 To #tab_nb_colonne
LineXY( i*#tab_largeur_colonne-1,6,i*#tab_largeur_colonne-1, #tab_hauteur_ligne-6,$C5C5C5)
LineXY( i*#tab_largeur_colonne,4,i*#tab_largeur_colonne, #tab_hauteur_ligne-4,$585858)
LineXY( i*#tab_largeur_colonne+1,6,i*#tab_largeur_colonne+1, #tab_hauteur_ligne-6,$C5C5C5)
DrawText((i-1)*#tab_largeur_colonne+15, 3, Str(i))
Next
StopDrawing()
;}
;{- ligne
CreateImage(#image_ligne_temp,#tab_largeur_colonne_tete,hi)
LoadFont(1, "Arial", 10)
StartDrawing(ImageOutput(#image_ligne_temp))
Box(0, 0, #tab_largeur_colonne,hi,$AEAEAE)
DrawingFont(FontID(1))
DrawingMode(1)
For i=1 To #tab_largeur_colonne_tete/2
c=180
LineXY(i,0,i,hi,RGB(c+5*i,c+5*i,c+5*i))
LineXY(#tab_largeur_colonne_tete-i,0,#tab_largeur_colonne_tete-i,hi,RGB(c+5*i,c+5*i,c+5*i))
Next
For i=1 To #tab_nb_ligne
LineXY(6,i*#tab_hauteur_ligne-1,#tab_largeur_colonne_tete-6,i*#tab_hauteur_ligne-1,$C5C5C5)
LineXY(4,i*#tab_hauteur_ligne,#tab_largeur_colonne_tete-4,i*#tab_hauteur_ligne,$585858)
LineXY(6,i*#tab_hauteur_ligne+1,#tab_largeur_colonne_tete-6,i*#tab_hauteur_ligne+1,$C5C5C5)
DrawText(#tab_largeur_colonne_tete/2-(TextWidth(Str(i))/2) , (i-1)*#tab_hauteur_ligne+2, Str(i))
Next
StopDrawing()
;}
deplace_ligne_colonne()
EndProcedure
Procedure tableau()
CreateGadgetList(WindowID(#Fenetre_base))
li=#tab_nb_colonne*#tab_largeur_colonne
hi=#tab_nb_ligne*#tab_hauteur_ligne
ScrollAreaGadget(#area_tableau,#tab_x+#tab_largeur_colonne_tete,#tab_y+#tab_hauteur_ligne,#tab_l-#tab_largeur_colonne_tete,#tab_h-#tab_hauteur_ligne,li,hi,20,#PB_ScrollArea_Single )
creation_ligne_colonne()
OpenGadgetList(#area_tableau)
StringGadget(#saisie,0,0,#tab_largeur_colonne,#tab_hauteur_ligne,"",#PB_String_Numeric)
SetGadgetColor(#saisie,#PB_Gadget_BackColor,$F1B4B7)
HideGadget(#saisie,1)
CreateImage(#image_tableau,li,hi)
LoadFont(1, "Arial", 10)
StartDrawing(ImageOutput(#image_tableau))
Box(0, 0, li,hi,$FFFFFF)
DrawingFont(FontID(1))
For i=1 To #tab_nb_colonne
LineXY( i*#tab_largeur_colonne,0,i*#tab_largeur_colonne, hi,$585858)
LineXY( i*#tab_largeur_colonne+1,0,i*#tab_largeur_colonne+1, hi,$C5C5C5)
;DrawText(i*largeur_colonne+15, 3, Str(i))
Next
For i=1 To #tab_nb_ligne
LineXY(0,i*#tab_hauteur_ligne,li,i*#tab_hauteur_ligne,$585858)
LineXY(0,i*#tab_hauteur_ligne+1,li,i*#tab_hauteur_ligne+1,$C5C5C5)
;DrawText(5, i*hauteur_ligne+2, Str(i))
Next
;DrawingMode(1)
For i=0 To #tab_nb_ligne
For j=0 To #tab_nb_colonne
DrawText((j+1)*#tab_largeur_colonne-5-TextWidth(Str(tarif(j,i))) , (i)*#tab_hauteur_ligne+2, Str(tarif(j,i)))
Next
Next
StopDrawing()
ImageGadget(#image_tableau,0,0,l,h,ImageID(#image_tableau))
;{creation des coins
CreateGadgetList(WindowID(#Fenetre_base))
CreateImage(#image_coin,#tab_largeur_colonne_tete*2,#tab_largeur_colonne_tete*2)
StartDrawing(ImageOutput(#image_coin))
Box(0,0,#tab_largeur_colonne_tete*2,#tab_largeur_colonne_tete*2,$D2D2D2)
DrawingMode(4)
For i=1 To #tab_largeur_colonne_tete/2
c=180
Circle(#tab_largeur_colonne_tete,#tab_largeur_colonne_tete, i,RGB(c+5*i,c+5*i,c+5*i))
Circle(#tab_largeur_colonne_tete,#tab_largeur_colonne_tete, #tab_largeur_colonne_tete-i,RGB(c+5*i,c+5*i,c+5*i))
Next
StopDrawing()
GrabImage(#image_coin, #image_coin_hg, 0, 0, #tab_largeur_colonne_tete,#tab_largeur_colonne_tete)
GrabImage(#image_coin, #image_coin_hd, #tab_largeur_colonne_tete, 0, #tab_largeur_colonne_tete,#tab_largeur_colonne_tete)
GrabImage(#image_coin, #image_coin_bg, 0, #tab_largeur_colonne_tete, #tab_largeur_colonne_tete,#tab_largeur_colonne_tete)
ImageGadget(#image_coin_hg,#tab_x,#tab_y,#tab_largeur_colonne_tete,#tab_hauteur_ligne,ImageID(#image_coin_hg))
ImageGadget(#image_coin_hd,#tab_x+#tab_l-#tab_largeur_colonne_tete,#tab_y,#tab_largeur_colonne_tete,#tab_hauteur_ligne,ImageID(#image_coin_hd))
ImageGadget(#image_coin_bg,#tab_x,#tab_y+#tab_h-#tab_largeur_colonne_tete,#tab_largeur_colonne_tete,#tab_hauteur_ligne,ImageID(#image_coin_bg))
;}
EndProcedure
Procedure choix_cellule(c,l,dep=-1)
If GetAsyncKeyState_(#VK_SHIFT) >=0
If GetActiveGadget()=#saisie
If dep>0 ;{deplacement avec les fleche ou la touche entree
Select dep
Case 4 : c=der_c-1 : l=der_l
Case 8 : c=der_c : l=der_l -1
Case 6 : c=der_c+1 : l=der_l
Case 2 : c=der_c : l=der_l +1
Case 1 : c=#tab_nb_colonne-1: l=der_l : SetGadgetAttribute(#area_tableau,#PB_ScrollArea_X, GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)+#tab_nb_colonne*#tab_largeur_colonne)
Case 7 : c=0: l=der_l : SetGadgetAttribute(#area_tableau,#PB_ScrollArea_X, 0)
EndSelect
EndIf
;}
EndIf
;{verification du depacement dans le tableau
If c>#tab_nb_colonne-1 : c=#tab_nb_colonne-1 : EndIf
If c<0 : c=0 : EndIf
If l>#tab_nb_ligne-1: l=#tab_nb_ligne-1 : EndIf
If l<0 : l=0 : EndIf
;}
;{mise à jour du tableau : si la cullule est modifié choix de la couleur
nv_text$=GetGadgetText(#saisie)
If nv_text$<>"" And tarif(der_c,der_l)<>Val(nv_text$)
tarif(der_c,der_l)=Val(nv_text$)
couleur=$B3F2C2
Else
couleur=$FFFFFF
EndIf
;}
;{ redessine le tableau
StartDrawing(ImageOutput(#image_tableau))
;efface avec un dessin de couleur
DrawingFont(FontID(1))
Box(der_c*#tab_largeur_colonne+2,der_l*#tab_hauteur_ligne+2, #tab_largeur_colonne-2,#tab_hauteur_ligne-2,couleur)
DrawingMode(1)
DrawText((der_c+1)*#tab_largeur_colonne-5-TextWidth(Str(tarif(der_c,der_l))), der_l*#tab_hauteur_ligne+2, Str(tarif(der_c,der_l)))
;(j+1)*#tab_largeur_colonne-5-TextWidth(Str(tarif(j,i)))
; dessine la boite de selection de la cellule
If dep<>0
Box(c*#tab_largeur_colonne+2,l*#tab_hauteur_ligne+2, #tab_largeur_colonne-2,#tab_hauteur_ligne-2,$F1B4B7)
StopDrawing()
der_c=c
der_l=l
SetGadgetState(#image_tableau,ImageID(#image_tableau))
OpenGadgetList(#area_tableau)
StringGadget(#saisie,c*#tab_largeur_colonne+1,l*#tab_hauteur_ligne+1,#tab_largeur_colonne,#tab_hauteur_ligne,Str(tarif(c,l)),#PB_String_Numeric )
SetGadgetColor(#saisie,#PB_Gadget_BackColor,$F1B4B7)
SetActiveGadget(#saisie)
;SimulateKeyPress(35,200,0,0,1)
Else
der_c=0
der_l=0
StopDrawing()
SetGadgetState(#image_tableau,ImageID(#image_tableau))
HideGadget(#saisie,1)
SetGadgetText(#saisie,"")
EndIf
;}
;{ deplacement de la zone area
If GadgetX(#saisie)>GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)+#tab_l-#tab_largeur_colonne*2
SetGadgetAttribute(#area_tableau,#PB_ScrollArea_X, GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)+#tab_largeur_colonne)
Else
If GadgetX(#saisie)<GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)
SetGadgetAttribute(#area_tableau,#PB_ScrollArea_X, GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)-#tab_largeur_colonne)
EndIf
EndIf
If GadgetY(#saisie)>GetGadgetAttribute(#area_tableau,#PB_ScrollArea_y)+#tab_h-#tab_hauteur_ligne*2
SetGadgetAttribute(#area_tableau,#PB_ScrollArea_y, GetGadgetAttribute(#area_tableau,#PB_ScrollArea_y)+#tab_hauteur_ligne)
Else
If GadgetY(#saisie)<GetGadgetAttribute(#area_tableau,#PB_ScrollArea_y)
SetGadgetAttribute(#area_tableau,#PB_ScrollArea_y, GetGadgetAttribute(#area_tableau,#PB_ScrollArea_y)-#tab_hauteur_ligne)
EndIf
EndIf
;}
deplace_ligne_colonne()
EndIf
EndProcedure
Procedure clic_tableau()
x_i=WindowMouseX(#Fenetre_base)-#tab_x+#tab_largeur_colonne_tete+GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)
y_i=WindowMouseY(#Fenetre_base)-#tab_y+GetGadgetAttribute(#area_tableau,#PB_ScrollArea_y)
;SetCursorPos_(WindowX(#Fenetre_base)+ WindowMouseX(#Fenetre_base)+45,WindowY(#Fenetre_base)+WindowMouseY(#Fenetre_base)+25)
num_col=x_i/#tab_largeur_colonne-1
num_ligne=y_i/#tab_hauteur_ligne-1
;Debug Str(num_col)+" : "+Str(num_ligne)
choix_cellule(num_col,num_ligne)
EndProcedure
Procedure valide_saisie()
Debug GadgetX(#saisie)
If GadgetX(#saisie)>#tab_l/2
SetGadgetAttribute(#area_tableau,#PB_ScrollArea_X, GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)+#tab_largeur_colonne)
creation_ligne_colonne()
EndIf
x_m=WindowX(#Fenetre_base)+ GadgetX(#area_tableau)-GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)+ GadgetX(#saisie)+#tab_largeur_colonne+5
y_m=WindowY(#Fenetre_base)+ GadgetY(#area_tableau)+GadgetY(#saisie)-GetGadgetAttribute(#area_tableau,#PB_ScrollArea_y)+5+25
; #MOUSEEVENTF_LEFTDOWN
; #MOUSEEVENTF_LEFTUP
SetCursorPos_(x_m,y_m)
mouse_event_(#MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTDOWN , x_m,y_m,0,0)
mouse_event_(#MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTUP, x_m,y_m,0,0)
EndProcedure
Procedure defile_tableau()
nv_x=GetGadgetAttribute(#area_tableau,#PB_ScrollArea_X)
nv_y=GetGadgetAttribute(#area_tableau,#PB_ScrollArea_y)
If der_x<>nv_x Or der_y<>nv_y
der_x=nv_x
der_y=nv_y
creation_ligne_colonne()
EndIf
EndProcedure
Procedure CallBack_base(Hnd,Msg,wParam,lParam)
Resultat = #PB_ProcessPureBasicEvents
;{- fenetre de base
If Hnd=WindowID(#Fenetre_base)
If Msg=13103
deplace_ligne_colonne()
EndIf
EndIf
;}
ProcedureReturn Resultat
EndProcedure
If OpenWindow(#Fenetre_base, 463, 182, 500, 500, "Prog base", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Fenetre_base))
lecture_tableau()
tableau()
SetWindowCallback(@CallBack_base(),#Fenetre_base)
Repeat
event=WaitWindowEvent()
;If event<>0 : Debug event : EndIf
If EventWindow()=#Fenetre_base
Select event
Case #WM_KEYDOWN
Debug EventwParam()
Select EventwParam()
Case 36 ;tout en haut
choix_cellule(0,0,7)
Case 35 ;tout à la fin
choix_cellule(0,0,1)
Case 13
choix_cellule(0,0,6)
Case 37
choix_cellule(0,0,4)
Case 38
choix_cellule(0,0,8)
Case 39
choix_cellule(0,0,6)
Case 40
choix_cellule(0,0,2)
Case 27 ;escape
choix_cellule(0,0,0)
EndSelect
Case #PB_Event_Gadget; *****************Choix d'un bouton
Select EventGadget()
Case #image_tableau
clic_tableau()
EndSelect
Case #WM_CLOSE ; ***************************#PB_EventCloseWindow
quit=1
EndSelect
EndIf
Until quit = 1
EndIf
EndIf
End
Vive le temps libre !
-
- Messages : 127
- Inscription : mar. 15/mars/2005 16:37
-
- Messages : 127
- Inscription : mar. 15/mars/2005 16:37
-
- Messages : 127
- Inscription : mar. 15/mars/2005 16:37
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Je pencherais personnellement plus pour xGrid : OpenSource et bien codé !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Ca bug chez moi : le curseur de la souris disparaît quand on le passe sur la grille. Dommage sinon on effet ça à l'air vachement bien fait et complet !!!Progi1984 a écrit :Je pencherais personnellement plus pour xGrid : OpenSource et bien codé !
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Regarde que les curseurs soient bien chargés !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Y'a aucun endroit dans le programme où il charge les icônes. Y'a juste dans les commentaires de l'éditeur JaBe (les commentaires en fin de fichier) des assignations, mais je ne connais pas comment ça marche. Donc est-ce spécifique à JaBe ou pas ? Car j'utilise l'éditeur original de PB.Progi1984 a écrit :Regarde que les curseurs soient bien chargés !
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Je regarde et te tiens au courant !
[edit 15:35]
-Créer un fichier file.RC
-mets cela dedans :
En remplacant C:\Documents and Settings\usr1\Bureau\Divers\USBDivers\ par le bon chemin
- enregistre
-Ouvre main.pb
- va dans Compilateur > options du compilateur> ressources >
- clique sur les trois petits points
- va chercher le fichier file.RC
- Ajouter
- ok
- et F5
[edit 15:35]
-Créer un fichier file.RC
-mets cela dedans :
Code : Tout sélectionner
2 CURSOR "C:\Documents and Settings\usr1\Bureau\Divers\USBDivers\old_CellSelect.cur"
3 CURSOR "C:\Documents and Settings\usr1\Bureau\Divers\USBDivers\RowSelect.cur"
4 CURSOR "C:\Documents and Settings\usr1\Bureau\Divers\USBDivers\ColumnSelect.cur"
5 CURSOR "C:\Documents and Settings\usr1\Bureau\Divers\USBDivers\SizeV.cur"
6 CURSOR "C:\Documents and Settings\usr1\Bureau\Divers\USBDivers\SizeH.cur"
- enregistre
-Ouvre main.pb
- va dans Compilateur > options du compilateur> ressources >
- clique sur les trois petits points
- va chercher le fichier file.RC
- Ajouter
- ok
- et F5

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net