2013-05-27 29 views
2

我必須在Delphi中製作項目。我製作了一組按鈕和一組圖像。我想單擊按鈕[i]時顯示圖像[i]。德爾福:如何使程序點擊按鈕陣列?

有人可以幫忙嗎?

+2

你不知道該怎麼辦?例如,你知道如何創建一個數組嗎?到目前爲止顯示你的代碼,以便我們知道你有什麼樣的理解水平。 –

回答

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程序。

1

如何使用按鈕的標籤屬性來存儲指向相關圖像的指針。我不確定你的數組結構,但是這裏有一個代碼片段來演示。

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;