Kleines Update dazu:
GetHandle ist wie folgt definiert:
Delphi-Quellcode:
function TMidiDevices.GetHandle(const aDeviceIndex: integer): THandle;
begin
try
if not InRange(aDeviceIndex, 0, fDevices.Count - 1) then
raise EMidiDevices.CreateFmt('%s: Device index out of bounds! (%d)', [ClassName,aDeviceIndex]);
Result:= THandle(fDevices.Objects[ aDeviceIndex ]);
except
Result:= 0;
end;
end;
Wobei TMidiOutput/TMidiInput und TMidiDevices so definiert ist:
Delphi-Quellcode:
// base class for MIDI devices
TMidiDevices = class
private
fDevices: TStringList;
fMidiResult: MMResult;
procedure SetMidiResult(const Value: MMResult);
protected
property MidiResult: MMResult read fMidiResult write SetMidiResult;
function GetHandle(const aDeviceIndex: integer): THandle;
public
// create the MIDI devices
constructor Create; virtual;
// whack the devices
destructor Destroy; override;
// open a specific device
procedure Open(const aDeviceIndex: integer); virtual; abstract;
// close a specific device
procedure Close(const aDeviceIndex: integer); virtual; abstract;
// close all devices
procedure CloseAll;
// THE devices
function IsOpen(ADeviceIndex: Integer): Boolean; // check if open
property Devices: TStringList read fDevices;
end;
// MIDI input devices
TMidiInput = class(TMidiDevices)
private
fOnMidiData: TOnMidiInData;
fOnSysExData: TOnSysExData;
fSysExData: TObjectList;
protected
procedure DoSysExData(const aDeviceIndex: integer);
public
// create an input device
constructor Create; override;
// what the input devices
destructor Destroy; override;
// open a specific input device
procedure Open(const aDeviceIndex: integer); override;
// close a specific device
procedure Close(const aDeviceIndex: integer); override;
// Rescan device list
procedure Rescan;
// midi data event
property OnMidiData: TOnMidiInData read fOnMidiData write fOnMidiData;
// midi system exclusive is received
property OnSysExData: TOnSysExData read fOnSysExData write fOnSysExData;
end;
// MIDI output devices
TMidiOutput = class(TMidiDevices)
constructor Create; override;
// open a specific input device
procedure Open(const aDeviceIndex: integer); override;
// close a specific device
procedure Close(const aDeviceIndex: integer); override;
// send some midi data to the indexed device
procedure Send(const aDeviceINdex: integer; const aStatus, aData1, aData2: byte);
procedure SendSystemReset( const aDeviceIndex: integer);
procedure SendAllSoundOff(const aDeviceIndex: integer; const channel: byte);
// Rescan device list
procedure Rescan;
// send system exclusive data to a device
procedure SendSysEx(const aDeviceIndex: integer; const aStream: TMemoryStream); overload;
procedure SendSysEx(const aDeviceIndex: integer; const aString: string); overload;
end;
GetHandle ist also Teil der Klasse, das war mir so noch nicht klar. Ich habe das für eine Delphi-eigene Funktion gehalten... Damit ergibt die Sache mit dem GetHandle ja erstmal wieder Sinn.
Bääääär