powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите написать чёткий код
5 сообщений из 5, страница 1 из 1
Помогите написать чёткий код
    #39768598
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрых суток,

Пишу код динамического создания компонентов разных типов.
Суть кода. Создается динамический массив, в нем размещаются ссылки на динамические компоненты.
Динамические компоненты могут быть родителями или подчинятся форме.
Так же у динамических компонент есть одинаковые свойства.

Так вот вопрос как сократить код, дабы при создании каждого типа компонента не писать почти один и тот же код?
Спасибо.

В примере TGroupBox и TEdit
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
var
 masElementsOfTemplate: array of TObject

...

procedure TfmTemplateOfInventory.CreateObjectOfInventory(TypeOfObject:string);
var
perLengthMasElementsOfTemplate:integer;                                                   
begin
perLengthMasElementsOfTemplate:= Length(masElementsOfTemplate) + 1;
SetLength(masElementsOfTemplate, perLengthMasElementsOfTemplate);               

if TypeOfObject='TGroupBox' then
  begin
  if perSender = nil then                                                         
    masElementsOfTemplate[perLengthMasElementsOfTemplate-1]:= TGroupBox.Create(fmTemplateOfInventory)
      else masElementsOfTemplate[perLengthMasElementsOfTemplate-1]:= TGroupBox.Create(perSender as TGroupBox);

  if perSender = nil then                                                         
    (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TGroupBox).Parent:=GroupBuilding      
      else  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TGroupBox).Parent:=(perSender as TGroupBox); 

  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TGroupBox).Name          :='GroupBox'+ inttostr(perLengthMasElementsOfTemplate); 
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TGroupBox).Caption       :='GroupBox'+ inttostr(perLengthMasElementsOfTemplate);
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TGroupBox).OnMouseDown   :=fmTemplateOfInventory.MouseDown;
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TGroupBox).OnMouseMove   :=fmTemplateOfInventory.MouseMove;
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TGroupBox).OnMouseUp     :=fmTemplateOfInventory.MouseUp;
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TGroupBox).OnDblClick    :=fmTemplateOfInventory.DblClick;
  end;

if TypeOfObject='TEdit' then
  begin
  if perSender = nil then                                                        
    masElementsOfTemplate[perLengthMasElementsOfTemplate-1]:= TEdit.Create(fmTemplateOfInventory)
      else masElementsOfTemplate[perLengthMasElementsOfTemplate-1]:= TEdit.Create(perSender as TEdit); 

  if perSender = nil then                                                         
    (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TEdit).Parent:=GroupBuilding      
      else  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TEdit).Parent:=(perSender as TEdit); 

  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TEdit).Name          :='Edit'+ inttostr(perLengthMasElementsOfTemplate); 
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TEdit).Text          :='Edit'+ inttostr(perLengthMasElementsOfTemplate);
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TEdit).OnMouseDown   :=fmTemplateOfInventory.MouseDown;
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TEdit).OnMouseMove   :=fmTemplateOfInventory.MouseMove;
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TEdit).OnMouseUp     :=fmTemplateOfInventory.MouseUp;
  (masElementsOfTemplate[perLengthMasElementsOfTemplate-1] as TEdit).OnDblClick    :=fmTemplateOfInventory.DblClick;
  end;


SelectComponent(masElementsOfTemplate[perLengthMasElementsOfTemplate-1]);
end;
...
Рейтинг: 0 / 0
Помогите написать чёткий код
    #39768607
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23Добрых суток,

Пишу код динамического создания компонентов разных типов.
Суть кода. Создается динамический массив, в нем размещаются ссылки на динамические компоненты.
Динамические компоненты могут быть родителями или подчинятся форме.
Так же у динамических компонент есть одинаковые свойства.

Если массив компонентов, то его и следут объявить как array of TComponent.
Еще посмотрите функцию GetClass.
Примерный код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var 
  Obj:TComponent;
  ow:TComponent;
begin
  if perSender=nil then ow:=fmTemplateOfInventory else ow:=perSender;
  Obj:=GetClass(TypeOfObject).Create(ow);
  if (Obj is TControl) then
  with Obj as TContol do
  begin
    Name:=....
    Caption:=...
    ....
  end;
  //Добавить Obj в массив
end;
...
Рейтинг: 0 / 0
Помогите написать чёткий код
    #39768690
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FIL23,
1. Массив компонент не нужен. Форма сама является контейнером для созданных компонентов.
2. Код создания компонента обернуть в метод с параметрами
...
Рейтинг: 0 / 0
Помогите написать чёткий код
    #39769321
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делайте каждому компоненту отдельную процедуру для создания, т.к. общего у них не так много. Все равно ничего не съекономите.
И такой код будет гораздо более читабельнее.
Я храню XML с настройками. Парсер зачитывает и создает на форме все что нужно.
В дизайне XML наполняется настройками, где нет ничего лишнего.

При желании можно допилить, чтобы логика создания была более сложной.
...
Рейтинг: 0 / 0
Помогите написать чёткий код
    #39769386
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,
ReadComponent переизобретаешь?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите написать чёткий код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]