Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#19

AW: Debugger Krise

  Alt 10. Mai 2011, 08:31
Noch ein Tipp: um Arrays komplett zu durchlaufen empfiehlt es sich, die Funktionen Low() und High() zu verwenden, da man damit niemals über die Arraygrenzen hinaus zugreift. Dabei spielt es keine Rolle, ob es sich um ein dynamisches, statisches oder offenes Array handelt und ob es 0-indiziert ist oder nicht.
Mache ich eigentlich auch nicht anders.
Aber in dem Beispiel hat es fortwährend gekracht.
Warum weiss ich ja jetzt.

Da ich nicht gern kopiere hier meine version die läuft jetzt.
Danke nochmal.

Delphi-Quellcode:
procedure TMidiTracker.ImpMidiFile(MidiFile: Widestring);
var
  FileInfo: TMIDIFileInfo;
  MidiNote: TMIDINote;
  IntI: Integer;
  IntA: Integer;
  Tempo: byte;

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.Channels do
  begin
    for IntA := 0 to FileInfo.NoteCounter[IntI] -1 do
    begin
      MidiNote := FileInfo.MIDINotes[IntI, IntA];
      if MidiNote.NoteNo = 0 then
        Grid[IntI - 1, IntA] := -1;

      if MidiNote.NoteNo > 0 then
      begin

        if MidiNote.Length = 12 then
          Grid[(IntI - 1), IntA] := (127 - MidiNote.NoteNo) + basenote;

        if MidiNote.Length > 12 then
          Grid[(IntI - 1), IntA] := 1000 + (127 - MidiNote.NoteNo + basenote);
      end;

      InstGrid[(IntI - 1), IntA] := MidiNote.Instrument;
    end;
  end;
  DrawGrid(self.Handle);

  // Spielgeschwindigkeit auf default wert setzen
  Tempo := MidiNote.Velocity;
  SKAERO_SetKnobValue(SKAERO_GetMainItem(MainHandle, ID_KNOB_SPEED),
    Tempo);
  SKAERO_SetCTLText(SKAERO_GetMainItem(MainHandle, ID_SPEEDVALLABEL),
    WideString(IntToStr(Tempo)));

end;
gruss

Geändert von EWeiss (10. Mai 2011 um 11:02 Uhr)
  Mit Zitat antworten Zitat