Форум программистов, компьютерный форум, киберфорум
C++ Builder: FireMonkey
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3

Шаблон для компонента

22.08.2016, 22:33. Показов 1626. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый Вечер-День!

В программе приходится создавать динамически дофигища однотипных компонентов...что бы уменьшить код,хотел сделать так:

C++
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
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
 
TEdit *ed;  //<-----сам компонент
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
TObject __fastcall TForm1::NewBut()
{
 //Шаблон для компонента
 TEdit *povtoryalka=  new TEdit(this);
 povtoryalka->Parent = this;
 return povtoryalka;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
 //А тут хочу создать по шаблону
 ed = NewBut();
 ed->Text = "12312323";
}
//---------------------------------------------------------------------------
Но так не работает,а как можно?

Добавлено через 33 минуты
Сделал так, не знаю вобще корректно ли это

C++
1
ed = static_cast<TEdit*>(NewBut());
Добавлено через 5 минут
и не будет ли так утечки памяти при удалении ed? Ну типа при этом povtoryalka то не удалялась
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2016, 22:33
Ответы с готовыми решениями:

Не связывается инфоблок и шаблон компонента
Доброго времени суток, уважаемые знатоки 1С- Bitrix. Прошу легкой помощи, т.к. я уже 2 недели делаю себе мозги. Задача заключается в том,...

Где найти шаблон компонента?
Хочу отредактировать название, но не знаю где его изменить? Может он идет как шаблон, раз копируется на все страницы.

В какую папку вложить шаблон компонента?
При копировании шестерёнкой шаблона подкомпонента-“список связанных элементов” компонента-“каталог” создался template.php путь...

9
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
22.08.2016, 23:45
Лучший ответ Сообщение было отмечено Dinkin как решение

Решение

Что помешало вернуть из функции не TObject, а TEdit* сразу, если компоненты однотипные все равно?

Хотя я бы написал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TEdit *ed; // <--- один компонент
TButton *btn; // второй компонент
 
template <class T>
T* CreateNew(TWinControl *This)
{
    T* result = new T(This);
    result->Parent = This;
    return result;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // и создаем одной и той же функцией сначала эдит
    ed = CreateNew<TEdit>(this);
    ed->Text = "12312323";
 
    // а потом кнопку
    btn = CreateNew<TButton>(this);
    btn->Caption = "7878787";
}
, так интереснее
2
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
22.08.2016, 23:59  [ТС]
Интересный пример ...Но мне все по отдельности создавать (два компонента в одной функции не получится), так как у меня длина, ширина и позиция X,Y (так как FairMonkey) все задается в шаблоне...единственное что в функцию посылаю отступы.

Добавлено через 2 минуты
Да и действительно, проще сразу возвращать нужный компонент =)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
23.08.2016, 00:06
Dinkin, еще можно посмотреть в сторону перегрузки конструктора для нужных тебе компонентов, тогда будешь безо всяких сторонних функций просто вызывать конструктор, куда будет передаваться
Цитата Сообщение от Dinkin Посмотреть сообщение
длина, ширина и позиция X,Y
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
23.08.2016, 07:39
Цитата Сообщение от Dinkin Посмотреть сообщение
и не будет ли так утечки памяти при удалении ed? Ну типа при этом povtoryalka то не удалялась
Удаляются не ed и povtoryalka, а происходит освобождение занятой памяти, на которые ссылаются эти указатели. По Вашему коду эти указатели ссылаются на одну и ту же область памяти. Поэтому не важно как будет происходить удаление: delete ed или delete povtoryalka. Память в обоих случаях будет освобождена.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
23.08.2016, 08:27  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
еще можно посмотреть в сторону перегрузки конструктора
Стыдно, но даже не представляю как это делается
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
23.08.2016, 09:08
Цитата Сообщение от Dinkin Посмотреть сообщение
даже не представляю как это делается
Я для кого это делал: Классы-перехватчики (interceptor classes) ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// в header-е, перед классом формы
namespace My_Edit
{
    class TEdit : public Fmx::Edit::TEdit
    {
    public:
        __fastcall virtual TEdit(TFmxObject* AOwner,
            float AWid, float AHei, float posX, float posY) : Fmx::Edit::TEdit(AOwner)
        {
            Parent = AOwner;
            Width = AWid; Height = AHei;
            Position->X = posX; Position->Y = posY;
        }
    };
};
#define TEdit My_Edit::TEdit
 
// дальше без изменений
class TForm1 : public TForm
, и вызов:
C++
1
2
3
4
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
    ed = new TEdit(this, 100, 25, 10.0, 10.0);
}
Как-то так, пишу по памяти, может где чего забыл...
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
23.08.2016, 19:45  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Я для кого это делал: Классы-перехватчики (interceptor classes) ?
я работаю над пониманием этого

Добавлено через 6 часов 20 минут
Цитата Сообщение от volvo Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// в header-е, перед классом формы
namespace My_Edit
{
    class TEdit : public Fmx::Edit::TEdit
    {
    public:
        __fastcall virtual TEdit(TFmxObject* AOwner,
            float AWid, float AHei, float posX, float posY) : Fmx::Edit::TEdit(AOwner)
        {
            Parent = AOwner;
            Width = AWid; Height = AHei;
            Position->X = posX; Position->Y = posY;
        }
    };
};
#define TEdit My_Edit::TEdit
 
// дальше без изменений
class TForm1 : public TForm
Придется весь проект теперь перелопачивать....так как это у уменьшит его в разы
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
23.08.2016, 19:57
Ну так надо было раньше сказать, не пришлось бы перелопачивать. А еще лучше - покажи какой-нибудь кусок, где создается много компонентов, может еще красивее можно сделать?
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
24.08.2016, 12:12  [ТС]
Да все куски одинаковые типа так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 MainForm->ButtonExeptSpec = new TsSpeedButton(MainForm->sPageControl1->ActivePage);
 MainForm->ButtonExeptSpec->Parent        = pan;
 MainForm->ButtonExeptSpec->AllowAllUp    = true;
 MainForm->ButtonExeptSpec->GroupIndex    = 2;
 MainForm->ButtonExeptSpec->Images        = MainForm->sAlphaImageList1;
 method_wood_spec.Code                    = ExeptSpecClickWood;
 method_wood_spec.Data                    = MainForm->ButtonExeptSpec;
 MainForm->ButtonExeptSpec->OnClick       = *(TNotifyEvent*)&method_wood_spec;
 MainForm->ButtonExeptSpec->Top           = 4;
 MainForm->ButtonExeptSpec->Left          = ButtonDeleteSpec->Width+ButtonDeleteSpec->Left+4;
 MainForm->ButtonExeptSpec->Width         = 24;
 MainForm->ButtonExeptSpec->Height        = 22;
 MainForm->ButtonExeptSpec->ImageIndex    = 18;
 MainForm->ButtonExeptSpec->ShowHint      = true;
 MainForm->ButtonExeptSpec->Hint          = "Свернуть/Развернуть дерево";
 MainForm->ButtonExeptSpec->Down          = true;
Но их сотни, и кода тоннами занимают.....по чучуть будут переводить в компактный вид
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.08.2016, 12:12
Помогаю со студенческими работами здесь

Где лежит шаблон компонента JComments в joomla 3?
всем привет! Подскажите где находится шаблон компонента JComments не могу найти, т.е шаблон который отвечает непосредственно за вывод...

Выбирать почтовый шаблон в зависимости от значения IBLOCK_ID другого компонента
Доброе время суток. Есть компонент Новостной раздел (bitrix:news). В шаблоне компонента детальной новости (bitrix:news.detail) стоит...

Не выводить шаблон компонента bitrix.catalog.sections.top при отсутствии элементов
Есть код шаблона: &lt;?if(!defined(&quot;B_PROLOG_INCLUDED&quot;) || B_PROLOG_INCLUDED!==true)die();?&gt; &lt;div class=&quot;other-profiles&quot;&gt; &lt;div...

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

Всем добрый вечер , люди добрые , уже нет сил и терпения . не могу подключить шаблон компонента (
Пытаюсь подключить шаблон компонента , catalog ,catalog.item , все бесполезно ((( , я думаю, что это глюк уже.. может кто-нибудь со свежей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru