Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Как узнать порядковый номер объекта в динам. массиве ...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.051 c
3-1083317610
PalladinA
2004-04-30 13:33
2004.06.06
Зависит ли работа BDE от установленной версии Windows?


14-1084555929
Knight
2004-05-14 21:32
2004.06.06
Есть ли возможность узнать какое приложение держит файл?


1-1085227108
KA_
2004-05-22 15:58
2004.06.06
Переменная типа множества


14-1085114738
TUser
2004-05-21 08:45
2004.06.06
Мне бы так


4-1082347355
scanner
2004-04-19 08:02
2004.06.06
Отследить появление нового окна.