Delphi-PRAXiS
Seite 33 von 35   « Erste     23313233 3435      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Virtual Piano (https://www.delphipraxis.net/158944-virtual-piano.html)

EWeiss 24. Jun 2012 13:19

AW: Virtual Piano
 
Zitat:

Zitat von lbccaleb (Beitrag 1172196)
Hey Emil,

hab mir gerade mal deinen Code angesehen, wie du einige Sachen so machst, um mich bisschen weiter zu entwickeln 8-)
Kein Plan, ob du noch an dem Programm was veränderst und ob du das schon weisst, aber mir ist da was kleines aufgefallen:

Du vergleichst oft auf True/False (was man ja bekanntlich nicht machen sollte)

zb:

Delphi-Quellcode:
  IsInitialized := GetClassInfoEx(SkinEngine.skInstance, zClass, wc);
  if IsInitialized = False then
  begin

Vllt. änderst du das ja noch irgendwann ein mal!

BTW. Cooles Prog und thx vor OS :thumb:

Das ist richtig was du sagst.. oder besser gesagt
ist nicht falsch aber auch nicht richtig, halt ein überbleibsel (Gewohnheit) aus meiner VB zeit.

Glaube nicht das ich das noch weiter Entwickle da dieses Projekt ja nur entstanden ist um meine DLL zu testen.
Diese wurde aber mittlerweise weiterentwickelt und ist nicht mehr kompatibel zu VPiano.
Lasse den Quelltext aber stehn so wie er ist, ist vielleicht hilfreich für NonVCL Progger
wenn man auch einiges besser machen könnte.

gruss

EWeiss 6. Dez 2013 00:03

AW: Virtual Piano
 
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

EWeiss 28. Apr 2015 15:48

AW: Virtual Piano
 
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

Aviator 28. Apr 2015 16:06

AW: Virtual Piano
 
Mir wurde gerade beim Entpacken der ZIp-Archive von GData ein Virus angezeigt. In zwei ZIP-Dateien hat er angeschlagen. Das nur als kleine Info.

Code:
Virenwächter
Geprüft: 6496 (2 infiziert)
Letzte Infektion: D:\Download\VirtualPiano\VPiano\Songs\Midi\freude.mid
Infiziert mit: Exploit.CVE-2012-0003.Gen (Engine A)

EWeiss 28. Apr 2015 16:18

AW: Virtual Piano
 
Zitat:

Zitat von Aviator (Beitrag 1299574)
Mir wurde gerade beim Entpacken der ZIp-Archive von GData ein Virus angezeigt. In zwei ZIP-Dateien hat er angeschlagen. Das nur als kleine Info.

Code:
Virenwächter
Geprüft: 6496 (2 infiziert)
Letzte Infektion: D:\Download\VirtualPiano\VPiano\Songs\Midi\freude.mid
Infiziert mit: Exploit.CVE-2012-0003.Gen (Engine A)

Dann hole dir einen Virenscanner der was taugt. ;)
Hab hier AVG der hat mir noch keinen Virus in meinen Archiven angezeigt geschweige denn in einer Midi Datei.
Und so was ginge bei mir auch gar nicht raus.

Und du bist der erste der mir bei fast 60 Downloads so etwas meldet.

ZITAT: Antivirus Test 2014
Zitat:

Die Messwerte auf der unteren Tabelle fassen die Ergebnisse übersichtlich zusammen. Dabei zeigt sich, dass Sie mit allen getesteten Antivirenprogrammen gut geschützt sind.
In der reinen Virenerkennung hatten alle Programme die Note „Sehr gut“. Der schlechteste Wert liegt bei 98,0 Prozent der Schädlinge (G Data), der beste bei stolzen 99,9 Prozent (Kaspersky).
Das sagt schon alles..
Vom False Alarm mal ganz zu schweigen.

gruss

Aviator 28. Apr 2015 16:28

AW: Virtual Piano
 
Hmm. Also G-Data hat als bester Virenscanner abgeschnitten. :roll:
Und den benutze ich schon ewig. Ich weiß zwar, dass der manchmal etwas zu scharf ist und ich will dir auch nicht unterstellen, dass du hier etwas virenverseuchtes hochladen würdest. Ich wollte dir nur bescheid geben, dass diese Datei als eventueller Virus erkannt wird. Es gab hier im Forum ja auch schon diverse Themen in denen es gerade um solche Fehlmeldungen ging. Alle anderen Dateien wurden ohne meckern "durchgewunken".

Aber ansonsten schönes Programm. Auch wenn ich nichts mit Klavier, und was auch immer man alles damit machen kann, am Hut habe. :-D

EWeiss 28. Apr 2015 16:31

AW: Virtual Piano
 
Zitat:

Ich wollte dir nur bescheid geben, dass diese Datei als eventueller Virus erkannt wird
Ist ja kein Problem :)

http://www.pc-magazin.de/vergleichst...h-1944271.html

Na ja Stiftung Warentest.. sorry sagt schon alles.
Zitat:

Aber ansonsten schönes Programm. Auch wenn ich nichts mit Klavier, und was auch immer man alles damit machen kann, am Hut habe.
;)

gruss

BadenPower 28. Apr 2015 16:39

AW: Virtual Piano
 
Zitat:

Zitat von EWeiss (Beitrag 1299576)
Dann hole dir einen Virenscanner der was taugt. ;)
Hab hier AVG der hat mir noch keinen Virus in meinen Archiven angezeigt geschweige denn in einer Midi Datei.

NaJa, ich benutze auf einem der Systeme auch AVG.

Aber das gelbe von Ei ist er auch nicht, denn auch er zeigt Fehlalarme, wie Du im Link unten nachlesen kannst:

http://www.delphipraxis.net/184842-a...ml#post1299118

EWeiss 28. Apr 2015 16:41

AW: Virtual Piano
 
Zitat:

Zitat von BadenPower (Beitrag 1299580)
Zitat:

Zitat von EWeiss (Beitrag 1299576)
Dann hole dir einen Virenscanner der was taugt. ;)
Hab hier AVG der hat mir noch keinen Virus in meinen Archiven angezeigt geschweige denn in einer Midi Datei.

NaJa, ich benutze auf einem der Systeme auch AVG.

Aber das gelbe von Ei ist er auch nicht, denn auch er zeigt Fehlalarme, wie Du im Link unten nachlesen kannst:

http://www.delphipraxis.net/184842-a...ml#post1299118

Da ist kein Scanner von befreit.
NUR man muss es richtig stellen das es ein false Alarm ist.

gruss

BadenPower 28. Apr 2015 16:44

AW: Virtual Piano
 
Zitat:

Zitat von EWeiss (Beitrag 1299581)
NUR man muss es richtig stellen das es ein false Alarm ist.

Habe es gleich AVG gemeldet und die entsprechende Datei hochgeladen. Bislang leider noch keine Reaktion.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr.
Seite 33 von 35   « Erste     23313233 3435      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz