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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2010, 01:39   #1
areyoudead
 
Регистрация: 24.10.2010
Сообщений: 7
По умолчанию событие для массива созданных элементов

Добрый вечер. нужна ваша помошь)
подскажите пожалуйста:
есть массив программно созданных элементов(кнопок), нужно ему присвоить событие onClick например.

когда создаешь одну кнопку, а не массив, все понятно, а как будет выглядить эта процедура для массива вот такого типа:
Код:
   var 
BUTTON: array[1..10] of TButton;
I: Integer;

procedure tform1.CreateButton(offset:integer);
begin
  Button[i]:= TButton.Create(self);
  Button[i].Parent := form1;
  Button[i].Name:='MyButton'+inttostr(offset);
  Button[i].Left:=Button[i].width*i;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=i+1;
createbutton(i);
end;
думал что будет выглядеть примерно так:
procedure tform1.Button[i]OnClick =)
и сломал уже всю голову(

и П.С.
подскажите пожалуйста как сделать бесконечный массив? ну чтобы не [1..10000000000 ] а как-нибудь по приемлемей

Последний раз редактировалось areyoudead; 24.10.2010 в 14:27.
areyoudead вне форума Ответить с цитированием
Старый 24.10.2010, 02:05   #2
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Так?
Код:
Button[i].OnClick := 'ваш обработчик нажатия на кнопку'
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 24.10.2010, 02:08   #3
yasic
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 44
По умолчанию

unit MyButtonEvent;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure Reaction (Sender : TObject);
public

end;

type
MyButton = array [1..5] of TButton;

var
Form1: TForm1;
Button : MyButton;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i : Byte;
begin
for i := 1 to 5 do
begin
Button[i] := TButton.Create(Self);
with Button[i] do
begin
Caption := 'Button' + IntToStr(i);
Width := 50;
Height := 20;
Top := 30;
Left := 30 + (70 * i);
OnClick := Reaction;
Parent := Self;
end;
end;
end;

procedure TForm1.Reaction(Sender: TObject);
begin
ShowMessage('Click');
end;

end.

Последний раз редактировалось yasic; 24.10.2010 в 02:25.
yasic вне форума Ответить с цитированием
Старый 24.10.2010, 02:09   #4
yasic
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 44
По умолчанию

бесконечного массива не бывает (если не прав поправьте)
yasic вне форума Ответить с цитированием
Старый 24.10.2010, 02:40   #5
areyoudead
 
Регистрация: 24.10.2010
Сообщений: 7
По умолчанию

Спасибо XeruH, спасибо yasic!! то, что нужно!
логичное продолжение вопроса) как узнать какая из этих кнопок была нажата?
areyoudead вне форума Ответить с цитированием
Старый 24.10.2010, 02:48   #6
areyoudead
 
Регистрация: 24.10.2010
Сообщений: 7
По умолчанию

спасибо, уже разобрался)
Код:
ShowMessage(TButton(Sender).Name);

Последний раз редактировалось areyoudead; 24.10.2010 в 14:27.
areyoudead вне форума Ответить с цитированием
Старый 24.10.2010, 03:04   #7
yasic
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 44
По умолчанию

в обработчике Reaction переменная Sender. с ней и нужно работать
ну к примеру так:
if TButton(Sender).Caption = 'Button1' then ShowMessage('Press Button1');
yasic вне форума Ответить с цитированием
Старый 24.10.2010, 09:20   #8
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Код:
var
  Buttons: array of TButton;

procedure tform1.CreateButton;
var I : Integer;
begin
  SetLength(Buttons, Length(Buttons)+1);
  I := High(Buttons);
  Buttons[i] :=  TButton.Create(self);
  Buttons[i].Parent := Self;
  Buttons[i].Caption := 'MyButton' + inttostr(I);
  Buttons[i].Tag := I;
  Buttons[i].Left := Button[i].width * I;
  Buttons[i].OnClick := Reaction;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  createbutton;
end;

procedure TForm1.Reaction(Sender: TObject);
begin
  ShoMessage('Нажата кнопка № '+IntToStr(TButton(Sender).Tag)+' '+TButton(Sender).Caption)
end;
Т.е., как видно, "бесконечные" массивы существуют, если их называть динамическими.
Скандербег вне форума Ответить с цитированием
Старый 24.10.2010, 10:25   #9
yasic
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 44
По умолчанию

а вот это уже другой разговор. динамические да, "бесконечные" - не слышал ни разу. с другой стороны функция SetLength(M, N). N - это же размерность, а значит массив будет иметь диапазон значений.

У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

P.S. В следующий раз накажу.

Последний раз редактировалось mihali4; 24.10.2010 в 13:19.
yasic вне форума Ответить с цитированием
Старый 14.09.2014, 16:12   #10
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Спасибо!Все описанное выше, ссыпал в кучу, взболтал и получил:
Код:
unit MyButtonEvent; // http://www.programmersforum.ru/showthread.php?t=118353

interface

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

type
  TForm1 = class(TForm)
    procedure ButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
     procedure CreateButton;
   //  procedure Button1Click(Sender: TObject);
         procedure Reaction(Sender: TObject);
    { Private declarations }
  public
    { Public declarations }
  end;
 type
   MyButton = array [1..5] of TButton;
var
  Form1: TForm1;
   Buttons: array of TButton;
      Button : MyButton;

implementation

{$R *.dfm}

procedure TForm1.CreateButton;
var
I : Integer;
begin
 SetLength(Buttons, Length(Buttons)+1);
  I := High(Buttons);
  Buttons[i] :=  TButton.Create(self);
  Buttons[i].Parent := Self;
  Buttons[i].Caption := 'MyButton' + inttostr(I);
  Buttons[i].Tag := I;
  Buttons[i].Left := Button[i].width * I;
  Buttons[i].OnClick := Reaction;
end;


procedure TForm1.ButtonClick(Sender: TObject);
begin
 createbutton;
end;

procedure TForm1.Reaction(Sender: TObject);
begin
  ShowMessage('Нажата кнопка № '+IntToStr(TButton(Sender).Tag)+' '+TButton(Sender).Caption)
end;

procedure TForm1.FormCreate(Sender: TObject);
 var
i : Byte;
begin
for i := 1 to 5 do
begin
Button[i] := TButton.Create(Self);
with Button[i] do
begin
Caption := 'Button' + IntToStr(i);
Width := 50;
Height := 20;
Top := 30;
Left := 30 + (70 * i);
OnClick := Reaction;
Parent := Self;
end;
end;
end;

end.
Работает. Чего тут лишнего?
Репутация: полный "0"

Последний раз редактировалось zvygin1964; 14.09.2014 в 17:29.
zvygin1964 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
Перегрузка операций для созданных шаблонов(C#) Mixim Общие вопросы .NET 4 28.09.2010 11:03
найти среднее арифметическое элементов массива состоящее из 5 элементов viatlon Общие вопросы C/C++ 9 12.12.2009 00:45
Для массива определить сумму всех элементов, стоящих после максимального HECTOR.A. Паскаль, Turbo Pascal, PascalABC.NET 4 17.06.2009 22:04
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16