powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос по динамическому созданию компонеты
37 сообщений из 37, показаны все 2 страниц
Вопрос по динамическому созданию компонеты
    #32070699
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть на форме Panel1 с некими компонетами
Вызываю
procedure TForm1.Button2Click(Sender: TObject);
begin
Panel1.Free;
end;
Как правильно возвращать обратно ?
Большое спасибо!
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070715
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращать что????
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070728
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полагаю что то типа Panel1.Create(Self)....
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070741
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таварищ!
прочтите хоть маленькую книжечку по основам паскаля и в частности начальные сведения об ооп.
вопросы какраз из основ.
)))
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070748
Alex Alexeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а зачем ты ее Free ???
Что бы потом создавать?
Panel1.Visible := False;
Panel1.Visible := True;- не катит ?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070751
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Alex Alexeev.
А еще есть Panel1.Hide и Show.
Задававшему вопрос. Не обижайтесь - у компонентов есть методы, свойства и события - иногда смотрите хелп ))), а еще есть екзамплы....
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070760
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый гражданин Кириллов. Глубоко признателен. Ответ правильный, верный...
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070764
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хочется освобождать память.
Например если есть две спроектированные на этапе разработки формы интерфейса- я могу их "уничтожать и воссоздавать" в процессе работы. Я хочу так делать с визуальными компонентами. Например две Panel, на одной DBGrid, на другой StringGrid. На форме эти панели одного размера и на одном месте. Я могу переключать их Show-Hide, но хочу делать Destroy-Create. Вот и пытаюсь идти по такому пути.
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070798
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это кто тебе такой путь подсказал???????????? =:()

Не Ленин ли? А то похоже - такой же кривой и странный. СВОЙ, одним словом.

:()
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070813
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если надо так извратиться - пиши компоненты в потоки в память или диск, а потом ресторь их от туда...
Да и к томуже "памяти" как ты выражаешься, они мало юзают. Экзешник не уменьшится. Ели токма колво заюзанных хендлов станет меньше...
Зачем так извращаться?
Ну ечли уж нужен полный изврат - пиши на апи)))
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070838
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И каким путем идти?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070843
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая цель?
1. Уменьшить экзешник?
2. Уменьшить размер в оперативке?
... или?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070845
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. Или уменьшить кол-во хендлов?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070848
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читать про dll?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070850
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извени. хоть убей не врубаюсь че те надо!
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070882
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понимаю что можно создавать компоненты в процессе выполнения программы и уничтожать их. Сделал такой вывод попробовав вызвать Panel1.Destroy; например. (ну учусь я, учусь...) Раз можно удалить, значит можно пересоздать. Это первое что я хотел попробовать, хотя смысла нет - размер приложения в памяти при удалении компоненты не уменьшиться конечно, уже понял...
Ну а вот еще например:
Если я помещаю к себе в приложение QReport то размер моего приложения (файла ехе и в памяти тоже) прилично возрастает. Может понадобиться строить отчет а может нет, но QReport "вложен" и будет есть ресурсы. Как его можно где нить хранить и подгружать по мере надобности?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070892
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Никогда не юзай Destroy. Юзай Free. Долго объяснять почему...
2. В проекте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
project test;
begin
  Application.Initialize;
  Application.Title := 'test';
  Application.CreateForm(TForm1, Form1);
//!!!
  Application.Run;
end;

IDE при добавлении новой формы будет класть ее креат туда где я написал "!!!"
3. По необходимости создаешь репорт сам ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Form2 := TForm2.Create (Application);
with Form2 do
try
  QuickRep1.PreviewModal;
finally
  Form2.Free;
  Form2 := nil;
end;


В моей проге более 200 форм - все нормально с ресурсами и т.п. главное выкидывай нахрен код который добавляет автоматомделфя при добвавлении формы.
вот.
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070893
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для экономии памяти и ускорения загрузки и работы приложения в больших проектах, где находится большое кол-во форм (ИМХО если есть >10 ) можно создавать формы по мере обращения к ним, т.е. выкинуть те строки, которые пишутся самой Делфи в проекте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain);
  //Application.CreateForm(TdM, dM);
  //Application.CreateForm(TfrmRnuNps, frmRnuNps);
  //Application.CreateForm(TfrmDispatcher, frmDispatcher);
  //Application.CreateForm(TfrmMen, frmMen);
  //Application.CreateForm(TfrmMal, frmMal);
  //Application.CreateForm(TfrmMNATree, frmMNATree);
  //Application.CreateForm(TqrG, qrG); 
  //Application.CreateForm(TfrmMalTree, frmMalTree);
  //Application.CreateForm(TfrmData, frmData);
  Application.Run;

