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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2019, 10:48   #1
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию Обработчик динамического массива кнопок

Что-то не монтируется...

Код:
procedure TForm1.FormActivate(Sender: TObject);
var i : integer ;

procedure to_knop(Sender: TObject);
var i : integer ;
begin
 i := (Sender as TButton).tag ;
 Form1.Caption := IntToStr (i)
end;

begin
  Setlength(knop, 6); //kn- кол-во кнопок
  for i:= low(knop) to high(knop) do
    begin
        knop[i]:= TButton.Create(nil);
        with knop[i] do
           begin
              Font.Color := clNavy;
              Font.Name := 'CourierNrw';
              Font.Size := 10;
//              Flat := true;
              Width := 40;
              Height := 18;
              Left:= 100 + (Width*i)+(i*12); // как пример расположения
              Top := 40 ;
              Tag:= i+1; // идентификатор
              OnClick:= to_knop(); // назначаем события
              Caption:= IntToStr(i+1);
              Form1.InsertControl(knop[i]) // назначаем родителя, например панель
           end ;
    end;
end;

end.
digitalis вне форума Ответить с цитированием
Старый 23.08.2019, 10:54   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Код:
              OnClick:= to_knop(); // назначаем события
to_knop должно быть методом какого-либо класса, но никак не локальной процедурой.
и ее НЕ надо здесь вызывать :=to_knop();
Код:
TForm1 =class 
 ...
private
  procedure to_knop(sender: TObject);
...
end;
Цитата:
Код:
              Form1.InsertControl(knop[i]) // назначаем родителя, например панель
неплохо бы отвязаться от Form1.
если продолжаем работать с блоком with то логичнее
Parent:=self; // мы сами(form1)
Parent:=panel..... // или что-то ещё.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 23.08.2019 в 11:01.
evg_m вне форума Ответить с цитированием
Старый 23.08.2019, 10:56   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

процедуру to_knop нужно
1) вынести из вложенности FormActivate
2) сделать методом формы TForm1

Код:
  TForm1 = class(TForm)
   ....
     procedure to_knop(Sender: TObject);
  private { private declarations }
.....

procedure TForm1.to_knop(Sender: TObject);

Цитата:
Сообщение от digitalis Посмотреть сообщение
Код:
OnClick:= to_knop(); // назначаем события
Тут скобки не нужны!
Код:
  OnClick:= to_knop; // назначаем события
p.s. опередили....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.08.2019, 11:28   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Спасибо. Журчит !
Код:
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormActivate(Sender: TObject);
    procedure To_knop(Sender: TObject);
.....................................

procedure TForm1.FormActivate(Sender: TObject);
var i : integer ;

begin
  Setlength(knop, 6); //kn- кол-во кнопок
  for i:= low(knop) to high(knop) do
    begin
        knop[i]:= TButton.Create(nil);
        with knop[i] do
           begin
              ...........................  
              Tag:= i+1; // идентификатор
              OnClick:= To_knop; // назначаем события
              Caption:= IntToStr(i+1);
              Parent := Self ;
           end ;
    end;
end;

procedure TForm1.To_knop(Sender: TObject);
var i : integer ;
begin
 i := (Sender as TButton).tag ;
 Form1.Caption := IntToStr (i)
end;

end.

Последний раз редактировалось digitalis; 23.08.2019 в 11:34.
digitalis вне форума Ответить с цитированием
Старый 24.08.2019, 01:32   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Спасибо. Журчит !
Ну скажем так - пока журчит. Но перестанет журчать если форм класса TForm1 будет более одной. Не учли вы совета
Цитата:
Сообщение от evg_m Посмотреть сообщение
неплохо бы отвязаться от Form1.
northener вне форума Ответить с цитированием
Старый 24.08.2019, 08:57   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Вот тут - не понял.
Цитата:
форм класса TForm1 будет более одной
В одном приложении? Откуда им взяться, ведь я его создаю, и TForm1 будет только одна, гарантировано.
В других, открытых одновременно? Но, по моим скромным понятиям, я не применяю функции API, лезущие в другие приложения.
А как отвязаться? Создать типа Panel и к ней привязать кнопки ? Тогда автоматом возникнет вопрос: "а если объектов класса TPanel1 будет более одного ?"
В общем случае, скорее всего, Вы и правы, но я так глубоко не копаю, и в данной конкретной задачке засад на эту тему не вижу.

Последний раз редактировалось digitalis; 24.08.2019 в 20:45.
digitalis вне форума Ответить с цитированием
Старый 25.08.2019, 02:42   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Вот тут - не понял.
Цитата:
форм класса TForm1 будет более одной
В одном приложении? Откуда им взяться, ведь я его создаю, и TForm1 будет только одна, гарантировано.
Ну это лишь совет в расчёте на будущие ваши проекты, когда вам понадобится самому создавать формы. Может вам и никогда это не понадобится.
northener вне форума Ответить с цитированием
Старый 25.08.2019, 06:53   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Может вам и никогда это не понадобится.
100% не понадобится. Я на маленьких проектах специализируюсь
digitalis вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание массива кнопок и обработчик Click, нужна помощь spirit-ua C# (си шарп) 5 03.06.2014 10:14
Обработчик события динамического TWebBrowser RTO Компоненты Delphi 7 30.08.2013 22:01
обработчик динамически созданных кнопок andir Общие вопросы Delphi 5 02.03.2013 18:11
обработчик кнопок Nastya_cutie PHP 9 12.05.2012 15:23
Обработчик OnClick у массива кнопок MyLastHit Общие вопросы Delphi 15 18.05.2011 11:33