2

我必须在德尔福做项目。我制作了一组按钮和一组图像。我想在单击按钮 [i] 时显示 Image[i]。

有人可以帮忙吗?

4

2 回答 2

1

如何使用按钮的标记属性来存储指向相关图像的指针。我不确定您的 Array 结构,但这里有一个代码片段来演示。

TForm1 = class(TForm)
  Button1: TButton;
  Image1: TImage;
  Button2: TButton;
  Image2: TImage;
  procedure FormCreate(Sender: TObject);

private
  FMyCurrentImage : TImage; //Keeps track of the current image
  procedure MyButtonClick(Sender: TObject);
public

end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FMyCurrentImage := nil;

  Button1.Tag := Integer(Image1);
  Button1.OnClick := MyButtonClick;
  Image1.Hide;

  Button2.Tag := Integer(Image2);
  Button2.OnClick := MyButtonClick;
  Image2.Hide;
end;

procedure TForm1.MyButtonClick(Sender: TObject);
begin
  if Sender is TButton then
    with Sender as TButton do
       if Assigned(TImage(Tag)) then
       begin
         //Hide the previously selected image
         if Assigned(FMyCurrentImage) then
           FMyCurrentImage.Hide;

         //Assign and show the clicked button's image
         FMyCurrentImage := TImage(Tag);
         FMyCurrentImage.Show;
       end;
end;
于 2013-05-28T11:40:23.013 回答
0

您在表单中使用哪种组件来显示图像?

我不知道你真正需要什么,但我猜你想要的是:

我在表单中创建了三个组件来测试它:两个 TButton 和一个 TImage 类型。

  TfrmTest = class(TForm)
    btn1: TButton;
    btn2: TButton;
    img: TImage;
    procedure showImage(sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

在该var部分:

var
  frmTest: TfrmTest;

  imagesArray: array[1..2] of String = ('blue.jpg', 'red.jpg');
  buttonsArray: array[1..2] of String = ('btn1', 'btn2');

您的活动的实施:

procedure TfrmTest.showImage(sender: TObject);
var
    i: integer;
begin
    for i := low(buttonsArray) to high(buttonsArray) do
    begin
        if (buttonsArray[i] = TButton(sender).name) then
        begin
            img.picture.loadFromFile('your images directory path here' + imagesArray[i]);
            break;
        end;
    end;
end;

Object Inspector中,您需要使用过程设置OnClick按钮的事件showImage

于 2013-05-27T20:17:29.050 回答