Консультация № 143986
15.09.2008, 15:21
0.00 руб.
0 2 1
Здравствуйте господа эксперты. Нужен Ваш совет.
На форме лежат: image, memo, radiogroup, trackbar, JvComponent, JvThread.
Обработчик потока в приложении.
Как мне правильно синхронизовать поток с формой, в данный момент
изображение пропадает при регулировке скорости или перерисовке формы.
Раньше я никогда с потоками не работал. Заранее благодарен за ответ.

Приложение:
procedure TvdMonitor.StrokaTextExecute(Sender: TObject; params: Pointer);
begin
// восстановлением фона (из буфера) удалим рисунок
while vdMonitor.RadioGroup1.ItemIndex = 1 do
begin
image1.canvas.Draw(x, ys, Buf);
Dec(x);
if x < 0 - xmb{bitmap.Width} then
begin
x:= 290;
if Y1 = 1 then
ys:= Random(Image1.Height - (bitmap.Height + 5));
end;
// определим сохраняемую область фона
BackRct:= Bounds(x, ys, W, H);
// сохраним ее копию
Buf.Canvas.CopyRect(BufRet, image1.Canvas, BackRct);
// выведем рисунок
image1.canvas.Draw(x, ys, bitmap);
Synchronize(vdmonitor.Image1.Canvas.OnChange);
Sleep(K);
k:= TrackBar1.Position;
end;
end;

Обсуждение

Неизвестный
16.09.2008, 09:32
общий
это ответ
Здравствуйте, Genia007!
Вообще тема не очень сложная, но не простая. По приведенному куску кода, не очень понятно где поток создается и с какими параметрами?
В интернете много инфы на эту тему. Интересная статья для начинающих здесь: http://www.delphimaster.ru/articles/panov/index.html
Я сам начинал с ней. Еще одна ссылка: http://www.delphikingdom.info/asp/viewitem.asp?catalogid=1125
Если что, попробую помочь, но нужно подробнее поставить задачу.
Удачи!
давно
Профессионал
153662
1070
16.09.2008, 13:24
общий
Вот код запускающий поток:

procedure TvdMonitor.RadioGroup1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
1 : begin
ys:= 5;
x:= 290;
bitmap.Canvas.FillRect(bitmap.Canvas.ClipRect);
bitmap.Canvas.Font.Assign(Memo1.Font);
bitmap.Canvas.Brush.Color:= $00141414{clBlack};
// загрузить картинку, которая будет двигаться
bufer;
k:= TrackBar1.Position;
StrokaText.Execute(self); // Вызов потока
end;
2 : begin
x:= 5;
ys:= 210;
bitmap.Canvas.FillRect(bitmap.Canvas.ClipRect);
bitmap.Canvas.Font.Assign(Memo1.Font);
bitmap.Canvas.Brush.Color:= $00141414;
// загрузить картинку, которая будет двигаться
bufertext;
k:= TrackBar1.Position;
TeleText.Execute(self); //Вызов потока
end;
end;
end;
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Форма ответа