2

I have to make project in Delphi. I made an array of buttons and an array of images. I want to show Image[i] when I click button[i].

Can somebody help please?

1
  • 2
    What do you not know how to do? Do you know how to make an array, for example? Show your code so far so that we know what level of understanding you have. Commented May 27, 2013 at 14:59

2 Answers 2

1

How about using the button's tag property to store a pointer to the correlating image. I'm unsure of your Array structure but here's a code snippet to demonstrate.

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;
Sign up to request clarification or add additional context in comments.

Comments

0

What kind of component are you using in your form to show the image?

I don't know what you really need, but here's something I guess you'd want:

I have created three components in the form to test it: two TButton's and one of TImage type.

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

In the var section:

var
  frmTest: TfrmTest;

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

The implementation of your event:

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;

In the Object Inspector, you need to set the OnClick event of your buttons with the showImage procedure.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.