如何在Firemonkey XE6中将Timage添加到TScrollBox?

时间:2014-12-19 12:17:19

标签: delphi firemonkey delphi-xe6

首先很抱歉,如果之前已经提出,但我正在努力寻找有关此事的任何内容。

我试图将一些TImage添加到滚动条中,该滚动条用于保存图像并允许用户滚动它们。此创建在运行时完成。

图像存储在TImage数组中。

以下是我创建图片的代码。

procedure TfrmMain.CreateSolutionImages(ImageCount: Integer);
var
I: Integer;
ImageScale: double;
begin
  if sbSolutionImages.ComponentCount > 0 then   //destroy the images already in the scrollbox
  sbSolutionImages.DestroyComponents;
  SetLength(SolutionImages,0);       //clear the array of images

  SetLength(SolutionImages,ImageCount);  //SolutionImages is an array of timage
  ImageScale:= ((sbSolutionImages.Width - 20)/Guillotine.StockWidth);
  for I := 0 to ImageCount - 1 do
  begin
    if not Assigned(SolutionImages[I]) then       //if not assigned then create and set the parent to the scrollbox
    begin
      SolutionImages[I]:= TImage.Create(sbSolutionImages);
      SolutionImages[I].Parent:= sbSolutionImages;

      SolutionImages[I].Width:= trunc(Guillotine.StockWidth * ImageScale);    //set image dimentions and positions
      SolutionImages[I].Height:= trunc(Guillotine.StockHeight * ImageScale);
      SolutionImages[I].Position.X:= 10;
      if I = 0 then
      begin
        SolutionImages[I].Position.Y:= 10;
      end
      else
      begin
        SolutionImages[I].Position.Y:= SolutionImages[I-1].Position.Y + SolutionImages[I-1].Height + 20;
      end;
    end;
    //forgot to include these lines
    SolutionImages[I].Bitmap.SetSize(Round(SolutionImages[I].Width),Round(SolutionImages[I].Height));
    SolutionImages[I].Bitmap.Clear(TAlphaColors.White);
  end;
end;

正在发生的事情是滚动框(sbSolutionImages)报告它包含图像,即componentcount增加,但它没有绘制图像而且没有滚动条出现,这应该在逻辑上发生,因为一些图像赢了'在可见区域。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

将TLayout添加为TScrollBox的子级。 根据需要设置宽度和高度(并设置Position =(0,0))。 在TLayout上将您的图像添加为孩子。

TScrollBox将知道TLayout的边界,并根据此设置它的滚动条。

答案 1 :(得分:0)

好的抱歉。这是一个简单的愚蠢问题。 我忘了在所有图像的位图上设置大小。

仍然在我需要添加的for循环中。

SolutionImages[I].Bitmap.SetSize(Round(SolutionImages[I].Width),Round(SolutionImages[I].Height));
SolutionImages[I].Clear(TAlphaColors.White);

好的,看来我还有问题。滚动条没有出现并尝试调整滚动条的大小(我在两个面板之间有一个滑块,一个是滚动框的父级,另一个是其他组件)要么什么也不做(没有动作)或导致滑块射击屏幕向左,从而隐藏了一切" off"应用程序窗口。

由于我不熟悉firemonkey,这是令人难以置信的。我可以在VCL中轻松完成这项任务,但我们正在努力探索“广受好评的力量”#34; firemonkey。