Вячеслав, можно поподробней, а то у меня аналогичная ситуация с TscrollBar.
PS
О, с TTrackBar получилось, а вот с TscrollBar не получается
xenon54, а подобного решения для TscrollBar нет?
При выполнении этой процедуры на XE7
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
IF ScrollBar1.Value = 0 THEN BEGIN
//Trend := True;
ScrollBar1.Value := 1;
END ELSE BEGIN
IF ScrollBar1.Value >= ScrollBar1.Max THEN BEGIN
ScrollBar1.Value := ScrollBar1.Max - 1;
//Trend := False;
END;
END;
end;
кнопочками на TScrollBar или из программы меняя ScrollBar1.Value все нормально, но если кликнуть мышкой в крайние значения, то положение ползунка не изменяется хотя значение ScrollBar1.Value принимает требуемое значение. Как в этом случае синхронизировать положение ползунка со значением ScrollBar1.Value?
Скорее всего нет, если посмотреть это,
procedure TCanvas.EndScene;
begin
if FBeginSceneCount = 1 then
DoEndScene;
if FBeginSceneCount > 0 then
dec(FBeginSceneCount);
end;
то при одновременном открытии нескольких сцен перерисовка произойдет от последней закрытой, а какой поток ее закроет последний не ясно. Т.е. говорить о наличие потокобезопасности как-то сомнительно.
Выходит, если мы рисуем на одной канве из двух потоков и у нас одновременно открыты в каждом Canvas.BeginScene, то после прорисовки по Canvas.EndScene на канве отобразиться суммарная картинка?
Что-то не пойму, Canvas.DrawPolygon(const Points: TPolygon; const AOpacity: Single) где TPolygon = array of TPointF рисует созданный вами полигон, а уж с дыркой он или нет зависит от вас.