Zitat:
Du vergleichst oft auf True/False
Hab ich mittlerweile alles korrigiert
Zitat:
Wenn ich beim Klavier von einer Taste auf die nächste rutsche höre ich wohl einen Ton und das ist auch bei jedem
anderen Keyboard so.
(Wär doch zumindest ein nettes Feature. Wenn ich auf deinem Piano Violine spielen will geht das nicht anders)
Grüsse
Na ja lieber später als nie..
Habe das Feature nun addiert bzw.. wer sich noch dafür interessiert kann es nachträglich einfügen.
Delphi-Quellcode:
//uMain..
//.. globale Variablen
currentNote: Integer;
note: Integer;
KeyHandle: HWND;
Delphi-Quellcode:
{$REGION 'WM_MOUSEMOVE'}
WM_MOUSEMOVE:
begin
// Über Tastatur spielen ausgestellt?
if not (CheckUseKey.GetCheckButtonStatus(CheckUseKey.Handle)) then
begin
// Kein Preset am spielen?
if not PresetValue then
begin
case LoWord(wP) of
// Noten bei gedrückter linker Maustaste spielen
ID_KEY_ARRAY_FIRST..ID_KEY_ARRAY_LAST:
begin
if not (GetSystemMetrics(SM_SWAPBUTTON) <> 0) then
begin
// nicht umgeschaltet dann Linke Maustaste
if (GetAsyncKeyState(VK_LBUTTON) and 32768 <> 0) then
begin
GetCursorPos(p);
KeyHandle := WindowFromPoint(p);
note := MAKELONG(GetDlgCtrlID(KeyHandle), 0) - ID_KEY_ARRAY_FIRST;
if (note >= 0) and (note < 128) and (note <> CurrentNote) then
begin
lastChordInDrag := integer(TChord(Chord));
StopNote(CurrentNote, lastChordInDrag);
CurrentNote := note;
StartNote(CurrentNote, lastChordInDrag);
end;
end;
end;
end;
end;
end;
end;
end;
{$ENDREGION}
{$REGION 'WM_LBUTTONDOWN'}
WM_LBUTTONDOWN:
begin
if not (CheckUseKey.GetCheckButtonStatus(CheckUseKey.Handle)) then
begin
if not PresetValue then
begin
case LoWord(wP) of
// Note mit der Maus spielen
ID_KEY_ARRAY_FIRST..ID_KEY_ARRAY_LAST:
begin
// Keyboard eingeschaltet?
if OnState then
begin
lastChordInDrag := integer(TChord(Chord));
StartNote(((wp - ID_KEY_ARRAY_FIRST)), lastChordInDrag);
currentNote := wp - ID_KEY_ARRAY_FIRST;
end;
end;
end;
end;
end
else
SetFocus(WinHandle);
// Instrumenten Bank Speichern/Weiterschalten
case LoWord(wP) of
ID_BANK_FIRST..ID_BANK_LAST:
begin
if GetKeyState(VK_SHIFT) and 32768 <> 0 then
begin
Banks[wP - (ID_BANK_FIRST - 1)].Value := InstIndex;
tmpStr := Split(InstArrayList[InstIndex], ',');
SKAERO_SetCTLText(SKAERO_GetMainItem(WinHandle, ID_INSTRUMENTLABEL),
WideString(tmpStr[0]));
SetController(32, 0, Channel);
SetInstrument(Banks[wP - (ID_BANK_FIRST - 1)].Value, Channel);
SKAERO_SetToolTipText(SKAERO_GetMainItem(WinHandle, wP),
PWideChar(tmpStr[0]));
end
else
begin
if Banks[wP - (ID_BANK_FIRST - 1)].Value > -1 then
begin
tmpStr := Split(InstArrayList[Banks[wP - (ID_BANK_FIRST - 1)].Value], ',');
SKAERO_SetCTLText(SKAERO_GetMainItem(WinHandle, ID_INSTRUMENTLABEL),
WideString(tmpStr[0]));
MidiTracker.CurrentInst[MidiTracker.CurrentTrack] := Banks[wP - (ID_BANK_FIRST - 1)].Value;
Channel := MidiTracker.CurrentTrack;
MidiTracker.ChangeInstrument(MidiTracker.CurrentInst[MidiTracker.CurrentTrack]);
end;
end;
end;
end;
end;
{$ENDREGION}
{$REGION 'WM_LBUTTONUP'}
WM_LBUTTONUP:
begin
if not (CheckUseKey.GetCheckButtonStatus(CheckUseKey.Handle) = True) then
begin
case LoWord(wP) of
// zuletzt gespielte Note mit der Maus stoppen
ID_KEY_ARRAY_FIRST..ID_KEY_ARRAY_LAST:
begin
if OnState then
begin
lastChordInDrag := integer(TChord(Chord));
StopNote(CurrentNote, lastChordInDrag);
SKAERO_SetZorder(SKAERO_GetMainItem(WinHandle, wP+1), HWND_TOP);
end;
end;
end;
end else
begin
Result := SendMessage(WinHandle, WM_COMMAND, wP, lP);
exit;
end;
end;
{$ENDREGION}
gruss