Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 23.08.2019, 11:48   #1
digitalis
Профессионал
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Адрес: Минск
Сообщений: 1,750
Репутация: 587
По умолчанию Обработчик динамического массива кнопок

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

Код:
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, 11:54   #2
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,926
Репутация: 2242
По умолчанию

Цитата:
Код:
              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 в 12:01.
evg_m вне форума   Ответить с цитированием
Старый 23.08.2019, 11:56   #3
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,041
Репутация: 5656
По умолчанию

процедуру 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, 12:28   #4
digitalis
Профессионал
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Адрес: Минск
Сообщений: 1,750
Репутация: 587
По умолчанию

Спасибо. Журчит !
Код:
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 в 12:34.
digitalis вне форума   Ответить с цитированием
Старый 24.08.2019, 02:32   #5
northener
ПШП
Профессионал
 
Регистрация: 15.07.2013
Сообщений: 1,576
Репутация: 574
По умолчанию

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание массива кнопок и обработчик 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


08:49.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.