Delphi-PRAXiS
Seite 8 von 9   « Erste     678 9      

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 18. Jun 2011 22:44

AW: Virtual Piano
 
Zitat:

Zitat von NamenLozer (Beitrag 1107248)

Moment mal – deine WndProc ist eine Methode eines Objekts? Woher soll denn dann der implizite Parameter
Delphi-Quellcode:
self
kommen, wenn die WndProc von Windows aufgerufen wird? Das könnte durchaus der Grund für den Crash sein.

Änder doch mal die Deklaration in
Delphi-Quellcode:
class procedure TSkinListBox.ClientWndProc(var Message: TMessage); static;
. Das ist dann quasi wie eine „normale“ Procedure, nur in einer Klasse deklariert.


edit: Okay, sorry, kannte
Delphi-Quellcode:
MakeObjectInstance
nicht. Gerade nachgelesen, was das ist – damit sollte es wohl doch in Ordnung sein.

Sollte nicht funktionieren.
Zitat:

[DCC Fehler] uListBox.pas(98): E2376 STATIC kann nur für nicht-virtuelle Klassenmethoden verwendet werden
Zitat:

Okay, sorry, kannte MakeObjectInstance nicht. Gerade nachgelesen, was das ist – damit sollte es wohl doch in Ordnung sein.
Kein problem ;)

gruss

Namenloser 18. Jun 2011 22:53

AW: Virtual Piano
 
Ach sorry, mein Fehler. Ich habe völlig übersehen, dass in dem Archiv nur die geänderten Dateien enthalten waren. Deshalb ging es nicht. Ich habe jetzt dieses Dateien über eine ältere Version drüberkopiert, und siehe da: Es funktioniert :-D Cool!

Glückwunsch, du hast den Fehler wohl doch behoben! :wink:

EWeiss 18. Jun 2011 22:59

AW: Virtual Piano
 
Zitat:

Zitat von NamenLozer (Beitrag 1107250)
Ach sorry, mein Fehler. Ich habe völlig übersehen, dass in dem Archiv nur die geänderten Dateien enthalten waren. Deshalb ging es nicht. Ich habe jetzt dieses Dateien über eine ältere Version drüberkopiert, und siehe da: Es funktioniert :-D Cool :-D

Glückwunsch, du hast den Fehler wohl doch behoben! :wink:

WOW ;) Das ist doch mal was.. ohne Vista :)
OK das mit dem Selektieren aslo einen Rahmen um den Selektierten eintrag wird wohl nicht gehen da hier ein *png für benötigt wird..
Das nur mal so am Rande!
Dann danke nochmal für das Testen.

gruss

EWeiss 19. Jun 2011 20:28

AW: Virtual Piano
 
Wer's braucht!

Im Quelltext enthalten.. deshalb hier gelöscht!

Noch ein kleiner Fix für die Winproc uMiditracker.
SB_PAGEUP, SB_PAGEDOWN addiert und unnötige doppelte deklarationen entfernt.

gruss

EWeiss 23. Jun 2011 05:26

AW: Virtual Piano
 
Zitat:

Zitat von NamenLozer (Beitrag 1101857)
Ich kann das Programm ja leider weiterhin nicht starten, aber auf dem Screenshot ist mir aufgefallen, dass alles geskinnt
ist bis auf die Scrollbars des Grids. Wirst du die eigentlich noch durch eigene ersetzen?

Jo habe ich mittlerweile siehe Pic ;)
Noch nicht ganz fertig aber sieht schon fein aus :)
Erst mal ne VScrollBar (für die Instrumentenliste) die kann aber nachher auch im Grid verwendet werden.

gruss

EWeiss 26. Jun 2011 18:40

AW: Virtual Piano
 
Neue Version Oben .. siehe changelog.

gruss

EWeiss 27. Jun 2011 16:43

AW: Virtual Piano
 
Sorry noch ein kleines Update.. Quelltext
Flickern und Down Status der Page(ScrollBar) gefixt.

gruss

alfold 2. Jul 2011 15:05

AW: Virtual Piano
 
hi, ich mal wieder:wink:
Brauche Erklärung für folgenden Fall!

Original Miditracker:

Code:
HalbTon: array[0..100] of Bool;

DieNoten: TSplitStrArray;
alles OK, aber wenn es so geändert wird
Delphi-Quellcode:
DieNoten: TSplitStrArray;

HalbTon: array[0..100] of Bool;
kracht es mit exception beim Schreiben auf DieNoten[0]

Was hat die Reihenfolge damit zu tun:shock:
Oder sollte ich diese Frage mal ins Forum stellen?
Gruss alfold

Namenloser 2. Jul 2011 16:28

AW: Virtual Piano
 
Kann es sein, dass
Delphi-Quellcode:
DieNoten
die Länge 0 hat? Im ersten Fall wird der Zugriff noch durch das 100 Bytes lange Boolean-Array
Delphi-Quellcode:
HalbTon
„aufgefangen“, im zweiten Fall kommt jedoch nach
Delphi-Quellcode:
DieNoten
keine Deklaration mehr, und der Zugriff geht ins Nirwana (nicht alloziierter Speicher) → Zugriffsverletzung.

