AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Virtual Piano

Virtual Piano

Ein Thema von EWeiss · begonnen am 8. Mär 2011 · letzter Beitrag vom 13. Apr 2019
Antwort Antwort
Seite 33 von 35   « Erste     23313233 3435   
EWeiss
Projekt entfernt..

Geändert von EWeiss (24. Jul 2019 um 05:46 Uhr)
 
EWeiss
 
#321
  Alt 24. Jun 2012, 14:19
Hey Emil,

hab mir gerade mal deinen Code angesehen, wie du einige Sachen so machst, um mich bisschen weiter zu entwickeln
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
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

Geändert von EWeiss (24. Jun 2012 um 14:53 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#322
  Alt 6. Dez 2013, 01:03
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

Geändert von EWeiss (18. Dez 2013 um 09:56 Uhr)
  Mit Zitat antworten Zitat
EWeiss
 
#323
  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
Aviator

 
Delphi 10.3 Rio
 
#324
  Alt 28. Apr 2015, 17:06
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)
  Mit Zitat antworten Zitat
EWeiss
 
#325
  Alt 28. Apr 2015, 17:18
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

Geändert von EWeiss (28. Apr 2015 um 17:28 Uhr)
  Mit Zitat antworten Zitat
Aviator

 
Delphi 10.3 Rio
 
#326
  Alt 28. Apr 2015, 17:28
Hmm. Also G-Data hat als bester Virenscanner abgeschnitten.
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.
  Mit Zitat antworten Zitat
EWeiss
 
#327
  Alt 28. Apr 2015, 17:31
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

Geändert von EWeiss (28. Apr 2015 um 17:36 Uhr)
  Mit Zitat antworten Zitat
BadenPower
 
#328
  Alt 28. Apr 2015, 17:39
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
  Mit Zitat antworten Zitat
EWeiss
 
#329
  Alt 28. Apr 2015, 17:41
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
  Mit Zitat antworten Zitat
BadenPower
 
#330
  Alt 28. Apr 2015, 17:44
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
Delphi-Forum.de - Array statisch/dynamisch oder TList fr Midi-Events This thread Refback 20. Sep 2011 15:59

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf