Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизКак узнать порядковый номер объекта в динам. массиве ... Найти похожие ветки
← →
Nikoss (2004-05-20 20:55) [0]Подскажите, как мне отследить клик по динамически созданному объекту? Например, у меня 5 динамически созданных объектов Image[i], при клике мыши на любом из них, в Lable1 должно отобразиться порядковое число того объекта, на который был сделан щелчек. Подскажите, как должна быть офомлена такая процедура? Хочу особо подчеркнуть, что меня интересует, как узнать порядковый номер объекта в динамическом массиве. Если не трудно, то напишите код этой процедуры.
← →
Grihan (2004-05-20 21:05) [1]Можно так попробовать:
при создании обекта (или при записи его в массив)прописываешь в тег его порядковый номер.
также при создании обекта Image.OnClick = ImgClic;
т.е. вешаешь на всех один обработчик в котором выводишь тег объекта в лэйбел (TImage(Sender).Tag)
← →
panov © (2004-05-20 21:17) [2]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure MyPictureClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
MyArr: array of TImage;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
SetLength(MyArr,5);
for i := 0 to Length(MyArr)-1 do
begin
MyArr[i] := TImage.Create(nil);
MyArr[i].Picture.LoadFromFile("d:\data\paramount.jpg");
MyArr[i].Left := i*85 + 10;
MyArr[i].Top := 10;
MyArr[i].Height := 50;
MyArr[i].Width := 80;
MyArr[i].Stretch := True;
MyArr[i].Transparent := True;
MyArr[i].OnClick := MyPictureClick;
MyArr[i].Parent := Form1;
end;
end;
procedure TForm1.MyPictureClick(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Length(MyArr) do
begin
if (Sender as TImage) = MyArr[i] then
begin
Label1.Caption := "O, Yea... My position is "+IntToStr(i);
end;
end;
end;
end.
← →
Palladin © (2004-05-20 22:19) [3]как более быстрый вариант...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure MyPictureClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
MyArr: array of TImage;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
SetLength(MyArr,5);
for i := 0 to Length(MyArr)-1 do
begin
MyArr[i] := TImage.Create(nil);
MyArr[i].Picture.LoadFromFile("d:\data\paramount.jpg");
MyArr[i].Left := i*85 + 10;
MyArr[i].Top := 10;
MyArr[i].Height := 50;
MyArr[i].Width := 80;
MyArr[i].Stretch := True;
MyArr[i].Transparent := True;
MyArr[i].OnClick := MyPictureClick;
MyArr[i].Parent := Form1;
MyArr[i].Tag:=i+100;
end;
end;
procedure TForm1.MyPictureClick(Sender: TObject);
begin
If (Sender Is TImage) Then
If (TComponent(Sender).Tag>=100)
Label1.Caption := "O, Yea... My position is "+IntToStr(TComponent(Sender).Tag-100));
end;
end.
← →
Palladin © (2004-05-20 22:21) [4]
If (TComponent(Sender).Tag>=100) Then
← →
panov © (2004-05-20 22:21) [5]>Palladin © (20.05.04 22:19) [3]
А зачем Tag здесь использовать?
← →
jack128 © (2004-05-20 22:26) [6]
> А зачем Tag здесь использовать?
чтобы быстрее было..
← →
Palladin © (2004-05-20 22:26) [7]Ну можно, конечно, в цикле гонять массив при каждом клике (а вдруг не клик, а OnMouseMove), можно тагом, если не занят, ибо быстрее... я же не навязываю свое решение... как вариант...
← →
panov © (2004-05-20 22:33) [8]>Palladin © (20.05.04 22:26) [7]
Ну со скоростью понятно-)
просто если всего 5 рисунков на форме...-)
А в общем случае конечно...
← →
Anatoly Podgoretsky © (2004-05-20 23:40) [9]За скорость не стоит беспокоиться, кнопка до упора не успеет дойти, как милион проверк будет сделано, а надо ее еще и отпустить.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.032 c