Edit: Schalte mal in den Compiler-Optionen die Bereichsprüfung ein.

alfold 2. Jul 2011 17:50

AW: Virtual Piano
 
Ok Fehler gefunden sehr merkwürdig.
Egal ob es Halbton, DieNoten oder NotenName ist
Es kann nicht kommplett auf die Variable/Array zugegeriffen werden.
Nur wenn davor genügend Speicher reserviert wurde, sei es durch eine Hilfsvariable, die keiner brauch. Ansonsten fehlt immer 'eine Adresse' vorsichtig Formuliert!

Keine Ahnung warum dies so passiert!!!

Dies ist mir nur aufgefallen, weil man das Array 'HalbTon' gar nicht benötigt! und ich entfernen wollte:shock:

EDIT:
Sobald 'DieNoten' in SplitNotes auftauchen kracht es!
nimmt man dies weg, muss mann auch NotenNamen wo anders hinsetzten!

ALLES MERKWÜRDIG!

hänge schon 3 Tage an diesem Phänomen.

Gruss alfold

EWeiss 2. Jul 2011 18:10

AW: Virtual Piano
 
Zitat:

Zitat von NamenLozer (Beitrag 1109639)
Kann es sein, dass
Delphi-Quellcode:
DieNoten
die Länge 0 hat? Im ersten Fall wird der Zugriff noch durch das 100 Bytes lange Boolean-Array
Delphi-Quellcode:
HalbTon
„aufgefangen“, im zweiten Fall kommt jedoch nach
Delphi-Quellcode:
DieNoten
keine Deklaration mehr, und der Zugriff geht ins Nirwana (nicht alloziierter Speicher) → Zugriffsverletzung.

Edit: Schalte mal in den Compiler-Optionen die Bereichsprüfung ein.

NÖ die ist korrekt und wird mit 12 zurück geliefert.
Deklariere die
Delphi-Quellcode:
DieNoten: TSplitStrArray;

mal public dann dürfte die Reihenfolge keine Rolle mehr spielen.

Zitat:

Keine Ahnung warum dies so passiert!!!
Weil Privat und nicht public.. bzw.. weil ich aus einer Privaten Deklaration auf ein als Global definiertes Array zugreifen will
Das scheint sich nicht zu vertragen.

Zitat:

weil man das Array 'HalbTon' gar nicht benötigt! und ich entfernen wollte
:shock::?:

gruss

alfold 2. Jul 2011 18:38

AW: Virtual Piano
 
So habe DieNote entfernt und in Splitnotes ne local Variable dafür genommen.
Darauf hin musst ich NotenName noch wo anders hinsetzten sonst hat es da plötzlich geknallt.

Bereichsprüfung ist an hält ja auch an, an der Pos wo es knallt:wink: Fehlerhafte initialisierung! Warum auch immer!?

Zitat:

Zitat von EWeiss (Beitrag 1109665)
Zitat:

weil man das Array 'HalbTon' gar nicht benötigt! und ich entfernen wollte
:shock::?:

Für was hast Du 'NotenName' damit geht es auch:wink:

@NamenLozer: Es kann immer nur auf das 1(0) array Element nicht zugegriffen werden bei Schreiben/lesen. Wenn alles in der Reihenfolge bleibt

Delphi-Quellcode:
 TMidiTracker = class
  private

    FHGrid:  HWND;
    FWidth:  integer;
    FHeight: integer;
    FTop:    integer;
    FLeft:   integer;
    Img:     cardinal;
    dwStyle: DWORD;
    dwClass: PWideChar;
    IsInitialized: BOOL;
    FOffsetX: integer;
    FOffsetY: integer;

   //HalbTon: array[0..100] of Bool; <--das zuerst weggenommen knalls bei DIENOTEN

    //DieNoten: TSplitStrArray; <---das weggenommen peng bei NOTENNAME
    //NotenNamen: array[0..127] of string;

    DimmedCol: array[0..15] of COLORREF;
    IsDrum:  array[0..15] of Bool;
    DrumNum: array[0..15] of integer;
    NotenNamen: array[0..127] of string;// jetzt hier hin gesetzt funct!??
auch der Versuch Public zu setzten je nach reihenfolge peng?

NORMAL IST DIES ABER NICHT:?

Gruss

EWeiss 2. Jul 2011 18:40

AW: Virtual Piano
 
Kein ahnung was du machst.
Ich kann die reihenfolge setzen wie ich will da kracht nix. :wink:

Edit:
kann drehen wie ich will

Delphi-Quellcode:
    NotenNamen: array[0..127] of string;
    HalbTon: array[0..100] of Bool;
    DieNoten: TSplitStrArray;
gruss

alfold 2. Jul 2011 18:52

