Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2012, 21:38   #1
yachsmit
 
Регистрация: 27.01.2011
Сообщений: 4
По умолчанию Обработка событий OnClick для массива TImage

Добрый день. Я совсем новичек в программировании, поэтому возник вопрос.

Я динамически создаю несколько TImage из Imagelist. Как самым простым и надежным способом создать один обработчик типа OnClick для этого массива кнопок. В примере рисунков два, но на самом деле их 30, думаю будет глупо для каждого из рисунков писать свой OnClick. Пусть хоть при нажатии на одну кнопку пишет "Hello world!" а на другую "sdfsdfsd". )

Много инфы посмотрел по этому поводу, однако в основном там описана эта задача с большими лишними мне нагромождениями из которых я пытался выудить хоть какую нибудь нужную строку, но, увы, не получилось ( Помогите разобраться пожалуйста. Вот код.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
ImageList1: TImageList;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
card: array [1..2] of TImage;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i:=1 to 2 do
begin
card[i]:=TImage.Create(form1);
card[i].Parent:=form1;
card[i].Height:=85;
card[i].Width:=85;
card[i].Top:=8;
card[i].Left:=8+(i-1)*88;
Imagelist1.GetBitmap(i-1,card[i].Picture.Bitmap);
end;
end;

end.
yachsmit вне форума Ответить с цитированием
Старый 13.01.2012, 22:19   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Добавить в форму
Код:
procedure ImageClick(Sender: TObject);
Реализовать его так (тут уж сами смотрите как там понадобится):
Код:
procedure Tform1.ImageClick(Sender: TObject);
begin
  case (sender as Timage).tag of
  1: showmessage('hello world');
  2: showmessage('sdfsdfsd');
  end;
end;
при создании имейджей добавить:
Код:
card[i].Parent := form1;
card[i].tag := i;
card[i].onclick := Imageclick;
и проверять работу )

На будущее совет - оформляйте код кнопочкой #

Последний раз редактировалось phomm; 13.01.2012 в 22:25.
phomm вне форума Ответить с цитированием
Старый 13.01.2012, 22:39   #3
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Images: array of TImage;
begin
  SetLength(Images, 30);

  for I := 0 to High(Images) do
  begin
    with Images[I] do
    begin
      Create(Self);
      Parent := Self;
      Picture.LoadFromFile('Путь/' + IntToStr(I) + '.jpg');  // Или другая организация
      OnClick := ImageClick(Self);
    end;
  end;

end;
Что-то типа такого
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 14.01.2012, 08:32   #4
yachsmit
 
Регистрация: 27.01.2011
Сообщений: 4
По умолчанию

Попробовал, как написал phomm и, ура, все получилось. И с первого раза ) Просто никак не мог допереть до простейшего card[i].onclick := Imageclick. Спасибо!
yachsmit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание OnClick для массива типа Button VIK_aka_TOR Помощь студентам 13 19.05.2011 16:21
Обработка событий для dataGridView Ultimateorb Общие вопросы .NET 2 11.01.2011 23:54
обработка событий CoRviN88 Помощь студентам 0 16.12.2010 13:46
Обработка событий meganom Общие вопросы Delphi 5 01.09.2010 19:41
OnClick для массива компонентов Dj_smart Компоненты Delphi 5 30.04.2008 14:16