напрмер те, которые в комментариях, а затем создаём и освобождаем их по мере обращения. напрмер для формы отчёта:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 
try
 qrG:=TqrG.Create(nil);
 qrG.Preview;
 qrG.Free;
 except
  on E:exception do
  begin
   ShowMessage('Ошибка создания формы отчёта: '+# 13 # 10 +E.Message);
  end;
 end;//try


смысл в уничтожении/создании компонент на форме вряд ли есть.
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070915
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А есть ли возможность и смысл держать визуальные элементы и их математику где то еще? совсем отдельно от приложения?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070921
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если если юзается не одной прогой...
но лучше не гемороидальничать... в одной проге и так дофига всего.... делфийские екзешники достаточно шустрые и без дллелин...

http://www.rsdn.ru/article/default.asp?devtools/perftest.xml
http://www.rsdn.ru/article/?devtools/perftest2.xml
http://www.rsdn.ru/article/?devtools/perftest3.xml
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070926
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>А есть ли возможность и смысл держать визуальные элементы и их математику где то еще? совсем отдельно от приложения?

Возможность есть, смысла в стандартных случаях - нет.
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32070929
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое Спасибо! Почитаю!
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071240
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел на http://www.rsdn.ru/ статью как хранить формы в dll
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071244
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господи!
Ну нахера тебе такой изврат.
Да простят меня любители русского языка )))
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071265
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вполне рабочий способ.
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071279
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть ряд типовых операций с базой (много). Для каждой громозкая форма с математикой. Все это в одном проекте "Типа интерфейс вызова типовых операций".
Кажется логично держать формы которые могут непонадобиться в динамичи подгружаемых dll. Или что я не понимаю?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071286
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО это зависит от многих условий.

+ нахождения в dll я вижу такой: если на машине мало оперативной памяти, то динамически подгружая/освобождая библиотеку ты более оптимально её используешь. Опять же размер ехе-шника меньше.
Но мне кажется (я уже писал) лучше создавать/освобождать сами формы по мере обращения.

- неудобно таскать эти библиотеки с собой,
добавочный кодинг, проверки и т.д.
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071293
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
но еше размер стартовой екзешки мне критичен так как должен лежать на сети
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071302
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В инете?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071369
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
внутри, но на другом конце выделенки
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071392
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но еше размер стартовой екзешки мне критичен так как должен лежать на сети

А Dll тебе чего, по сети не надо будет таскать? Это сто лет назад такими делами страдали, а сейчас то чего? Или книги только старые по программированию? :))

Пиши нормально. Сто раз уж посоветовали - кроме геморроя и кучи ошибок и проблем ничего не прибавится.

И самый лучший способ, который уже предлагали - когда форма нужна - создавать, когда закрываешь - удаляй:
procedure Form1.OnClose(...)
...
Action := caFree;
Form1 := nil;
...
end;

и все будет хорошо.
А для отчетов другое что-нить юзай, FastReport, например
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071436
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>1. Никогда не юзай Destroy. Юзай Free. Долго объяснять почему...

Oбъяснять не долго. Стандартный метод Free:
If Assigned(P) then Destroy;

т.е. осуществляется проверка объекта - жив или нет,
чтобы не уничтожить его два раза. Поэтому free можно вызывать сколько угодно раз и всё будет ОК.
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071460
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> hDrummer
Это самый простой пример, я имел ввиду в случае наследования, полиморфа, абстрактых методов, перекрытия vmt и прочего.
а это любой знает.
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071520
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Это самый простой пример, я имел ввиду в случае >>наследования, полиморфа, абстрактых методов, >>перекрытия vmt и прочего.
>>а это любой знает.

ну накидал терминов...
прямо дрожь должна брать, чтоли?

Стандартный метод Free для наследования
If Assigned(P) then Destroy;
inherited Free;

для абстрактных методов какой ещё Free?

причём здесь перекрытие vmt?
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071525
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Человек дурью мается, а мы тут советы даем :()
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071537
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с tygra )))
Хватит идиотничать, господа, оффтопик сплошной... а мы тут начинаем перетирать.
Не хай сам мучается автор сабжа... я б на его месте хоть маленькую книжку прочел прежде чем забивать головы адвансенд юзверям.
...
Рейтинг: 0 / 0
Вопрос по динамическому созданию компонеты
    #32071817
_TwoAll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только что провел експеримент. (WinNT40) На форму 2 поместил репорт. В первом случае создаю форму
так :
Form2 := TForm2.Create (Application);
...
удаляю так :
Form2.Free;
Form2 := nil;
Во втором случае (пример не привожу, есть на ссылках выше) работаю с той же формой 2, но которая у меня в динамической dll.
Так вот во втором случае при "выгрузке" dll память у меня очищается на _столько_ же насколько увеличивается при ее "загрузке". А в первом примере только процентов на 5. Значит держать формы в dll иногда может быть хорошо. Конечно нужно иметь в виду сложность кода и прочие "прелести" dll. И беспорно что это не имеет смысла когда есть 100% уверенность что dll будет использоваться. Да, практическая полезность такого решения чаще сомнительна. Но хотя бы в теории это интересно. Еще раз всем искреннее спасибо!
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос по динамическому созданию компонеты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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