ScrollBox上にImageを動的に生成しているのですが、ScrollBoxのスクロールバーを移動させると、次に生成されるImageの位置が正確ではありません。
うまく説明できないので、ソースを載せます。
procedure TForm1.Button1Click(Sender: TObject);
var Image: TImage;
begin
Image := TImage.Create(ScrollBox1);
with Image do begin
Imagelist1.GetBitmap(i,Image.Picture.Bitmap);
Parent := ScrollBox1;
Name := 'Image' + IntToStr(i);
Height := 100;
Width := 100;
Left := 1;
Top := i*100;
Tag := i;
end;
i := i + 1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
i := 0;
end;
Button1を押すたびにImageListに格納しているImageを呼び出し、100*100のImageを縦方向に並べているのですが、
Scrollバーが出現した後にそのバーを動かすと、その後に生成されるImageの位置がずれてしまいます。
スクロールバーを動かしてもImageの位置がずれないようにする方法はありますか?
> Top := i*100;
ScrollBoxは内部のコンポーネントの絶対的な座標を管理しているわけではなく、
スクロールバーが操作されるたびに「現在の位置から」コンポーネントをずらすだけです。
なので、Imageを作る時点でスクロールバーの位置(VertScrollBar.Position)の分だけずらしてみてください。
tttさん
回答ありがとうございます。
Top := i*100 - ScrollBox1.VertScrollBar.Position;
と記述したら、自分が考えていた動作になってくれました。
ツイート | ![]() |