AW: Virtual Piano
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
TMidiTracker = class
  private

    FHGrid: HWND;
    FWidth: integer;
    FHeight: integer;
    FTop: integer;
    FLeft: integer;
    Img: cardinal;
    dwStyle: DWORD;
    dwClass: PWideChar;
    IsInitialized: BOOL;
    FOffsetX: integer;
    FOffsetY: integer;

   //HalbTon: array[0..100] of Bool; <--das zuerst weggenommen knalls bei DIENOTEN

    //DieNoten: TSplitStrArray; <---das weggenommen peng bei NOTENNAME
    NotenNamen: array[0..127] of string;//<--wieder gesetzt!!!!!!

    DimmedCol: array[0..15] of COLORREF;
    IsDrum: array[0..15] of Bool;
    DrumNum: array[0..15] of integer;
    //NotenNamen: array[0..127] of string;// jetzt hier hin gesetzt funct!??
und peng! siehe Photo:
Das passiert ja währen der initialisierung!
Gruss

EWeiss 2. Jul 2011 18:57

AW: Virtual Piano
 
Und kein Peng ;)

Siehe oben angehängtes Foto.

PS:
Warum veränderst du jetzt alle Variablen Namen?

Wenn ich später da weiter Arbeiten will (möchte) finde ich keine
mir bekannte Function mehr.:(


gruss

Namenloser 2. Jul 2011 20:08

AW: Virtual Piano
 
Zitat:

Zitat von EWeiss (Beitrag 1109665)
Zitat:

Keine Ahnung warum dies so passiert!!!
Weil Privat und nicht public.. bzw.. weil ich aus einer Privaten Deklaration auf ein als Global definiertes Array zugreifen will
Das scheint sich nicht zu vertragen.

Aus einer privaten Deklaration auf ein globales Array zugreifen, sollte an sich funktionieren (ob es gutes Design ist, ist eine andere Frage). Man kann immer von niedrigeren Sichtbarkeitsstufen auf Elemente höherer Sichtbarkeitsstufe zugreifen. Nur umgekehrt geht es natürlich nicht, aber da meckert der Compiler schon rechtzeitig. Eine Zugriffsverletzung sollte auf keinen Fall auftreten können. Es muss an etwas anderem liegen.

Wie ist
Delphi-Quellcode:
TSplitStrArray
definiert? Und wie sieht
Delphi-Quellcode:
Split()
aus?

alfold 2. Jul 2011 20:29

AW: Virtual Piano
 
Zitat:

Zitat von EWeiss (Beitrag 1109678)
Und kein Peng ;)

Siehe oben angehängtes Foto.

Dann mach mal //HalbTon: array[0..100] of Bool; und dokumentiere mal halbton in Dragrid und PrintSidbar aus.
Soll ja nur zum Test sein, ob Du dann etwa in zeile 290 eine Fehlermeldung bekommst.

Obendrein sollst Du ja nicht von Deinem Rechner ausgehen.
Bei mir funct auch immer alles - aber wehe ich komm auf ein anderen Rechner. Sei es mit dem fertigen Prog oder mit den Quellcode, der mal überarbeitet werden soll:shock:

Egal, solange ich die original Reienfolge einhalte funct alles, aber wehe -siehe oben- . Dies gibt mir zu denken!!!!

Anbei:
Ich habe schon einiges vereinfachen können! Du hast manchmal unötiges gemacht.
Ich muss sowie so neue Proceduren schreiben. Die alten mach ich {} so
1. Grid[] wird dynamisch
2. werden die Daten so im Grid abgelegt wie die original MIDIFile
$0;$90;$76;$42;$97;$80,$00 als Beispiel
Somit kann man auch Akkorde in einem Track spielen, lautstärke für jede Note festlegen usw:wink:

Problem bei der ganzen Sache ist, das ich fast nichts nutzen kann von Dir, bis auf die Graphicroutinen und die muss ich auch anpassen:cry:

Wahrscheinlich ist es besser den MIDITRACKER gleich neu zu schreiben. Denn zur Zeit Doktore ich an zu vielen Stellen im jetztigen MidiTracker und dann kommt sowas raus siehe oben und such den Fehler. Der hat mir 3 Tage gekostet.
Und bleibt ein RÄÄÄÄTsel.

@NamenLozer:
Delphi-Quellcode:
 
{----------------in uGlobal.pas--------------}
type
  TSplitStrArray = array of string;
....
....
function Split(const Source, Delimiter: string): TSplitStrArray;
...
...

function Split(const Source, Delimiter: string): TSplitStrArray;
var
  spCount: integer;
  spPos:   integer;
  spLength: integer;
  sTemp:   string;
  aSplit:  TSplitStrArray;

