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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2020, 11:01   #1
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию Можно ли в коде изменить номер компоненты

Добрый день, подскажите, мне нужно что бы примерно работало так
Код:
procedure TForm1.Frame1Button4Click(Sender: TObject);
var
button:Tbutton;
begin
button:=button+1;

knopka(Frame41.Button1);

end;
Где будет массив из 10 баттонов, и в цикле в процедуру knopka подставлять Кнопку Баттон+1, можно ли как то это сделать, или придется без цикла, линейно вызывать для каждой кнопки? вот так:
procedure TForm1.Frame1Button4Click(Sender: TObject);
var
button:Tbutton;
begin


knopka(Frame41.Button1);
knopka(Frame41.Button2);
knopka(Frame41.Button3);
knopka(Frame41.Button4);
и т.д.
end;
MixanMM вне форума Ответить с цитированием
Старый 21.01.2020, 11:36   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Tcomponent "знает" список чем владеет (Owner)
property Components[]
property Componentscount
function FindComponent

TControl "знает" список дочерних (кто показывает)
property Controls[]
property controlsCount
function FindControl ?

TFrame is TContol
TButton is TControl
TControl is TComponent

как это мне поможет?

welcome to Find with this keyword
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.01.2020 в 11:38.
evg_m вне форума Ответить с цитированием
Старый 21.01.2020, 12:20   #3
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Tcomponent "знает" список чем владеет (Owner)
property Components[]
property Componentscount
function FindComponent

TControl "знает" список дочерних (кто показывает)
property Controls[]
property controlsCount
function FindControl ?

TFrame is TContol
TButton is TControl
TControl is TComponent

как это мне поможет?

welcome to Find with this keyword
получается примерно так:
Код:
begin
for i := 1 to 33 do begin
    Button.Name := Button + IntToStr(i);
    with Button(FindComponent(Button.Name + IntToStr(i))) do
    begin
      knopka(Frame41.Label1,Frame41.Button,Frame41.Label2);
    end;
  end;
Но что подставить сюда в процедуру, что бы она понимала что это кнопка??
...
knopka(Frame41.Label1,Frame41.Button,Frame41.Label2);
...
MixanMM вне форума Ответить с цитированием
Старый 21.01.2020, 12:41   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Но что подставить сюда в процедуру, что бы она понимала что это кнопка??
очевидно именно то что нашли.
Код:
b:=FindComponent() as TButton;
Knopka(b);
https://www.programmersforum.ru/sear...=1&saveprefs=1
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.01.2020 в 12:57.
evg_m вне форума Ответить с цитированием
Старый 21.01.2020, 13:45   #5
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
очевидно именно то что нашли.
Код:
b:=FindComponent() as TButton;
Knopka(b);
https://www.programmersforum.ru/sear...=1&saveprefs=1
Небольшая загвоздка - эти кнопки находятся на фрейме, код отрабатывает, ежели кнопки есть на форме, как указать, что бы он их использовал из фрейма? Или можно как то процедуру убрать во фрейм, и вызывать из главной формы?
MixanMM вне форума Ответить с цитированием
Старый 21.01.2020, 14:35   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. искать их на Frame "напрямую"
Код:
FrameXXX.FindComponent(
Цитата:
Код:
TFrame is TContol
TButton is TControl
TControl is TComponent
2. искать через функцию Frame (написанную самолично).
Код:
TFrameXXX =class
   ...
  public
   function FindButtonByName(const bname: string): TButton;
  end;
3. почитать forum через расширенный поиск.
Цитата:
welcome to Find with this keyword
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.01.2020 в 14:42.
evg_m вне форума Ответить с цитированием
Старый 21.01.2020, 14:45   #7
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
1. искать их на Frame "напрямую"
Код:
FrameXXX.FindComponent(

2. искать через функцию Frame (написанную самолично).
Код:
TFrameXXX =class
   ...
  puiblic
   function FindButtonByName(const bname: string): TButton;
  end;
3. почитать forum через расширенный поиск.
Ладно, не буду усложнять, сделаю линейно. есть еще вопрос: почему вот так работает:
Код:
procedure TForm1.Frame1Button4Click(Sender: TObject);
begin
knopka(Frame41.Label1,Frame41.Button1,Frame41.Label2);
end;
а если написать свою процедуру , например:
Код:
procedure x();
begin
knopka(Frame41.Label1,Frame41.Button1,Frame41.Label2);
end;
выдает : [dcc32 Error] Unit1.pas(153): E2003 Undeclared identifier: 'Frame41' ?
MixanMM вне форума Ответить с цитированием
Старый 21.01.2020, 15:05   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

потому что метод формы (procedure TForm1.Frame1Button4Click) знает о том что расположено на данной форме(в данном классе-объекте).
может пользоваться всеми именами данного класса.
Frame41 является именем данного класса.

а регулярная (обычная/простая) процедура (procedure x();) ничего кроме себя не знает.
и может пользоваться только глобальными переменными.
Frame41 не является таковой.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.01.2020, 15:08   #9
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
потому что метод формы (procedure TForm1.Frame1Button4Click) знает о том что расположено на данной форме(в данном классе-объекте).
может пользоваться всеми именами данного класса.
Frame41 является именем данного класса.

а регулярная (обычная/простая) процедура (procedure x();) ничего кроме себя не знает.
и может пользоваться только глобальными переменными.
Frame41 не является таковой.
Как то можно обычную процедуру обучить знаниям о других классах? т.к. мне бы еще нужно несколько раз вызвать то что лежит в процедуре
MixanMM вне форума Ответить с цитированием
Старый 21.01.2020, 15:17   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. процедуру можно сделать методом
ведь вызывать-то ее вы будете в методах той формы.

Код:
TFormXX =class 
...
private/protected //на выбор
  procedure X(...);
end;

procedure TFromXX.X(...);
begin
...
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать файл F, компоненты которого содержат марку, номер и фамилию владельца автомобиля. Astronomer Паскаль, Turbo Pascal, PascalABC.NET 1 09.04.2014 23:10
Как использовать в коде DLL компоненты из формы основного EXE приложения? calypso Общие вопросы Delphi 7 03.12.2012 10:15
Изменить номер диаграммы vefer Microsoft Office Excel 3 19.02.2011 07:02
Как изменить порядковый номер на наименование услуги pigas Microsoft Office Excel 5 14.06.2010 19:40
Изменить номер подключения к Internet Акашаев Нурлан Безопасность, Шифрование 6 10.05.2007 10:27