Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1084610097
Sergey Masloff
2004-05-15 12:34
2004.06.06
О танцах с бубном. Может, кому пригодится...


14-1085299732
Jimmy
2004-05-23 12:08
2004.06.06
HTML to RTF


1-1085567331
AlexG
2004-05-26 14:28
2004.06.06
Проблема с переносом макроса...


3-1084790237
Klerk
2004-05-17 14:37
2004.06.06
Почему он не находит поле?


4-1082639648
Talla2k
2004-04-22 17:14
2004.06.06
Проблемы с потоком





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский