Использую для отображения хода загрузки второй поток, в котором написано примерно следующее...
/// ThreadMainProcedure ///
repeat
state = not state
CopyToPrimarySurface(At_x,At_y, BackBuffer[state]);
until false;
///////////////////////////
т.е. происходит смена изображения на экране по аналогии с Flip , только Flip тут не подходит из-за
оконного режима. Типа получается в результате мерцание надписи Loading...
Проблемы начинаются при перетаскивании окна во время загрузки...т.к. нужно менять At_x,At_y и делать
их = СlientRect.x, y
пробовал делать так:
TMyThread.SetScreen;
begin
At_x = MyForm.ClientRect.x
At_x = MyForm.ClientRect.y
end;
и в цикле перед копированием вставлять
Syncronize(SetScreen);
но при этом поток виснет... на экран ничего не копируется.
Самое интересное, что даже если процедуру SetScreen сделать пустой,
то все равно виснет на вызове Syncronize
Основная проблема также в том что когда грузяться ресурсы не обрабатываются сообщения в программе.
Сделать именно загрузку ресурсов в другом потоке — получается не очень успешно, т.к. некоторые вещи
начинают очень странно работать, похоже проблемы с синхронизацией.
Внутри загрузки интенсивно используются объекты TJpegImage, TBitmap, IDirectDrawSurface. В некоторых
случаях результирующая картинка получается порченой, cлетают шрифты при использовании объекта TFont.
При работе в основном потоке все загружается нормально.
Cоотв. самый простой способ — оставить загрузку в основном потоке а индикатор в доп. процесс,
но тут начинаются траблы с тем что окно не обрабатывает сообщения , вставил Application.ProcessMessages,
начали сыпаться эксепшены...acc. viol., и нет возможности менять значения переменных At_x,At_y. Которые
должны соотв. коорд левого верхего угла формы.
Но хотелось бы сделать загрузку в доп. потоке а индикатор менять уже в цикле сообщений основного потока,
тогда остается один вопрос — как пофиксить порчу информации при работе с выше перечисленными объектами ...
Наверняка кто-то уже это все делал, так что пишите буду очень благодарен за разъяснения, т.к. чувствую
что в каком-то месте туплю

.