begin
  sTemp   := Source;
  spCount := 0;
  spLength := Length(Delimiter) - 1;
  repeat
    spPos := Pos(Delimiter, sTemp);
    if spPos = 0 then
      break
    else
    begin
      Inc(spCount);
      SetLength(aSplit, spCount);
      aSplit[spCount - 1] := Copy(sTemp, 1, spPos - 1);
      Delete(sTemp, 1, spPos + spLength);
    end;

  until False;
  if Length(sTemp) > 0 then
  begin
    Inc(spCount);
    SetLength(aSplit, spCount);
    aSplit[spCount - 1] := sTemp;
  end;

  Result := aSplit;

end;

{--------in uMidiTraker------------------------}
private
 DieNoten: TSplitStrArray;
...
...

procedure TMidiTracker.SplitNotes;
var
  IntA: integer;
  IntB: integer;
  IntC: integer;
  //mynoten: TSplitStrArray; <--war als test von mir

begin

 DieNoten := Split('C,C#,D,D#,E,F,F#,G,G#,A,A#,B', ',');
  for IntA := 0 to 11 do
  begin
    for IntB := 0 to 11 do
    begin
      IntC := IntA * 12 + IntB;
      if IntC < 128 then
        NotenNamen[127 - IntC] := IntToStr(IntA) + DieNoten[IntB];
    end;
  end;

end;
Problem ist solange alles in der Reihenfolge wie er es hat, funct es ja, aber wie oben beschrieben, sobald etwas nicht mehr in der Reihenfolge ist

Original:
HalbTon: array[0..100] of Bool;
DieNoten: TSplitStrArray;
NotenNamen: array[0..127] of string;

geändert: peng :shock:
DieNoten: TSplitStrArray;
HalbTon: array[0..100] of Bool;
NotenNamen: array[0..127] of string;

Gruss alfold

Namenloser 2. Jul 2011 20:51

AW: Virtual Piano
 
Hmm, seh da jetzt nichts, was eine AV auslösen könnte. Ich hab mal ein kleines Testprojekt gebastelt:
Delphi-Quellcode:
program miditrackerav;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TSplitStrArray = array of string;

function Split(const Source, Delimiter: string): TSplitStrArray;
var
  spCount: integer;
  spPos: integer;
  spLength: integer;
  sTemp: string;
  aSplit: TSplitStrArray;

begin
  sTemp := Source;
  spCount := 0;
  spLength := Length(Delimiter) - 1;
  repeat
    spPos := Pos(Delimiter, sTemp);
    if spPos = 0 then
      break
    else
    begin
      Inc(spCount);
      SetLength(aSplit, spCount);
      aSplit[spCount - 1] := Copy(sTemp, 1, spPos - 1);
      Delete(sTemp, 1, spPos + spLength);
    end;

  until False;
  if Length(sTemp) > 0 then
  begin
    Inc(spCount);
    SetLength(aSplit, spCount);
    aSplit[spCount - 1] := sTemp;
  end;

  Result := aSplit;
end;

type
  TMidiTracker = class
  private
    procedure SplitNotes;
  public
    procedure TestSplitNotes;
  end;

var
// Original:
//  HalbTon: array[0..100] of Boolean;
//  DieNoten: TSplitStrArray;
//  NotenNamen: array[0..127] of string;

// Geändert (bei dir AV, bei mir nicht):
  DieNoten: TSplitStrArray;
  HalbTon: array[0..100] of Boolean;
  NotenNamen: array[0..127] of string;

procedure TMidiTracker.SplitNotes;
var
  IntA: integer;
  IntB: integer;
  IntC: integer;
  i: integer;
begin
  DieNoten := Split('C,C#,D,D#,E,F,F#,G,G#,A,A#,B', ',');
  for IntA := 0 to 11 do
  begin
    for IntB := 0 to 11 do
    begin
      IntC := IntA * 12 + IntB;
      if IntC < 128 then
        NotenNamen[127 - IntC] := IntToStr(IntA) + DieNoten[IntB];
    end;
  end;
  // Zum Test ausgeben, um zu gucken, ob auch alles ok ist
  for i := low(DieNoten) to high(DieNoten) do
    writeln(DieNoten[i]);
end;

procedure TMidiTracker.TestSplitNotes;
begin
  SplitNotes;
end;

var
  MidiTracker: TMidiTracker;

begin
  MidiTracker := TMidiTracker.Create;
  MidiTracker.TestSplitNotes;
  HalbTon[3] := True;   // Verhindern, dass Compiler die Variable wegoptimiert
  readln;
end.
Egal, wie man die Variablen anordnet, es kommt zu keiner AV. Das Problem muss woanders liegen.

Kann es eventuell sein, dass das Objekt zu dem Zeitpunkt, wo die private Methode aufgerufen wird, bereits zerstört wurde? Ich würde mal einen Haltepunkt auf den Destructor setzen.

EWeiss 2. Jul 2011 20:53

AW: Virtual Piano
 
Zitat:

Ich habe schon einiges vereinfachen können! Du hast manchmal unötiges gemacht.
Meine Routinen sind auf Fixed Noten 1/4 4/4 ausgelegt incl Grid.
Und alles was da verwendet wird hat einen bezug dazu.

