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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2022, 18:29   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Создание нескольких процедур по образцу

Если более конкретный пример

Есть TButton и есть TCheckBox, который блокирует-разблокирует кнопку (защита от случайного нажатия)
Ну и процедура, которая обрабатывает нажатие на TCheckBox

Все элементы создаются через Create в ходе выполнения программы

Вопрос: если мне нужно несколько таких пар сделать, то как сделать так чтобы не лепить каждому отдельную процедуру-обработчик?

Я думал через массив и теги сделать... Но проблемно, потому что создаются эти пары TButton-TCheckBox в разных местах и в разное время

Потому вопрос, есть ли еще варианты, или только через массив
Kronos913 вне форума Ответить с цитированием
Старый 09.02.2022, 23:20   #2
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Порывшись много где додумался до такой схемы. Кто может посмотреть, может подсказать, что тут можно поправить, улучшить?

Код:
type
  ProcedureClick=procedure(Sender: TObject) of object;

  ButtonCheckBoxBlock = object
    public
      ButtonCBB:TButton;
      CheckBoxCBB:TCheckBox;
      Procedure CBBInit(Parent1: TWinControl; const TopBT, LeftBT, HeightBT, WidthBT, TopCB, LeftCB: integer; const WordWrapBt:boolean; const CaptionBT:string; Click1: ProcedureClick);
      Procedure CBBVisible(a:boolean);
      Procedure CBB_Down;
    private
      CBB_Procedure:ProcedureClick;
      Procedure CheckBoxCBBClick(Sender: TObject);
      Procedure ButtonCBBClick(Sender: TObject);
  end;
Код:
Procedure ButtonCheckBoxBlock.ButtonCBBClick(Sender: TObject);
begin
  CBB_Procedure(Sender);
  CBB_Down;
end;

Procedure ButtonCheckBoxBlock.CBB_Down;
begin
  ButtonCBB.Enabled:=False;
  CheckBoxCBB.Checked:=false;
end;

Procedure ButtonCheckBoxBlock.CBBVisible(a:boolean);
begin
  ButtonCBB.Visible:=a;
  CheckBoxCBB.Visible:=a;
End;

Procedure ButtonCheckBoxBlock.CBBInit(Parent1: TWinControl; const TopBT, LeftBT, HeightBT, WidthBT, TopCB, LeftCB: integer; const WordWrapBt:boolean; const CaptionBT:string; Click1: ProcedureClick);
begin
  ButtonCBB:=TButton.Create(Parent1);
  With ButtonCBB do begin
    Parent:=Parent1;
    Top:=TopBT;
    Left:=LeftBT;
    Height:=HeightBT;
    Width:=WidthBT;
    Font.Charset:=RUSSIAN_CHARSET;
    WordWrap:=WordWrapBt;
    Caption:=CaptionBT;
    OnClick:=ButtonCBBClick;
    Enabled:=false;
  End;
  CheckBoxCBB:=TCheckBox.Create(Parent1);
  With CheckBoxCBB do begin
    Parent:=Parent1;
    Top:=TopCB;
    Left:=LeftCB;
    Height:=17;
    Width:=113;
    Font.Charset:=RUSSIAN_CHARSET;
    Caption:='Включить кнопку';
    OnClick:=CheckBoxCBBClick;
  End;
  CBB_Procedure:=Click1;
end;

Procedure ButtonCheckBoxBlock.CheckBoxCBBClick(Sender: TObject);
begin
 ButtonCBB.Enabled:=CheckBoxCBB.Checked;
end;
Kronos913 вне форума Ответить с цитированием
Старый 10.02.2022, 09:14   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

для многократного повторения нескольких взаимосвязанных компонент(контролов) существуют фреймы (TFrame)

https://programmersforum.ru/showthread.php?t=167864
https://programmersforum.ru/showthread.php?t=167864

Код:
TGroupObj =class (TFrame)
//без необходимости создания таких групп в дизайнере можно использовать просто класс
private
  FCheck: TCheckBox;
  Ftext: TEdit;
  procedure DoCheckClick(sender: TObject); //реакция 
public
  constructor Create( ); 
  procedure SetPosition(check: TRect; edit: TRect);
  property check: Trect;
  property edit: TRect;
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 12.02.2022, 18:56   #4
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

У меня только такой вопрос: код процедуры объекта - он один раз записан в теле программы? Или дублируется на каждый объект?
Kronos913 вне форума Ответить с цитированием
Старый 12.02.2022, 20:03   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

экземпляр объекта в памяти
данные объекта
ссылки на методы доступа к данным (на процедуры данного класса)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
унифицировать ширину столбцов в нескольких таблицах в ворде по заданному образцу. palkafialka Фриланс 1 01.05.2018 09:35
Создание слайдера по образцу ANshag HTML и CSS 1 09.10.2015 08:18
Создание объектов по образцу ZotaC Общие вопросы Delphi 7 29.11.2011 20:39
Создание процедур Viteef Общие вопросы Delphi 3 11.05.2007 01:25