Thema: Virtual Piano

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#323

AW: Virtual Piano

  Alt 28. Apr 2015, 16:48
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
  Mit Zitat antworten Zitat