Das was du manchmal unnötig nennst (von dir entfernt bzw. gelöscht wurde)
habe ich in dem Update von dir gesehen ;)
Leider auch wenn es noch nicht fertig war .. hat danach so gut wie nichts mehr funktioniert.
Wenn ich die Maus nach links gezogen habe hatte ich plötzlich an irgendeiner stelle im Grid 20 und mehr Noten hintereinander gezeichnet.
Du siehst also da kann man nicht einfach mal so irgendetwas löschen wenn man den bezug nicht dazu kennt(unötiges gemacht).
Wenn du den ganzen kram mit im und export von Midi zur seite schiebst war das alles Korrekt geschrieben.
Schließlich habe ich mir etwas dabei gedacht.

Mal abgesehen das alle button auch keine Funktion mehr hatten.
Also stelle mich hier nicht als ein NOB hin das ich schreiben kann habe ich schon genug bewiesen hier denke ich mal!
Ich kann Kritik vertragen sehr gut sogar aber nur dann wenn Sie berechtigt und im bezug steht zu meinem Konzept feste Noten fester Takt.
Durch die änderung auf das jetzige importieren und Exportieren von Hexadezimalen Midi Daten (war nicht mein konzept)
kann das alles nicht mehr korrekt funktionieren und dann, und nur dann wird einiges unnötig und nicht mehr von belang sein!

Ich habe dir von anfang an gesagt das es nicht einfach ist mein konzept zu verwerfen da ich mit Fixen Daten arbeite
und dir gesagt das ich in dem fall den Miditracker komplett neu schreiben muss.
Mache meine Arbeit jetzt also nicht schlecht nur weil du den Tracker auf dein Konzept umlegen willst (was ja kein Problem für mich darstellt).


Aber was soll's. :)

@NamenLozer
Zitat:

Kann es eventuell sein, dass das Objekt zu dem Zeitpunkt, wo die private Methode aufgerufen wird, bereits zerstört wurde? Ich würde mal einen Haltepunkt auf den Destructor setzen.
Das war ja meine Vermutung da TSplitStrArray static bzw.. Global definiert ist.

Allerdings tritt das problem bei mir nicht auf MidiPiano startet immer egal in welcher Reihenfolge.

PS:
Auch wenn ich Notenname ganz entferne gibt es kein AV und alles Daten werden korrekt gesplittet..
Siehe Bild!

Bild gelöscht sonst zuviel Müll im Forum!

gruss Emil

alfold 2. Jul 2011 21:28

AW: Virtual Piano
 
Na na na, was denn jetzt!
Ich mache Dein Prog nicht schlecht. Im Gegenteil möchte ich es ja noch besser machen, weil es so schick ist:wink:

Und wenn ich sage es gibt Dinge die man nicht brauch, wie ebend
HalbTon: array[0..100] of Bool; oder im Resize
Delphi-Quellcode:
// Neuzeichnen sperren
  //LockWindowUpdate(WinHandle);
  SendMessage(WinHandle, WM_SETREDRAW, 0, 0);
  //FVisible := False;

  //SKAERO_AnchorEnum(WinHandle);
....
....


  // Aktualisiere die Seiten und TopBars
  //PrintSideBar;
  //PrintTopBar;
  //FVisible := True;
  // Neuzeichnen wieder erlauben
  SendMessage(WinHandle, WM_SETREDRAW, 1, 0);
  //LockWindowUpdate(0);

  //Resizing := False;
und schon flackert es auf XP nicht mehr.
Warum wirst Du also sauer? Das ist doch kein schlecht machen:cry:
So gibt es noch andere Stellen um Originalen, wo man sagen kann, ja kann man machen, muss nicht.

Und wenn mein Beispiel bei Dir nicht gefunct hat, bei mir funct es:wink:

Wobei wir wieder beim Thema sind. Also nmh.... RÄAAAATSEL.
Hab das jetzt so:

//HalbTon: array[0..100] of Bool;
//DieNoten: TSplitStrArray;

DimmedCol: array[0..15] of COLORREF;
IsDrum: array[0..15] of Bool;
DrumNum: array[0..15] of integer;
NotenNamen: array[0..127] of string;//<--- hier hingesetzt und es funct
.....

Also sooooory @EWeiss falls es falsch rübergekommen ist!

Gruss alfold

EWeiss 2. Jul 2011 21:50

AW: Virtual Piano
 
Du weist schon wofür LockWindowUpdate verwendet wird ;)
Zitat:

The LockWindowUpdate function disables or enables drawing in the specified window.
Only one window can be locked at a time.
Delphi-Quellcode:
  ' Fenster sperren:
  LockWindowUpdate(WinHandle)
 
  ' ... mehrere Zeichenoperationen ...
 
  ' Fenster entsperren und neu zeichnen
  LockWindowUpdate(0)
