Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > один onclick для нескольких image


Автор: darkida 11.2.2010, 01:10
Помогите не могу разобраться.
У меня 50 image'в. И есть процедура  myprocedure(i) , где i номер моего image.
Как сделать общий onclick?
Или как выдернуть из имени его порядковый номер.

Автор: Данкинг 11.2.2010, 01:32
Цитата(darkida @  11.2.2010,  01:10 Найти цитируемый пост)
Как сделать общий onclick?

Выдели контролы мышкой и назначь им процедуру как обычно. smile

Добавлено @ 01:37
А номер можно получить из имени компонента:
Код

procedure TForm1.Image1Click(Sender: TObject);
begin
showmessage(TImage (sender).Name);
end;

Автор: darkida 11.2.2010, 01:44
Наверно не понятно выразился.

вот чтоб этого не делать 50 раз
Код

procedure TForm1.image1Click(Sender: TObject);
begin
myprocedure(1);
end;

procedure TForm1.image2Click(Sender: TObject);
begin
myprocedure(2);
end;

//и т.д.



и я написал порядковый номер, а не просто имя. 

Автор: Данкинг 11.2.2010, 01:49
Я же говорю: выдели Image'и мышкой и назначь им OnClick. Тогда по клику на любом из Image'ей будет вызываться процедура  TForm1.image1Click.

Автор: darkida 11.2.2010, 01:53
мда тока вот вызываться будет myproce(1)


к примеру если бы был просто button то можно было каждому присвоить номер и писать myproce(strtoint(button.caption)). Но мне нужен именно имеидж.

Автор: darkida 11.2.2010, 02:22
Цитата(Данкинг @  11.2.2010,  01:32 Найти цитируемый пост)
А номер можно получить из имени компонента:    
Код

procedure TForm1.Image1Click(Sender: TObject);
begin
showmessage(TImage (sender).Name);
end;


и это не номер, а имя компонента можно получить.  


Автор: Данкинг 11.2.2010, 02:43
Цитата(darkida @  11.2.2010,  02:22 Найти цитируемый пост)
и это не номер, а имя компонента можно получить.  

А что мешает из имени выдрать номер? И по этому номеру уже вызывать myproce ?

Автор: darkida 11.2.2010, 03:18
так в том то и дело, что это я и не знаю.

Ord(.........) in [48..57]  знаю что вот это находит цифры, а как пользоваться не знаю.


Цитата(Данкинг @  11.2.2010,  02:43 Найти цитируемый пост)
А что мешает из имени выдрать номер? И по этому номеру уже вызывать myproce ? 

Собственно это и есть мой вопрос, только читать надо было внимательней.

Автор: darkida 11.2.2010, 03:50
ой блин вспомнил.  
Код

var s: string;
begin
  s:=Timage(sender).name;
  delete(s,1,1);
  myproce(strtoint(s));



Автор: Mikel 11.2.2010, 09:29
Код

  myprocedure(Timage(sender).Tag);

и пронумеруй их Tag, это ж поле не просто так там сделано  smile 

Автор: Данкинг 11.2.2010, 11:44
Цитата(Mikel @  11.2.2010,  09:29 Найти цитируемый пост)
и пронумеруй их Tag,

А смысл нумеровать 50 Image'й, если можно получить такой же номер из имени?

Автор: Mikel 11.2.2010, 12:21
Ну если все 50 вручную создаются то, наверное, действительно никакого  smile 

Автор: Beltar 16.2.2010, 13:56
Я бы принципиально подумал, не создать ли автоматически, даже если бы точно знал, что их 50.  smile 

Автор: ~FoX~ 16.2.2010, 21:07
Код

procedure TForm1.MyImageClick(Sender: TObject);
begin
  ShowMessage((Sender as TImage).Name);
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to ComponentCount - 1 do begin
    if Components[i].ClassName = 'TImage' then
    (Components[i] as TImage).OnClick := MyImageClick;
  end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)