Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

DNK
I. DNK
Баллы: 5

Подробнее »



Вопрос # 4 045

/ вопрос открыт /

Здравствуйте!
У меня на форме имеется 1 кнопка и 8 картинок(image). Теперь подскажите мне пожалуйста, как можно сделать так чтобы при нажатий на кнопку один раз показалость онда картинка, еще один раз показалось другая и т . д . Заранее большое ВАМ спасибо!!!

Beknur Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Beknur (статус: Посетитель)
Вопрос отправлен: 16 апреля 2010, 07:21
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Cпособов несколько, но я бы сделал, например, вот так:

type
  TMainForm = class(TForm)
    //....
    // Допустим, все TImage имеют имена по умолчанию:
    Image1: TImage;
    Image2: TImage;
    //....
    Image8: TImage;
    procedure ButtonClick(Sender: TObject);
  private
    FImages: TList; // Список
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;
 
implementation
 
constructor TMainForm.Create(AOwner: TComponent);
var
  Index: Integer;
begin
  inherited;
 
  // Ищу все TImage и загоняю по порядку в список
  FImages:= TList.Create();
 
  for Index:= 0 to 7 do
    FImages.Add(FindComponent('Image' + IntToStr(Index + 1)));
 
  Button.Tag:= 0; // Это будет индекс массива
end;
 
destructor TMainForm.Destroy;
begin
  FImages.Free();
  inherited;
end;
 
procedure TMainForm.ButtonClick(Sender: TObject);
begin
  // Обработчик OnClick кнопки
  TImage(FImages[Button.Tag]).Show(); // Показываю очередной TImage
 
  Button.Tag:= Button.Tag + 1; // Смещение индекса на след. элемент списка
  if Button.Tag = FImages.Count
    then Button.Tag:= 0;
end;

Если нужно показывать только одну картинку, а все остальные скрывать, то это будет цикл в 4 строчки.
procedure TMainForm.ButtonClick(Sender: TObject);
var
  Index: Integer;
begin
  // Обработчик OnClick кнопки
  for Index:= 0 to FImages.Count - 1 do
    if Button.Tag = Index
      then TImage(FImages[Button.Tag]).Show()  // Показываю очередной TImage
      else TImage(FImages[Button.Tag]).Hide(); // Скрываю остальные
 
  Button.Tag:= Button.Tag + 1; // Смещение индекса на след. элемент списка
  if Button.Tag = FImages.Count
    then Button.Tag:= 0;
end;

З.Ы. АХТУНГ! Код не отлаживал, писал в прямо в браузере. Возможны баги!

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 16 апреля 2010, 08:32
Оценка за ответ: 5

Комментарий к оценке: Спасибо ВАМ большое

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 июля 2017, 01:49
Выполнено за 0.05 сек.
Рейтинг@Mail.ru