
и вместо анимации выдает следующее

хотя в Винде это выглядит так

=====================================================
Вот куски кода
1. Запуск потока
- Код: Выделить всё
procedure TFrmMain.Button1Click(Sender: TObject);
var ThisThread: TMyThread;
begin
//запускаем подключение в потоке
BoolFlag:= True;
ThisThread:= TMyThread.Create(False);
ThisThread.Priority:= tpLower;
ThisThread.FreeOnTerminate:= True;
ExecuteSplash('Запускаем процесс',BoolFlag, TmpStr);
end;
2. Имитируем бурную деятельность в дополнительном потоке
- Код: Выделить всё
{ TMyThread }
procedure TMyThread.Execute;
var i: Integer;
begin
i:= 0;
while i < 1000 do
begin
inc(i);
TmpStr:= IntToStr(i);
sleep(10);
end;
Terminate;//прибиваем поток
BoolFlag:= False;// даем сигнал кончать анимацию
end;
3. Рисуем анимашки, отвлекая внимание
- Код: Выделить всё
procedure TFrmMain.ExecuteSplash(const AStr: string; var ThreadFlag: Boolean; var PrmStr: String);
var DotCount, NumFrame: Integer;
ListDisabled : TList;
begin
DotCount:= 1;//счетчик точек в строке
NumFrame:= 0;//номер текущей картинки TImageList
ListDisabled := Screen.DisableForms(FrmSplash);//"замораживаем" все окна, кроме сплаша и запоминаем их в список
with FrmSplash do
begin
//отрисовываем сплаш посередине родителя
Top:= Self.Top + (Self.Height - Height) div 2;
Left:= Self.Left + (Self.Width - Width) div 2;
Show; //показываем сплаш-окно
end;
while ThreadFlag do
//крутим цикл, пока не завершится дополнительный поток
begin
if FrmSplash.ImgListSplash.Count <> 0 //если список с картинками не пуст
then
begin
if NumFrame = 2 then
begin
Inc(DotCount);//увеличиваем кол-во точек в конце текста через каждые 2 кадра анимации
if DotCount > 4 then // если точек больше 4, то начинаем добавлять с одной
DotCount := 1;
end;
end
else //если список пуст, то будет отображаться статичная иконка приложения
begin
Inc(DotCount);
Sleep(400);
if DotCount > 4 then DotCount := 1;
end;
//запускаем анимацию в сплаш-окне
with FrmSplash do
begin
SetImageFromImgList(ImgListSplash, NumFrame, ImgSplash); //процедура присваивает TImage очередную картинку
// из TImageList
LblMsg.Caption:= PrmStr;//для наглядности работы отслеживаем инкремент i из TMyThread.Execute
StatTxtSplash.Caption := Trim(AStr);
//"анимируем" надпись, прибавляя в конце ее точки (от 1 до 3)
case DotCount of
2: StatTxtSplash.Caption := StatTxtSplash.Caption + ' .';
3: StatTxtSplash.Caption := StatTxtSplash.Caption + ' ..';
4: StatTxtSplash.Caption := StatTxtSplash.Caption + ' ...';
end;
end;
Sleep(100);
Inc(NumFrame);
if NumFrame > pred(FrmSplash.ImgListSplash.Count) then NumFrame := 0;//начинаем с первой картинки,
//если добрались до последней
end;
Screen.EnableForms(ListDisabled); //"размораживаем" окна из списка
FrmSplash.Hide;
end;
Что я делаю не так?
зы. архив с проектом приаттачил, если у кого вдруг будет желание пощупать самому.