Genau deshalb habe ich es verwendet damit es nicht flackert :)
bzw. Solange nicht mehr resitz bis die sperrung aufgehoben ist.
Theoretisch würde ein WM_SETREDRAW ausreichen da es fast das gleiche tut nur es sperrt nicht das Window
vor dem Resitzen. !! Und darum geht es mir.

Was da auf XP passiert ist eine sache was hier auf Win7 geschieht eine andere.

Delphi-Quellcode:
SKAERO_AnchorEnum(WinHandle);


Repositioniert die Controls wenn ein Resitz statt findet
Und zwar in diesen speziellen Fall wo das Fenster gesperrt ist damit die Controls nicht erst nachher resizen
nachdem das Fenster wieder gezeichnet werden kann.

Delphi-Quellcode:
FVisible := False;


Sorgt dafür das kein neuzeichen stattfindet wenn das Flag gesetzt ist
Delphi-Quellcode:
      MidiTracker.FVisible := bool(LoWord(WP));
      if MidiTracker.FVisible then
      begin
        MidiTracker.GetLastSize(WinHandle);
        MidiTracker.DrawGrid(WinHandle);
        ShowWindow(SideBarFrame.Handle, SW_HIDE);
        ShowWindow(TopBarFrame.Handle, SW_HIDE);
        MidiTracker.PrintSideBar;
        MidiTracker.PrintTopBar;
      end
tssss.. verstehe ich nicht was du da machst.

Zitat:

Also sooooory @EWeiss falls es falsch rübergekommen ist!
Kein Beinbruch ;)
Wollte nur meinen Standpunkt darlegen

boahh warum ist die schrift jetzt blau?

Ps:
Ach so vergessen!

Delphi-Quellcode:
    WM_SIZE:
    begin
      if assigned(MidiTracker) then
        if MidiTracker.FVisible then
          MidiTracker.ResizeWindow(WinHandle);
    end;
Wird ein Resitz ausgeführt und das flag FVisible ist true
dann wird im ResizeWindow das Flag direkt wieder auf false gesetzt.
Das hängt damit zusammen damit die ToolButton, SideBar, TopBar und das grid gleichzeitig sichtbar werden
und nicht nacheinander gezeichnet werden.

Wie gesagt das hat alles einen Sinn!
Deaktiviere ich alles das was du deaktiviert hast.. flackert mein Grid
und sieht so aus.

gruss

alfold 2. Jul 2011 22:52

AW: Virtual Piano
 
Will ja nicht unken, selbst auf Win7 läuft es ohne die anderen Einträge besser:zwinker:
Delphi-Quellcode:
 Resizing := True;<--nicht notwendig

  // Neuzeichnen sperren
  LockWindowUpdate(WinHandle);<---überflüssig
  SendMessage(WinHandle, WM_SETREDRAW, 0, 0);<--- reicht vollkommen
  FVisible := False; <--nicht notwendig

  SKAERO_AnchorEnum(WinHandle);<---nicht notwedig wird auch ohne neu positioniert
....
....
....
 FVisible := True;<-- nicht notwendig

  // Aktualisiere die Seiten und TopBars
  PrintSideBar;<---nicht notwendig da grid eh noch nicht zusehen und flackert
  PrintTopBar;;<---nicht notwendig da grid eh noch nicht zusehen und flackert

.....
.....
  // Neuzeichnen wieder erlauben
  SendMessage(WinHandle, WM_SETREDRAW, 1, 0);
  LockWindowUpdate(0);<--nicht notwendig

  Resizing := False;<---nicht notwendig
Wenn ich die also weglasse, müsste es ja schlimmer werden, dem ist aber nicht so. Im Genteil Windows selber bleibt ruhiger.


Glaub doch einfach auch anderen mal was. Oder siehst Du dies als persöhnlichen Angriff an, wenn man feststellt das dies oder jenes doppeltgemoppelt ist
oder sogar einfacher ist.

kommt mir jedenfalls so vor:roll:

Ps: Grid ist beim Resize weder auf Win7 noch auf XP bei mir zu sehen auch im originalem.:gruebel:

Gruss alfdold

EWeiss 2. Jul 2011 22:57

AW: Virtual Piano
 
Zitat:

Oder siehst Du dies als persöhnlichen Angriff an
Nööö :)

Ich hab ein Bild angehängt und dir gesagt das es bei mir Flackert und das resultat bei
deaktivierten einträgen siehst du auf meinen Anhang.

Es geht hier um Fakten so wie sie bei mir auftreten das hat nicht's mit 'Persönlich' zu tun

Freut mich ja das du da weitermachst..
Zitat:

Ps: Grid ist beim Resize weder auf Win7 noch auf XP bei mir zu sehen auch im originalem
Oh da mußt noch mal schaun was deaktiviert hast :) Hihihi nichts für ungut.
Welche Version? Die letzte?


PS:
Brrr...
Resizing := False;<---nicht notwendig
Zitat:

