Ich kenne nur ein Phenomän, wenn Delphi die for-Schleife optimiert und der Debugger nicht darauf achtet. Wobei lediglich die Darstellung falsch ist, intern aber alles korrekt abläuft.
Sehe ich das schon richtig, dass die Zeile unter dem if ausgeführt wird, ob wohl 62 nicht gleich 0 ist?!
Das ist mein Problem!
Noch zwei pics da kann man sehen das beide IntI und IntA den wert 1 haben.
Wenn du oben dann vergleichst wirst du sehen das er trotzdem die Note löscht obwohl vorhanden.
Was soll ich denn jetzt machen.. grrrr
Optimierung habe ich ausgeschaltet alle
DCU's glöscht und komplett neu Kompiliert.
Damit ich die Values verfolgen kann.
EDIT:
Hab es mal mit Packed Record versucht.. bringt auch nix.
Hier ist die Funktion vielleicht gibt es da ein problem denke aber nicht!
Delphi-Quellcode:
procedure TMidiTracker.ImpMidiFile(MidiFile: Widestring);
var
FileInfo: TMIDIFileInfo;
IntI: Integer;
IntA: Integer;
begin
if not ReadMIDIFile(MidiFile, FileInfo) then
begin
MessageBox(Self.Handle, 'Not a valid MIDI file.', 'Confirm', MB_OK);
exit;
end;
for IntI := 1 to FileInfo.Tracks do
begin
for IntA := 0 to FileInfo.NoteCounter[IntI] -1 do
begin
if FileInfo.MIDINotes[IntI, byte(FileInfo.MIDINotes[IntA])].NoteNo = 0 then
Grid[IntI - 1, IntA] := -1;
if FileInfo.MIDINotes[IntI, (byte(FileInfo.MIDINotes[IntA]))].NoteNo > 0 then
begin
if FileInfo.MIDINotes[IntI, (byte(FileInfo.MIDINotes[IntA]))].Length = 12 then
Grid[(IntI - 1), IntA] := (127 - FileInfo.MIDINotes[IntI, (byte(FileInfo.MIDINotes[IntA]))].NoteNo) + basenote;
if FileInfo.MIDINotes[IntI, byte(FileInfo.MIDINotes[IntA])].Length > 12 then
Grid[(IntI - 1), IntA] := 1000 + (127 - FileInfo.MIDINotes[IntI, (byte(FileInfo.MIDINotes[IntA]))].NoteNo + basenote);
end;
InstGrid[(IntI - 1), IntA] := FileInfo.MIDINotes[IntI, (byte(FileInfo.MIDINotes[IntA]))].Instrument;
end;
end;
DrawGrid(self.Handle);
end;
gruss