Nein die rennt nicht ungestört weiter die beendet wenn die letzte note gespielt wurde.
Delphi-Quellcode:
procedure TMidiTracker.PlaySong(WinHandle: HWND);
var
IntA: integer;
begin
// Verschieb den Grid Ausschnitt wenn die Rote Laufleiste nicht
// auf dem Grid sichtbar ist
if (ColumnX < StartX) or (ColumnX > StartX + XSize) then
begin
StartX := ColumnX;
EndX := StartX + XSize;
if StartX > 999 - XSize then
begin
StartX := 999 - XSize;
EndX := 999;
end;
end;
// Starte das Spielen von der roten Laufleisten position
PlayX := ColumnX;
GetColumn(WinHandle, StartX);
hsi.nPos := StartX + XSizeMid;
HasStarted := False;
JustScrolled := False;
DrawGrid(WinHandle);
// Reset die alte Note und die alte Instrumenten Variablen
for IntA := 0 to 7 do
begin
OldNote[IntA] := -1;
OldInst[IntA] := -1;
end;
// Nach dem Ende des Songs suchen
FindEndOfSong;
Tick := GetTickCount;
// Starte den Song
while PlayingSong do
begin
//Weiterlaufen bis die 16.tel Note (Pause) abgelaufen ist
while GetTickCount < Tick + TempoWait do
Winprocessmessages;
Tick := GetTickCount;
PlayNotes;
DrawGraphics(WinHandle);
hsi.nPos := StartX + XSizeMid;
SetScrollInfo(WinHandle, SB_HORZ, hsi, True);
end;
// Warte auf die Beendigung der Wiedergabe von der letzten 16.tel Note
while GetTickCount < Tick + TempoWait do
Winprocessmessages;
// Alle Noten Stoppen
for IntA := 0 to 7 do
begin
if SKAERO_GetCheckButtonStatus(SKAERO_GetMainItem(MainHandle,
IntA + ID_HIDETRACK_FIRST)) = False then
begin
channel := IntA;
if OldNote[IntA] > -1 then
FlipStopNote(OldNote[IntA] mod 1000);
end;
end;
hsi.nPos := 0;
hsi.nTrackPos := 0;
StartX := 0;
SetScrollInfo(WinHandle, SB_HORZ, hsi, True);
DrawGrid(WinHandle);
end;
Das funktioniert und arbeite einwandfrei nach dem ich auf den Stop Button klicke
oder der Song zu ende ist.
gruss