Moin,
lad' dir mal von der selben Internetseite das Projekt "MidiDemo.zip"
http://breakoutbox.de/pascal/midi/MidiDemo.zip
runter. Da ist deine verlinkte Datei "Midi.pas" mit drin.
Dann entpacken und in Lazarus öffnen. Ich hab's mit Lazarus 2.0.6 probiert und es funktionierte.
Dann in der Demo klick auf den Button "Open all Devices" und anschließend erzeugst du mit deinem Midigerät einen Midi-Event, der dann in deiner Midi-Schnittstelle ankommen sollte. Ich hab 'ne Taste auf meinem Akai-MPK-irgendwas gedrückt.
Diese Event erscheint dann in Hex-Darstellung in der Liste des Programs.
Wieso ist das so?
Schau dir die Methode "TForm1.FormCreate" an. Da gibts die Zeile
über die du den MidiEvent ("TMidiInput.fOnMidiData")aus der Midi.pas verbindest mit dem Eventhandler (also der Procedure) "TForm1.OnMidiInData".
In der "procedure MidiInCallback" wird der Event abgefeuert und du landest in der "TForm1.OnMidiInData".
Setze z.B. mal einen Brechpunkt/Haltpunkt in der "TForm1.OnMidiInData" und schau dir den Aufrufstack/Calls stack an. Da kannst du sehen, was da abgeht.
ACHTUNG: Im Eventhandler "TForm1.OnMidiInData" geht's dann mit einem Postmessage weiter. Der dortige Kommentar läßt mich vermuten, daß in den Projekt mit Threads gearbeitet wird. Ich denke die Interrupt-Sache auf der Schnittstelle. Siehe Callback-Methode "MidiInCallback".
Man darf nicht aus einem anderen Thread/Prozess irgendwas an der Benutzer-Oberfläche des Hauptprogramms/-Threads machen.....das knallt. Durch das Postmessage findet aber eine Entkopplung statt, so daß die "Daten" an der Oberfläche (Ausgabeliste) angezeigt werden können.
Gruß vom Schnuckenbock.