Ist notwendig damit du die Scrollbar nicht bedienen kannst wenn ein Song am spielen ist!
bzw.. diese während des Resitz des Fenster nicht aktualsiert das geschieht später.

gruss

alfold 2. Jul 2011 23:14

AW: Virtual Piano
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Welche Version? Die letzte?
Jo, die zum DL da ist

und so sieht es, beim ändern der grösse, bei mir auf win7 und xp aus. Original nichts geändert!!
Und windows flackert! die anderen geöffneten Fenster!
Ändere ich das in meiner version passiert das nicht!

Gruss alf

EWeiss 2. Jul 2011 23:19

AW: Virtual Piano
 
Bei mir so nichts geändert.

Abgesehen von der Uhr ;)
Nach dem resitz natürlich.

PS:
Gerade nochmal letzte version geladen und keine probleme
Wird alles richtig angezeigt.

Zitat:

Und windows flackert! die anderen geöffneten Fenster!
Ja das liegt an LockWindowUpdate wird von MSN ja auch drauf hingewiesen.
Dann mach es halt weg ;)

Zitat:

Unter bestimmten Umständen führt das Aufheben der Sperrung eines inzwischen verkleinerten Fensters mittels LockWindowUpdate dazu,
dass statt der frei gewordenen Fläche das hinter dem betroffenen Fenster liegende Fenster, mitunter gleich der gesamte Desktop,
neu gezeichnet wird. Das daraus resultierende Flackern der gesamten Benutzeroberfläche ist dem gesetzten Ziel natürlich diametral entgegengesetzt.

gruss

alfold 2. Jul 2011 23:26

AW: Virtual Piano
 
Mein Photo ist während ich die grösse ändere also reszize. Sämtlich Desktop icons und fenster im hintergrund flackern. Manchmal kommt sogar ein Fenster durch Deine Oberfläche.
Nach dem ich dies deaktiviert habe, in meiner Version, ist alles ruhiger!

Egal ich mach trotzdem weiter:P Will ja fertig werden:-D

Gruss alfold

EWeiss 2. Jul 2011 23:32

AW: Virtual Piano
 
Zitat:

Zitat von alfold (Beitrag 1109710)
Mein Photo ist während ich die grösse ändere also reszize. Sämtlich Desktop icons und fenster im hintergrund flackern. Manchmal kommt sogar ein Fenster durch Deine Oberfläche.
Nach dem ich dies deaktiviert habe, in meiner Version, ist alles ruhiger!

Egal ich mach trotzdem weiter:P Will ja fertig werden:-D

Gruss alfold

Lese bitte nochmal was ich geschrieben habe als letzten Eintrag.
Du kannst es ruhig entfernen Deaktivieren.

PS:
Das problem mit dem grid kann daran liegen das du verschiedene Versionen mit ein und der
gleichen INI ausführst das führt zum problem und kann nur behoben werden in dem du den Skin vorher änderst.
Hatte das gleiche problem mit der alten Version hier aus dem Forum bedenke das die Bilder in deiner Version anders abgelegt sind!

gruss

EWeiss 3. Jul 2011 02:47

AW: Virtual Piano
 
Zitat:

Glaub doch einfach auch anderen mal was. Oder siehst Du dies als persöhnlichen Angriff an, wenn man feststellt das dies oder jenes doppeltgemoppelt ist
oder sogar einfacher ist.
Es scheint so das ich es mal wieder zu gut machen wollte (doppelt gemoppelt hält besser).
Nee ist schon recht ;)
Wo du recht hast da haste recht.

Wichtig ist das nachher alles noch funktioniert.
Na kleinigkeiten kann man immer noch korrigieren :)

Ich bin dabei das alles noch etwas zu optimieren besonders InvalidateRect.
Da muss man sehr mit Aufpassen.

PS:
Zitat:

Mein Photo ist während ich die grösse ändere also reszize.
Wenn ich dich richtig verstehe tritt der Fehler auf wenn du bzw.. während du das Fenster Resitzen tust?
Wenn ja dann liegt es daran das du dinge raus geworfen hast die das verhindern.
Ich habe das Resitz verhalten so programmiert das du während des Resitz keine Zeichnungs operationen durchführen kannst (darfst)
Was du beim Resitz sehen sollst ist lediglich der Rahmen der Anwendung nicht mehr nicht weniger.
Erst beim loslassen soll das Fenster vollständig neu gezeichnet werden.
Anders ist es mit dem ganzen Design, skins, Aero usw.. nicht möglich.

gruss

EWeiss 3. Jul 2011 09:02

AW: Virtual Piano
 
Neue Version Oben..
Es könnte sein das beim ersten start das Fenster nicht richtig angezeigt wird.
Wenn das auftreten sollte bitte einfach einen anderen Skin im Menü auswählen.
dann gibt sich das von selbst.
Liegt daran das die Bilder nun in anderen Ordern liegen alte INI könnte da ärger machen.

gruss

alfold 3. Jul 2011 09:54

AW: Virtual Piano
 
