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
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
Problem bei der ganzen Sache ist, das ich fast nichts nutzen kann von Dir, bis auf die Graphicroutinen und die muss ich auch anpassen
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
DieNoten: TSplitStrArray;
HalbTon: array[0..100] of Bool;
NotenNamen: array[0..127] of string;
Gruss alfold