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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2010, 14:30   #1
Dalagardi
Пользователь
 
Регистрация: 16.01.2010
Сообщений: 38
По умолчанию События для объектов динамических массивов Delphi7

Есть динамический массив картинок(Timage), которые размещаются на панели. Как отловить по какой именно картинке кликнул пользователь? Точнее как создать/использовать событие OnClick для элементов дин. массива?

Заполнение массива:
Код:
getmem(p,sizeof(Timage)*openpicturedialog1.Files.Count);
setlength(DinP,openpicturedialog1.Files.Count);
LI:=-1;
TI:=0;
KolI:=openpicturedialog1.Files.Count;
sp:=false;
for i:=0 to openpicturedialog1.Files.Count-1 do
begin
inc(LI);
dinp[i]:=Timage.Create(panel1);
dinp[i].Stretch:=true;
dinp[i].Parent:=panel1;
dinp[i].Picture.loadfromfile(form1.OpenpictureDialog1.Files.strings[i]);
dinp[i].Height:=150;
dinp[i].Width:=150;
dinp[i].Left:=LI*170;
if sp=true then dinp[i].Top:=TI*170;
if (i mod 18=0) and (i<>0) then panel1.Height:=panel1.Height+170;
if (i mod 6 =0) and (i<>0) then
begin
dinp[i].Left:=0;
inc(TI);
dinp[i].Top:=TI*170;
LI:=0;
SP:=true;
end;
dinp[i].Tag:=i;
Dalagardi вне форума Ответить с цитированием
Старый 23.03.2010, 14:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 Procedure Tform1.ClickProc(Sender:TObject);
 begin
  TImage(Sender) - это кликнутая картинка
...
 dinp[i]:=Timage.Create(panel1);
 dinp[i].OnClick:=ClickProc;
Учти что ClickProc должен быть описан как метод. Например внутри класса TForm1 как в нем обычно описываются события разные

Между прочим это уже обсуждалось
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.03.2010, 14:37   #3
Dalagardi
Пользователь
 
Регистрация: 16.01.2010
Сообщений: 38
По умолчанию

Я читал обсуждения, но мой IQ не дал мне все понять до конца)
Dalagardi вне форума Ответить с цитированием
Старый 23.03.2010, 14:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну а то что я сказал ты понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.03.2010, 14:51   #5
Dalagardi
Пользователь
 
Регистрация: 16.01.2010
Сообщений: 38
По умолчанию

Примерно, описал событие ClickProc. Элементам массива событие он клик присвоил. Только вот что дальше?

Пишет [Error] Unit1.pas(40): Unsatisfied forward or external declaration: 'TForm1.ClickProc'

Последний раз редактировалось Stilet; 23.03.2010 в 16:04.
Dalagardi вне форума Ответить с цитированием
Старый 23.03.2010, 15:34   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так ясно.
Вот тебе полный пример
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    OpenPictureDialog1: TOpenPictureDialog;
    Button1: TButton;
    procedure FormClickImg(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var  dinp:array of timage;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClickImg(Sender: TObject);
begin
 caption:=TImage(sender).Name;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
 OpenPictureDialog1.Execute;
 SetLength(dinp,form1.OpenpictureDialog1.Files.Count);
 for i:=low(dinp) to high(dinp) do begin
    dinp[i]:=Timage.Create(self);
    dinp[i].Stretch:=true;
    dinp[i].Parent:=self;
    dinp[i].Height:=150;
    dinp[i].Width:=150;
    dinp[i].Picture.loadfromfile(form1.OpenpictureDialog1.Files.strings[i]);
    dinp[i].OnClick:=FormClickImg;
 end;

end;

end.
Смотри. Изучай. Пробуй.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.03.2010, 15:56   #7
Dalagardi
Пользователь
 
Регистрация: 16.01.2010
Сообщений: 38
По умолчанию

Это всё понятно, я так и сделал. Ругается на
Код:
procedure PanelClickImg(Sender: TObject);
в описании
Dalagardi вне форума Ответить с цитированием
Старый 24.03.2010, 08:59   #8
Dalagardi
Пользователь
 
Регистрация: 16.01.2010
Сообщений: 38
По умолчанию

Все заработало, забыл написать
Код:
Tform1.PanelClickImg(sender:Tobject);
Dalagardi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с созданием динамических объектов. (Delphi7) Dalagardi Помощь студентам 2 15.03.2010 17:15
сортировка динамических массивов в Си тина сорока Помощь студентам 2 26.02.2010 00:39
обработка динамических массивов funky Помощь студентам 0 11.05.2009 17:53
C++. Объявление динамических массивов. Парсифаль Помощь студентам 27 03.05.2009 23:21
Процедуры для динамических объектов Fruit Общие вопросы Delphi 8 30.12.2008 21:10