C'était peut-être mal exprimé mais cela voulait dire que ma fonction Playgrid est la Callback d'un timer :
Code : Tout sélectionner
EnableExplicit
;{ DEÉCLARATIONS
; ************ ÉNUMÉRATIONS *************
Enumeration Window
#mf
EndEnumeration
Enumeration Langage #PB_Compiler_EnumerationValue
#FRA
#ANG
#ALL
#bien
EndEnumeration
Enumeration gadget #PB_Compiler_EnumerationValue
#drapeauFR
#drapeauUS
#drapeauGE
#grille
#reset
#mfGrid
#tim1
EndEnumeration
Enumeration Gadget_lang #PB_Compiler_EnumerationValue
#G1
#G2
#G3
#G4
EndEnumeration
; Langue
Enumeration Langue #PB_Compiler_EnumerationValue
#GB
#FR
#GE
EndEnumeration
; TITRES DES MENUS
Enumeration menus #PB_Compiler_EnumerationValue
#ME_GAM
#ME_TON
#ME_HLP
EndEnumeration
; ITEMS DU MENU GAMME
Enumeration Gamme #PB_Compiler_EnumerationValue
#GA_CHR
#GA_DIAMA
#GA_DIAMI
#GA_PMA
#GA_PMI
EndEnumeration
; ITEMS DU MENU TONALITÉ
Enumeration Tonalite #PB_Compiler_EnumerationValue
#TO_C
#TO_Db
#TO_D
#TO_Eb
#TO_E
#TO_F
#TO_Gb
#TO_G
#TO_Ab
#TO_A
#TO_Bb
#TO_B
EndEnumeration
; ITEMS DU MENU AIDE
Enumeration Aide #PB_Compiler_EnumerationValue
#HLP1
#HLP2
#HLP3
#HLP4
#HLP5
#HLP6
EndEnumeration
#FID = #PB_Compiler_EnumerationValue
#T_GR = 16
#T_PL = 16
Structure Plot
; Point de coordonnée haut gauche
x0.i
y0.i
; Point de coordonnée bas droit
x1.i
y1.i
; Le plot est sélectionné (ou pas)
isSelect.b
EndStructure
; Configuration de la grille
Global gnbCol = #T_GR ; Nombre de colonnes
Global gnbLig = #T_GR ; Nombre de lignes
; Configuration d'un plot
Global pInnerSize = #T_PL ; Taille d'un plot
Global pOuterSize = #T_PL+2 ; Dimension exterieur d'un plot
Global pSpace = 2 ; Espacement avant et aprés le plot
; Construction du grid
Global Dim Grid.Plot(gnbCol, gnbLig)
Global Tona.b = 0 ; par défaut tonalité Do
Global G_Base.b = 48 ; Par défaut Octave 2
Global T_Gamme.b = 0 ; par défaut Gamme chromatique
Global flag
Global Dim N_T_Gamme.s(8)
; N_T_Gamme(0) = "Chromatique"
; N_T_Gamme(1) = "Diatonique Majeure"
; N_T_Gamme(2) = "Diatonique Mineure"
; N_T_Gamme(3) = "Pentatonique Majeure"
; N_T_Gamme(4) = "Pentatonique Mineure"
; N_T_Gamme(5) = "Blues"
;
; N_T_Gamme(0) = "Chromatic"
; N_T_Gamme(1) = "Diatonic Major"
; N_T_Gamme(2) = "Diatonic Minor"
; N_T_Gamme(3) = "Pentatonic Major"
; N_T_Gamme(4) = "Pentatonic Minor"
; N_T_Gamme(5) = "Blues"
; Global IDX_LAN = 0, IDX_TON = 0, IDX_GAM = 0, A$
; A$ = #chem2
;
; If ReadFile(#FID, A$ + "sav") <> 0
; ReadFile(#FID, A$ + "sav")
; T_IL = ReadInteger(#FID) ; Index_Lan
; IDX_LAN = ReadInteger(#FID)
; IDX_TON = ReadInteger(#FID)
; IDX_GAM = ReadInteger(#FID)
; CloseFile(#FID)
; Debug A$
; Else
; IDX_LAN = 0
; IDX_TON = 0
; IDX_GAM = 0
; EndIf
;Gammes
Global Dim Gchr.b(16)
; Majeure
Global Dim Gmaj.b(16)
; Mineure
Global Dim Gmin.b(16)
; Penta Maj
Global Dim Gpma.b(16)
; Penta min
Global Dim Gpmi.b(16)
; Blues
Global Dim Gblu.b(16)
Global Dim P_Gam.b(16) ; Gamme utilisée au final
;{ Structure des différentes gammes
Gchr(0) = 0
Gchr(1) = 1
Gchr(2) = 2
Gchr(3) = 3
Gchr(4) = 4
Gchr(5) = 5
Gchr(6) = 6
Gchr(7) = 7
Gchr(8) = 8
Gchr(9) = 9
Gchr(10) = 10
Gchr(11) = 11
Gchr(12) = 12
Gchr(13) = 13
Gchr(14) = 14
Gchr(15) = 15
Gmaj(0) = 0
Gmaj(1) = 2
Gmaj(2) = 4
Gmaj(3) = 5
Gmaj(4) = 7
Gmaj(5) = 9
Gmaj(6) = 11
Gmaj(7) = 12
Gmaj(8) = 14
Gmaj(9) = 16
Gmaj(10) = 17
Gmaj(11) = 19
Gmaj(12) = 21
Gmaj(13) = 23
Gmaj(14) = 24
Gmaj(15) = 26
Gmin(0) = 0
Gmin(1) = 2
Gmin(2) = 3
Gmin(3) = 5
Gmin(4) = 7
Gmin(5) = 8
Gmin(6) = 10
Gmin(7) = 12
Gmin(8) = 14
Gmin(9) = 15
Gmin(10) = 17
Gmin(11) = 19
Gmin(12) = 20
Gmin(13) = 22
Gmin(14) = 24
Gmin(15) = 26
;
Gpma(0) = 0
Gpma(1) = 2
Gpma(2) = 3
Gpma(3) = 5
Gpma(4) = 7
Gpma(5) = 8
Gpma(6) = 10
Gpma(7) = 12
Gpma(8) = 14
Gpma(9) = 15
Gpma(10) = 17
Gpma(11) = 19
Gpma(12) = 20
Gpma(13) = 22
Gpma(14) = 24
Gpma(15) = 26
Gpmi(0) = 0
Gpmi(1) = 2
Gpmi(2) = 3
Gpmi(3) = 5
Gpmi(4) = 7
Gpmi(5) = 8
Gpmi(6) = 10
Gpmi(7) = 12
Gpmi(8) = 14
Gpmi(9) = 15
Gpmi(10) = 17
Gpmi(11) = 19
Gpmi(12) = 20
Gpmi(13) = 22
Gpmi(14) = 24
Gpmi(15) = 26
Gblu(0) = 0
Gblu(1) = 2
Gblu(2) = 3
Gblu(3) = 5
Gblu(4) = 7
Gblu(5) = 8
Gblu(6) = 10
Gblu(7) = 12
Gblu(8) = 14
Gblu(9) = 15
Gblu(10) = 17
Gblu(11) = 19
Gblu(12) = 20
Gblu(13) = 22
Gblu(14) = 24
Gblu(15) = 26
;}
; Définition des couleurs de plot
Global PlotColorInactif = RGB(105, 105, 105)
Global PlotColorActif = RGB(245, 245, 245)
;Sommaire
#chemin="E:\PB-DATA\"
#chem2= "E:\! ! ! PureBasic\"
Global IDX_LAN = 0, IDX_TON = 0, IDX_GAM = 0, A$
; Lecture préférences utilisateur.
A$ = #chem2
If ReadFile(#FID, A$ + "sav") <> 0
ReadFile(#FID, A$ + "sav")
IDX_LAN = ReadInteger(#FID)
IDX_TON = ReadInteger(#FID)
IDX_GAM = ReadInteger(#FID)
CloseFile(#FID)
Else
IDX_LAN = 0
IDX_TON = 0
IDX_GAM = 0
EndIf
;}
;/// INTERFACE UTILISATEUR (FENETRE, MENU, ETC ...)
#LA_FEN = 1024
#HA_FEN = 768
#CA_SIZE = 20
#GD_SIZE = 16 * (#CA_SIZE + 2) + 2
#GD_YST = (#HA_FEN-#GD_SIZE) / 2
#GD_XST = (#LA_FEN-#GD_SIZE) / 2
#TXT_X = #GD_XST + #GD_SIZE / 2
#TXT_Y = #GD_YST + #GD_SIZE + 10
#CLEAR = "RESET"
;/// DECLARATION DES VARIABLES
Global event, police, drapeauFR, drapeauUSdrapeauAL, drapeauFR, drapeauUK, drapeauUI, drapeauUO, drapeauFI, drapeauFO, drapeauAI, drapeauAO, Bout_fr, Bout_uk, Bout_al
Global ix, iy, xx, yy, TX_LEN, TX_HA, XF, Event, Lang, Areset, Rst, Rst_w, Xg, Igr, jn, gr, on, ijn, igr, grmax, grmin, bien, B_WID, index.b, Te_Ga, T_Not$,Ty_ton
Global m_hMidiOut.l ; handle du périphérique de sortie MIDI
Global m_MIDIOpen.b ; 1 = périphérique de sortie MIDI ouvert 0 = non ouvert
Global VelocityDown = 127
Global VelocityUp = 50
Global index, instrument, Index
Global Chann.b = 0
Global Inst.b = 80
Global Index_gam.b = 0
Global Index_Ton.b = 0
;/// Déclaration des procédures
Declare DrawGrid()
Declare Exit()
Declare Midi_ChargeInstrument(Canal.b,Instrument.b)
Declare Midi_Mk_Gam()
Declare Midi_Open()
Declare Midi_PlayNote(Canal.b,Note.b,VelociteDown.b,VelociteUp.b)
Declare Midi_SendMessage(nStatus.l,nCanal.l,nData1.l,nData2.l)
Declare Mk_Txt ()
Declare mk_menus ()
Declare onPlot()
Declare Playgrid()
Declare SetLan()
Declare Start()
Declare Bug(a.s)
Global Dim Gdgr(16, 16)
Global Dim IsNote.b(16)
;/////// Ca commence ici
Procedure Midi_Mk_Gam()
Protected i
Select IDX_GAM
Case 0: ; Croma
For i = 0 To 15
P_Gam(i) = Gchr(i) + G_Base + IDX_TON
Next
Case 1: ; Dia Majeure
For i = 0 To 15
P_Gam(i) = Gmaj(i) + G_Base + IDX_TON
Next
Case 2: ; Dia Mineure
For i = 0 To 15
P_Gam(i) = Gmin(i) + G_Base + IDX_TON
Next
Case 3: ; Penta Maj
For i = 0 To 15
P_Gam(i) = Gpma(i) + G_Base + IDX_TON
Next
Case 4: ; Penta Min
For i = 0 To 15
P_Gam(i) = Gpmi(i) + G_Base + IDX_TON
Next
Case 5: ; Blues
For i = 0 To 15
P_Gam(i) = Gblu(i) + G_Base + IDX_TON
Next
Case 6: ; Par ton
For i = 0 To 15
P_Gam(i) = Gblu(i) + G_Base + IDX_TON
Next
EndSelect
;Bug("Mk_Midi_Gam_2")
Mk_Txt()
EndProcedure
; Ouverture de la fenetre
If OpenWindow(#mf, 0, 0, #LA_FEN, #HA_FEN, "GRID_ZIK", #PB_Window_ScreenCentered | #PB_Window_TitleBar | #PB_Window_SystemMenu)
LoadFont(1, "Arial", 18)
SetGadgetFont(#PB_Default, FontID(1))
SetWindowColor(#mf, RGB(70, 70, 70))
; SetGadgetColor(Te_Ga, #PB_Gadget_FrontColor , RGB(255, 217, 0))
Te_Ga = TextGadget(#PB_Any, 25, 25, 300, 38, "") ;) ;, Y, Largeur, Hauteur,
SetGadgetColor(Te_Ga, #PB_Gadget_FrontColor , RGB(255, 217, 0))
SetGadgetColor(Te_Ga, #PB_Gadget_BackColor , RGB(70, 70, 70))
SetWindowColor(#mf, RGB(70, 70, 70))
AddWindowTimer(#mf, 200, 500)
BindEvent(#PB_Event_Timer,@Playgrid(),#mf)
Midi_Mk_Gam( ) ;Index_gam, Index_Ton) ; crée la gamme à utiliser par défaut : chromatique en Do
Midi_Open()
Midi_ChargeInstrument(Chann,Inst)
; AddWindowTimer(#mf, 200, 400)
Start()
UseJPEGImageDecoder()
; Gestion de la langue
CanvasGadget(#drapeauFR, #LA_FEN-3*48, 20, 46, 33, 0)
CanvasGadget(#drapeauUS, #LA_FEN-2*48, 20, 46, 33, 0)
CanvasGadget(#drapeauGE, #LA_FEN-48, 20, 46, 33, 0)
bien = CatchImage(#PB_Any, ?bienv)
ResizeImage(bien, #GD_SIZE, #GD_SIZE)
B_WID = (#LA_FEN-ImageWidth(bien))/2
drapeauFI = CatchImage(#PB_Any, ?drapeauFI)
drapeauUO = CatchImage(#PB_Any, ?drapeauUO)
drapeauAO = CatchImage(#PB_Any, ?drapeauAO)
drapeauFO = CatchImage(#PB_Any, ?drapeauFO)
drapeauUI = CatchImage(#PB_Any, ?drapeauUI)
drapeauAI = CatchImage(#PB_Any, ?drapeauAI)
ijn = CatchImage(#PB_Any, ?jn)
igr = CatchImage(#PB_Any, ?gr)
Rst = CatchImage(#PB_Any, ?Areset)
Rst_w=ImageWidth(Rst)
mk_menus()
DrawGrid()
SetLan()
; Mémorisation des dimensions du reset
TX_LEN = Rst_W
TX_HA = ImageHeight(Rst)
StopDrawing()
ButtonImageGadget(#reset, (#LA_FEN-TX_LEN)/2, (#HA_FEN+#GD_SIZE)/2 + 20, TX_LEN, TX_HA, ImageID(Rst))
;{ ; Gestion des événements
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventType_LeftClick
EndIf
Select Event
Case #PB_Event_Gadget
If EventGadget() >= grmin And EventGadget() <= grmax
For ix = 0 To 15
For iy = 0 To 15
If gdgr(ix, iy) = EventGadget()
A$ = " x "+ Str(ix) + " y " + Str(iy)+ " " + Str(EventGadget())
EndIf
Next
Next
EndIf
Select EventGadget()
Case #drapeauFR
If EventType() = #PB_EventType_LeftClick
IDX_LAN = 0
mk_menus()
SetLan()
Mk_Txt()
EndIf
Case #drapeauUS
If EventType() = #PB_EventType_LeftClick
IDX_LAN = 1
mk_menus()
SetLan()
Mk_Txt()
EndIf
Case #drapeauGE
If EventType() = #PB_EventType_LeftClick
IDX_LAN = 2
mk_menus()
SetLan()
Mk_Txt()
EndIf
Case #reset ; remet la grille à 0
DrawGrid()
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #GA_CHR
IDX_GAM = 0
Midi_Mk_Gam() ;IDX_GAM, Index_Ton)
Case #GA_DIAMA
IDX_GAM = 1
Midi_Mk_Gam() ;IDX_GAM, Index_Ton)
Case #GA_DIAMI
IDX_GAM = 2
Midi_Mk_Gam();IDX_GAM, Index_Ton)
Case #GA_PMA
IDX_GAM = 3
Midi_Mk_Gam() ;IDX_GAM, Index_Ton)
Case #GA_PMI
IDX_GAM = 4
Midi_Mk_Gam() ;IDX_GAM, Index_Ton)
; Menu tonalié
Case #TO_C
IDX_TON = 0
Midi_Mk_Gam();Index_gam, Index_Ton)
Case #TO_Db
IDX_TON = 1
Midi_Mk_Gam() ;Index_gam, Index_Ton)
Case #TO_D
IDX_TON = 2
Midi_Mk_Gam();Index_gam, Index_Ton)
Case #TO_Eb
IDX_TON = 3
Midi_Mk_Gam();Index_gam, Index_Ton)
Case #TO_E
IDX_TON = 4
Midi_Mk_Gam();Index_gam, Index_Ton)
Case #TO_F
IDX_TON = 5
Midi_Mk_Gam(); Index_gam, Index_Ton)
Case #TO_Gb
IDX_TON = 6
Midi_Mk_Gam(); Index_gam, Index_Ton)
Case #TO_G
IDX_TON = 7
Midi_Mk_Gam(); Index_gam, Index_Ton)
Case #TO_Ab
IDX_TON = 8
Midi_Mk_Gam() ;Index_gam, Index_Ton)
Case #TO_A
IDX_TON = 9
Midi_Mk_Gam(); Index_gam, Index_Ton)
Case #TO_Bb
IDX_TON = 10
Midi_Mk_Gam();Index_gam, Index_Ton)
Case #TO_B
IDX_TON = 11
Midi_Mk_Gam(); Index_gam, Index_Ton)
EndSelect
Default
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf ;}
;- Procédures
Procedure Midi_SendMessage(nStatus.l,nCanal.l,nData1.l,nData2.l)
Protected dwFlags.l = nStatus | nCanal | (nData1 << 8) | (nData2 << 16)
Protected temp.l = midiOutShortMsg_(m_hMidiOut,dwFlags);
dwFlags.l = nStatus | nCanal | (nData1 << 8) | (nData2 << 16)
temp.l = midiOutShortMsg_(m_hMidiOut,dwFlags);
If temp<>0
;MessageRequester("Problème", "Erreur dans l'envoi du message MIDI",0)
EndIf
EndProcedure
;-----------------------------------------------------------------------------------------------------------
Procedure Midi_Open()
If m_MIDIOpen = 0
If midiOutOpen_(@m_hMidiOut,0,0,0,0) <> 0
;MessageRequester("Problème", "Impossible d'ouvrir le périphérique MIDI",0)
Else
Midi_SendMessage($c0,0,0,0)
; Midi_SendMessage($B1 ,0,75,0)
m_MIDIOpen = 1
EndIf
EndIf
EndProcedure
;-----------------------------------------------------------------------------------------------------------
Procedure Midi_PlayNote(Canal.b,Note.b,VelociteDown.b,VelociteUp.b)
If m_MIDIOpen = 0
Midi_Open()
EndIf
If m_MIDIOpen = 1
Midi_SendMessage($80 | Canal,0,Note,VelociteDown)
Midi_SendMessage($90 | Canal,0,Note,VelociteUp)
EndIf
EndProcedure
;-----------------------------------------------------------------------------------------------------------
Procedure Midi_ChargeInstrument(Canal.b,Instrument.b)
If m_MIDIOpen = 0
Midi_Open()
EndIf
If m_MIDIOpen = 1
Midi_SendMessage($c0 | Canal,0,Instrument,0)
EndIf
EndProcedure
Procedure mk_menus ()
Select IDX_LAN
Case 1
CreateMenu(#ME_GAM, WindowID(0))
; MENU GAMME
MenuTitle("Scale")
MenuItem(#GA_CHR, "Chromatic Scale")
MenuItem(#GA_DIAMA, "Major Diatonic Scale")
MenuItem(#GA_DIAMI, "Minor Diatonic Scale")
MenuItem(#GA_PMA, "Major Pentatonic Scale")
MenuItem(#GA_PMI , "Minor Pentatonic Scale")
; MENU TONALITÉ de DO à SI Par demis-tons
MenuTitle("Key")
MenuItem(#TO_C, "C")
MenuItem(#TO_Db, "C#")
MenuItem(#TO_D, "D")
MenuItem(#TO_Eb, "Eb")
MenuItem(#TO_E, "E")
MenuItem(#TO_F, "F")
MenuItem(#TO_Gb, "F#")
MenuItem(#TO_G, "G")
MenuItem(#TO_Ab, "Ab")
MenuItem(#TO_A, "A")
MenuItem(#TO_Bb, "Bb")
MenuItem(#TO_B, "B")
MenuTitle("?")
MenuItem(#HLP1, "Rules")
MenuItem(#HLP2, "Rules")
MenuItem(#HLP3, "Rules")
MenuItem(#HLP4, "Rules")
MenuItem(#HLP5, "Rules")
Case 0
CreateMenu(#ME_GAM, WindowID(0))
; MENU GAMME
MenuTitle("Gamme")
MenuItem(#GA_CHR, "Gamme Chromatique")
MenuItem(#GA_DIAMA, "Gamme Diatonique Majeure")
MenuItem(#GA_DIAMI, "Gamme Diatonique Mineure")
MenuItem(#GA_PMA, "Gamme Pentatonique Majeure")
MenuItem(#GA_PMI , "Gamme Pentatonique Mineure")
; MENU TONALITÉ de DO à SI Par demis-tons
MenuTitle("Tonalité")
MenuItem(#TO_C, "Do")
MenuItem(#TO_Db, "Do#")
MenuItem(#TO_D, "Ré")
MenuItem(#TO_Eb, "Mib")
MenuItem(#TO_E, "Mi")
MenuItem(#TO_F, "Fa")
MenuItem(#TO_Gb, "Fa#")
MenuItem(#TO_G, "Sol")
MenuItem(#TO_Ab, "Lab")
MenuItem(#TO_A, "La")
MenuItem(#TO_Bb, "Sib")
MenuItem(#TO_B, "Si")
; MENU AIDE
MenuTitle("?")
MenuItem(#HLP1, "Rules")
MenuItem(#HLP2, "Rules")
Case 2
CreateMenu(#ME_GAM, WindowID(0))
; MENU GAMME
MenuTitle("Tonleiter")
MenuItem(#GA_CHR, "Chromatische Tonleiter")
MenuItem(#GA_DIAMA, "Diatonique Dur-Tonleiter")
MenuItem(#GA_DIAMI, "Diatonique Moll-Tonleiter")
MenuItem(#GA_PMA, "Pentatonische Dur-Tonleiter")
MenuItem(#GA_PMI , "Pentatonische Moll-Tonleiter")
; MENU TONALITÉ de DO à SI Par demis-tons
MenuTitle("Tonart")
MenuItem(#TO_C, "C")
MenuItem(#TO_Db, "C#")
MenuItem(#TO_D, "D")
MenuItem(#TO_Eb, "Eb")
MenuItem(#TO_E, "E")
MenuItem(#TO_F, "F")
MenuItem(#TO_Gb, "F#")
MenuItem(#TO_G, "G")
MenuItem(#TO_Ab, "Ab")
MenuItem(#TO_A, "A")
MenuItem(#TO_Bb, "Bb")
MenuItem(#TO_B, "B")
; MENU AIDE
MenuTitle("?")
MenuItem(#HLP1, "Rules")
MenuItem(#HLP1, "Rules")
MenuItem(#HLP2, "Rules")
EndSelect
;Bug("mk_menus")
; Mk_Txt()
EndProcedure
;
;
;
Procedure onPlot()
; Parcours de la grille de plots
Protected x, y
; Position x y de la souris
Protected px = GetGadgetAttribute(#mfGrid, #PB_Canvas_MouseX)
Protected py = GetGadgetAttribute(#mfGrid, #PB_Canvas_MouseY)
; Plot en cours de traitement
Static PreviousPlot.i
; Action a effectuer 0 (Aucune, 1 : Selection, 2 : Déselection)
Static CurrentAction.i
; La Souris est sur la grille : Affichage de la main
If EventType() = #PB_EventType_MouseEnter
SetGadgetAttribute(#mfGrid, #PB_Canvas_Cursor, #PB_Cursor_Hand)
EndIf
; La souris est en mouvement et la touche gauche de la soutis est préssée
If (EventType() = #PB_EventType_MouseMove And
GetGadgetAttribute(#mfGrid, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
StartDrawing(CanvasOutput(#mfGrid))
; Parcours de la grille
For x = 0 To gnbCol - 1
; A$ = "X= "+Str(x)
; Debug A$
For y = 0 To gnbLig - 1
With Grid(x,y)
; Le surseur de la souris est sur un plot
; Ce nouveau plot doit etre différent du précédent
If (px > \x0 And py> \y0 And px < \x1 And py < \y1) And (Grid(x,y) <> PreviousPlot)
; C'est un nouveau plot. Mémorisation du plot en cours
PreviousPlot = Grid(x,y)
; Action à effectuer
; 0 : On ne sait pas encore
; 1 : Le plot sera sélectionné
; 2 : Le plot sera déselectionné
If CurrentAction = 0
If \isSelect = #False
CurrentAction = 1
Else
CurrentAction = 2
EndIf
EndIf
If CurrentAction = 1
Box(\x0 + pSpace, \y0 + pSpace, pInnerSize, pInnerSize, PlotColorActif)
\isSelect = #True
EndIf
If CurrentAction = 2
Box(\x0 + pSpace, \y0 + pSpace, pInnerSize, pInnerSize, PlotColorInactif)
\isSelect = #False
EndIf
EndIf
EndWith
Next
Next
;Delay(200)
StopDrawing()
EndIf
;Delay(250)
; Le bouton gauche de la souris est relaché
If EventType() = #PB_EventType_LeftButtonUp
PreviousPlot = #False
CurrentAction = 0
EndIf
; Delay(250)
EndProcedure
Procedure SetLan()
Select IDX_LAN ;
Case 0
SetGadgetAttribute(#drapeauFR, #PB_Button_Image, ImageID(drapeauFI))
SetGadgetAttribute(#drapeauUS, #PB_Button_Image, ImageID(drapeauUO))
SetGadgetAttribute(#drapeauGE, #PB_Button_Image, ImageID(drapeauAO))
Case 1 ;#ANG
SetGadgetAttribute(#drapeauFR, #PB_Button_Image, ImageID(drapeauFO))
SetGadgetAttribute(#drapeauUS, #PB_Button_Image, ImageID(drapeauUI))
SetGadgetAttribute(#drapeauGE, #PB_Button_Image, ImageID(drapeauAO))
Case 2, #ALL
SetGadgetAttribute(#drapeauFR, #PB_Button_Image, ImageID(drapeauFO))
SetGadgetAttribute(#drapeauUS, #PB_Button_Image, ImageID(drapeauUO))
SetGadgetAttribute(#drapeauGE, #PB_Button_Image, ImageID(drapeauAI))
EndSelect
Mk_Txt()
;Bug("Setlan")
EndProcedure
Procedure Playgrid()
Static col, row, sw = 0
Protected i, j
If sw < 1
Debug col
For row = 0 To 15
With Grid(col,row)
If \isSelect
Midi_PlayNote(Chann, P_Gam(15-row),VelocityDown,VelocityUp)
EndIf
EndWith
Next
col = col +1
If col > 15
col = 0
sw = 1
EndIf
Else
For row = 0 To 15
Next
col = col +1
If col > 15
col = 0
sw = 0
EndIf
EndIf
EndProcedure
Procedure DrawGrid()
; Création de la grille de plots
Protected x, y
; Fond du grid
StartDrawing(CanvasOutput(#mfGrid))
Box(0, 0, gnbCol*pOuterSize, gnbLig*pOuterSize, RGB(0, 0, 0))
; Dessin des plots
For x = 0 To gnbCol - 1
For y = 0 To gnbLig -1
With Grid(x,y)
\x0 = x*pOuterSize
\y0 = y*pOuterSize
\x1 = \x0 + pInnerSize
\y1 = \y0 + pInnerSize
\isSelect = #False
Box( \x0 + pSpace, \y0 + pSpace, pInnerSize, pInnerSize, PlotColorInactif)
EndWith
Next
Next
StopDrawing()
EndProcedure
; Un plot est sélectionné
; - On passe dessus avec le clic gauche de la souris préssé
; - Quand on le clic
; Parcours de la grille de plots
;
;
;
Procedure CreRst()
If CreateImage(1, TX_LEN, TX_HA ) And StartDrawing(ImageOutput(1))
; Affichage du bouton reset
ButtonImageGadget(#reset, (gnbCol*pOuterSize/4-TX_LEN)/200, (#HA_FEN+#GD_SIZE)/2+50, TX_LEN, TX_HA, Rst)
EndIf
EndProcedure
Procedure Exit()
Protected r
A$ = #chem2
r = CreateFile(#FID, A$ + "sav") ; <> 0 ; Sauvegarde Paramètres utilisateur.
If r <>0
WriteInteger(#FID, IDX_LAN )
WriteInteger(#FID, IDX_TON)
WriteInteger(#FID, IDX_GAM)
; WriteInteger(#FID, Index_Men)
CloseFile(#FID)
EndIf
End
EndProcedure
Procedure Start()
; Dimension fenetre
Protected ww = 1022
Protected wh = 750
; Marge haute et gauche de la grille
Protected MarginLeft = (ww - (gnbCol*pOuterSize))/2, MarginTop = (wh - (gnbLig*pOuterSize))/2
; Installation de la grille
CanvasGadget(#mfGrid, MarginLeft, MarginTop, gnbCol*pOuterSize, gnbLig*pOuterSize, #PB_Canvas_ClipMouse)
BindGadgetEvent(#mfGrid, @onPlot())
; DrawGrid()
; Déclencheurs
; BindGadgetEvent(#mfGrid, @onPlot())
BindEvent(#PB_Event_CloseWindow, @Exit())
EndProcedure
Procedure Mk_Txt ()
Protected t_gm$
Select IDX_LAN
Case 0
N_T_Gamme(0) = "Chromatique"
N_T_Gamme(1) = "Majeur"
N_T_Gamme(2) = "Mineur"
N_T_Gamme(3) = "Maj. Penta."
N_T_Gamme(4) = "Min. Penta."
N_T_Gamme(5) = "Blues"
Select IDX_TON
Case 0
T_Not$ = "Do"
Case 1
T_Not$ = "Do#"
Case 2
T_Not$ = "Ré"
Case 3
T_Not$ = "Mib"
T_Not$ = "Do"
Case 1
T_Not$ = "Do#"
Case 2
T_Not$ = "Ré"
Case 3
T_Not$ = "Mib"
Case 4
T_Not$ = "Mi"
Case 5
T_Not$ = "Fa"
Case 6
T_Not$ = "Fa#"
Case 7
T_Not$ = "Sol"
Case 8
T_Not$ = "Lab"
Case 9
T_Not$ = "La"
Case 10
T_Not$ = "Sib"
Case 11
T_Not$ = "Si"
EndSelect
Case 1
N_T_Gamme(0) = "Chromatic"
N_T_Gamme(1) = "Major"
N_T_Gamme(2) = "Minor"
N_T_Gamme(3) = "Maj. Penta."
N_T_Gamme(4) = "Min. Penta."
N_T_Gamme(5) = "Blues"
Select IDX_TON
Case 0
T_Not$ = "C"
Case 1
T_Not$ = "C#"
Case 2
T_Not$ = "D"
Case 3
T_Not$ = "Eb"
Case 4
T_Not$ = "E"
Case 5
T_Not$ = "F"
Case 6
T_Not$ = "F#"
Case 7
T_Not$ = "G"
Case 8
T_Not$ = "Ab"
Case 9
T_Not$ = "A"
Case 10
T_Not$ = "Bb"
Case 11
T_Not$ = "B"
EndSelect
Case 2
N_T_Gamme(0) = "Chromatic"
N_T_Gamme(1) = "Major"
N_T_Gamme(2) = "Minor"
N_T_Gamme(3) = "Maj. Penta."
N_T_Gamme(4) = "Min. Penta."
N_T_Gamme(5) = "Blues"
Select IDX_TON
Case 0
T_Not$ = "C"
Case 1
T_Not$ = "C#"
Case 2
T_Not$ = "D"
Case 3
T_Not$ = "Eb"
Case 4
T_Not$ = "E"
Case 5
T_Not$ = "F"
Case 6
T_Not$ = "F#"
Case 7
T_Not$ = "G"
Case 8
T_Not$ = "Ab"
Case 9
T_Not$ = "A"
Case 10
T_Not$ = "Bb"
Case 11
T_Not$ = "B"
EndSelect
EndSelect
t_Gm$ = T_Not$ + " " + N_T_Gamme(IDX_GAM)
SetGadgetText(Te_Ga, t_Gm$)
EndProcedure
Procedure Bug(A$)
; Protected B$
; B$ = A$+" IDX_LAN " + Str(IDX_LAN)+ " IDX_GAM "+Str(IDX_GAM)+" IDX_TON "+Str(IDX_TON)
; Debug B$
; Delay(1000)
EndProcedure
DataSection
drapeauFR:
IncludeBinary #chemin+"DF.jpg"
drapeauUK:
IncludeBinary #chemin+"DG.jpg"
drapeauAL:
IncludeBinary #chemin+"DA.jpg"
drapeauUI:
IncludeBinary #chemin+"DUI.jpg"
drapeauUO:
IncludeBinary #chemin+"DUO.jpg"
drapeauFI:
IncludeBinary #chemin+"DFI.jpg"
drapeauFO:
IncludeBinary #chemin+"DFO.jpg"
drapeauAI:
IncludeBinary #chemin+"DAI.jpg"
drapeauAO:
IncludeBinary #chemin+"DAO.jpg"
Areset:
IncludeBinary #chemin+"Reset.jpg"
jn:
IncludeBinary #chemin+"jaune.jpg"
gr:
IncludeBinary #chemin+"gris.jpg"
bienv:
IncludeBinary #chemin+"Bienvenue.jpg"
EndDataSection
Tu y reconnaitras beaucoup de ce que tu m'avais aimablement donné et dont je te remercie !
.
.