Bonjour
Je voudrais capture des infos sysex provenant d'un clavier
Pour celà j'utilise l'activX Mabry MIDIio32.OCX
Le nom de mon activX : MIDIInput2
Je sélectionne mon port Midi
MIDIInput2>>deviceId = nLeDevice-1
MIDIInOpen2()
La Procédure MidiOpen2()
//-------------------------------------------------
SI form_receveivesysex1.MIDIInput2>>State >= MIDISTATE_OPEN ALORS
form_receveivesysex1.MIDIInput2>>Action = MIDIIN_CLOSE
form_receveivesysex1.MIDIInput2>>Filter(FILTER_F9) = Faux
form_receveivesysex1.MIDIInput2>>Filter(FILTER_ACTIVE_SENSE) = Faux
form_receveivesysex1.MIDIInput2>>Filter(FILTER_CLOCK) = Faux
FIN
form_receveivesysex1.MIDIInput2>>Action = MIDIIN_OPEN
form_receveivesysex1.MIDIInput2>>Filter(FILTER_F9) = Vrai
form_receveivesysex1.MIDIInput2>>Filter(FILTER_ACTIVE_SENSE) = Vrai
form_receveivesysex1.MIDIInput2>>Filter(FILTER_CLOCK) = Vrai
Je lance l'écoute du port
MIDIInput2>>Action = MIDIIN_START
Multitâche(-1)
Ma procédure qui doit traiter les messages
//-----------------------------------------------------
//----------------------------------------------------------------------------------------------
PROCEDURE MIDIInput2_Message()
//----------------------------------------------------------------------------------------------
n est entier
SysexListCount est entier
robert est une chaîne
nMaxLong est un entier
TANTQUE MIDIInput2>>MessageCount > 0 AND Dimension(MIDIInput2>>Buffer) > 0
// DisplayBufferString[SysexListCount] = Hex(Caract(Gauche(MIDIInput2.Buffer, 1))) ça c'était en VB6
DisplayBufferString[SysexListCount] = NumVersHexa(Caract(Gauche(MIDIInput2>>Buffer, 1)))
nMaxLong = Taille(MIDIInput2>>Buffer)
POUR n = 2 A nMaxLong
// gsRobert = Hex(Caract(Milieu(MIDIInput2.Buffer, n, 1)))
robert = NumVersHexa(Caract(Milieu(MIDIInput2>>Buffer, n, 1)))
// SI Hex(Caract(Milieu(MIDIInput2>>Buffer, n, 1))) < 10 ALORS
SI NumVersHexa(Caract(Milieu(MIDIInput2>>Buffer, n, 1))) < 10 ALORS
robert = "0" + robert
FIN
DisplayBufferString[SysexListCount] = DisplayBufferString[SysexListCount] + " " + robert
robert = ""
FIN
ListeAjoute(List1, DisplayBufferString[SysexListCount])
form_receveivesysex1..Libellé = "Sysex -> Je reçois quelque chose! = " + DisplayBufferString[SysexListCount]
MIDIInput2>>Action = MIDIIN_REMOVE
FIN
SI Taille(DisplayBufferString[SysexListCount]) > 0 ALORS
FIN
MIDIInput2>>Action = MIDIIN_REMOVE
//----------------------------------------------------------------------------------
PROCEDURE NumVersHexa(Number)
//-----------------------------------------------------------------------------------
Hex est une chaîne
nTaille est un entier
i est un entier
nTaille = Taille(Number)
POUR i = 1 A nTaille
Hex += NumériqueVersChaîne(Asc(Number[[i]]),"2X")
FIN
RENVOYER Hex
Le souci c'est que je reçois rien et n'accède pas à la procédure : comment vient-on dans ma procédure ?
Avec Winmm.dll il y a une fonction Callback qui intervient
Là ça devrait être pareil ? mais comment indiquer à l'activX ou est ma fonction CallBack ?
J'ai pu faire marcher ça en VB6 mais ça marche pas en Windev, je n'accède jamais à MIDIInput_message()
Autre question
comment affecte-t-on un filtre avec Winnmm.dll pour recevoir les infos sysex
comme ci-dessous mais dans l'API
form_receveivesysex1.MIDIInput2>>Filter(FILTER_F9) = Vrai
form_receveivesysex1.MIDIInput2>>Filter(FILTER_ACTIVE_SENSE) = Vrai
form_receveivesysex1.MIDIInput2>>Filter(FILTER_CLOCK) = Vrai
Merci d'avance pour vos conseils éclairés
Partager