Startet nicht, fehler in der GDIPlus.DLL lesen von Adresse 00000013

gruss

EWeiss 3. Jul 2011 09:57

AW: Virtual Piano
 
Zitat:

Zitat von alfold (Beitrag 1109728)
Startet nicht, fehler in der GDIPlus.DLL lesen von Adresse 00000013

gruss

LOL :)
Alte INI gelöscht?
So gut wie jetzt war das noch nie :)

Dann schau mal was ich alles am laufen habe und keinen Crash..
Meinen Mediaplayer(VB) mit TV
Meine Soundmachine
Virtual Piano usw...

PS:
Das ist so was von langsam das XP das GDIPlus funktionen in ResizeWindow aufgerufen werden
bevor die Skins geladen werden konnten.
Ich mache da am besten noch eine Funktion welche prüft ob der benötigte Skin geladen wurde.
Sonst habe ich jedesmal das gleiche problem sobald ich da was ändere.

Es geht auf jedenfall... muss halt nachher das Archiv nochmal hochladen mit der änderung.


gruss

alfold 3. Jul 2011 12:34

AW: Virtual Piano
 
Ich habe den letzten DL gestartet. Dein Original, nicht das was ich bearbeite!
Schliesslich brauche ich ja das Originale , wenn ich an meinem was versaue und nichts mehr geht:wink:

Ini natürlich gelöscht!

Gruss alfold

EWeiss 3. Jul 2011 12:38

AW: Virtual Piano
 
Zitat:

Zitat von alfold (Beitrag 1109753)
Ich habe den letzten DL gestartet. Dein Original, nicht das was ich bearbeite!
Schliesslich brauche ich ja das Originale , wenn ich an meinem was versaue und nichts mehr geht:wink:

Ini natürlich gelöscht!

Gruss alfold

Jo mach an deinem zur verfügung stehenden Original 1.10 weiter
Wenn es fertig ist dann vergleiche ich die Seiten und ändere ab was du verändert hast.

Silhwan hat den Midiplayer fertig gestellt denke damit können wir was anfangen.
Ich habe es Heute mit seiner Erlaubniss von der komponente nach einfachen Units abgeändert.

gruss und danke für deine Arbeit.

EWeiss 24. Jul 2011 03:18

AW: Virtual Piano
 
Neue Version oben.

gruss

Thom 24. Jul 2011 08:42

AW: Virtual Piano
 
Ich bin jedes Mal aufs Neue von Deiner Grafik beeindruckt! :thumb:

EWeiss 25. Jul 2011 01:16

AW: Virtual Piano
 
Zitat:

Zitat von Thom (Beitrag 1113239)
Ich bin jedes Mal aufs Neue von Deiner Grafik beeindruckt! :thumb:

Danke!
Aber davon ab habe da bis auf die Listbox Schrift nichts geändert ;)
Es gibt ein Popup Menu wo man die Skins wählen kann.
Oben im Caption

gruss

Thom 25. Jul 2011 10:03

AW: Virtual Piano
 
Zitat:

Zitat von EWeiss (Beitrag 1113372)
Aber davon ab habe da bis auf die Listbox Schrift nichts geändert ;)

Jaaaaaa - das mag schon sein. Aber jedes mal, wenn Du eine neue Version veröffentlichst, schaue ich mir die Screenshots an, da ich mit dem eigentlichen Programm auf Grund meines nicht vorhandenen musikalischen Talentes leider nicht viel anfangen kann... :cry:

MarcoWarm 31. Aug 2011 12:46

AW: Virtual Piano
 
ein kleiner OT-Tipp...

damit es auch für all jene gut klingt, die keinen Hardwarewavetable auf/in der Soundkarte haben:

Installiert euch folgendes: Den Bassmidi Treiber von: https://github.com/mudlord/bassmididrv

Jetzt braucht ihr noch einen passenden Soundfont (SF2-Format). Da gibts zum Beispiel den Crisis General Midi 3.01 Letzterer hat einen wunderschönen Applaus ;-)

Viele weitere gibts bei der HammerSound SoundFont Library

viel Spaß damit

EWeiss 15. Sep 2011 19:50

AW: Virtual Piano
 
Neue Version online 1.1.5

Auf MidiFile2 umgestellt..
Testen wie folgt!

MidiTracker öffnen.. nichts in das Grid zeichen ansonsten wird das MidiFile nicht gestartet sondern das was im grid steht.
Das Grid werde ich später noch befüllen.. (im moment nur eine Temporäre Lösung)
Den Button Import Midi File klicken Datei aus dem Ordner Songs einladen (oder ne andere Datei wie ihr wollt)
Danach nur noch auf den Play button klicken. (letzte Icon in der Toolbar :) )

Lautstärke über MasterVolumen Regeln
Geschwindigkeit mit dem Speed Knob..

gruss

lbccaleb 24. Jun 2012 13:10

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr.
Seite 8 von 9   « Erste     678 9      

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