Noch ein kleines(Großes) Problem behoben.
Bedingt durch SetWindowRgn verändert sich die Zorder der Tasten.
Das hat zur folge das beim klick auf die Halbtontasten die vorherige gedrückte Taste mit gespielt wird
wenn sie davor gedrückt wurde.
Vorher!
Delphi-Quellcode:
// 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;
Und jetzt!
Delphi-Quellcode:
ID_KEY_ARRAY_FIRST..ID_KEY_ARRAY_LAST:
begin
// Keyboard eingeschaltet?
if OnState then
begin
GetCursorPos(p);
KeyHandle := WindowFromPoint(p);
Note := MAKELONG(GetDlgCtrlID(KeyHandle), 0) - ID_KEY_ARRAY_FIRST;
CurrentNote := Note;
StartNote(CurrentNote, lastChordInDrag);
end;
end;
Vorher habe ich WParam(wp) so übernommen wie es kommt.
Da aber die ZOrder verändert wird und der Button im Bereich über der Halbtontaste Transparent ist
kann ich mit dem aktuellen Window
Handle nicht mehr arbeiten da es nicht mehr gültig ist.
Also hole ich mir jetzt die Note über die ControlID der ich das jetzt neu ermittelte
Handle übergebe.
Jetzt klappt es trotz der Änderung der ZOrder.
Ihr könnte das ja selbst einfügen in WM_LBUTTONDOWN:
gruss