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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2015, 05:56   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Динамическое создание форм с адресацией

Ребят, простите за глупый пост, но все же...

Есть 4 формы, на одной из них листбокс, по клику на запись нужно создать форму с префиксом этой записи, допустим %прем% (в листбоксе будет написано просто: таблица премий). В голову пришла идея с динамическим массивом из форм, но на каждой динамической форме должна создаться кнопкэ, стринглист и панель, плюс процедурный обработчик как-то связать надо.

В общем сложность в адресации (узнать какие формы открыты)
В этом самая главная сложность, по клику на листбокс нужно создать столько динамических форм, сколько пользователь кликнет, плюс предусмотреть какие открыты.


З.ы. да, решил все-таки программу по сметам дописать :D. Если можно хоть какой-то кривой пример кода. Спасибо!

З.з.ы: листбокс изначально пуст, в него помещается наименование промежуточной таблицы, созданной пользователем.
from dark to light)

Последний раз редактировалось Алексей_2012; 06.02.2015 в 05:59.
Алексей_2012 вне форума Ответить с цитированием
Старый 06.02.2015, 07:18   #2
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,392
По умолчанию

Пустой базар . Без наработки .
Цитата:
В голову пришла идея
Начать самому реализовать не пришлось в голову ? Если да , То покажите наработку.
xxbesoxx вне форума Ответить с цитированием
Старый 06.02.2015, 07:46   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
сложность в адресации
Сложность в голове, а в адресации порядок.
Во-первых создай в дизайне нужную форму, но убери ее из создания в DPR файле (или в свойствах проекта). По ходу работы создавай экземпляр формы так как делается это в DPR. Или как обычно
Код:
formБлабла:=TformБлабла.Create(nil);
with formБлабла do begin
 Тут ее параметры типа позиции, видимости, родителя и др.
end;
Во-вторых: Screen.Forms. Отвечает за список форм. Используй его для получения списка форм, или сделай свой на основе TComponentsList. В него добавляй вновь созданную форму.

Кстати пример на форуме уже где-то был.
Да хотя бы вот: http://www.programmersforum.ru/showthread.php?t=67085
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2015, 21:28   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, форма создается, но открывается только одна, при клике на листбокс, в общем гляньте проект, пожалуйста.
А еще, как освободить память, занимаемую динамической формой? То есть писать свою процедуру и вызывать ее при

mess_form.onclose:: procedure;? Как-то так?



Код:
var
  mass_form:array of TForm;
  i:Byte;
begin
  SetLength(mass_form,listbox1.count);
           i:=0;
    mass_form [i]:=TForm.Create(self);
  mass_form [i].Width:=500;
  mass_form[i].Height:=150;
  mass_form[i].ShowModal;
             mass_form:=nil;
end;
Ребят, а как на i-форме создать динамические компоненты? i-itemindex листбокса
Вложения
Тип файла: zip пробы.zip (6.1 Кб, 6 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 08.02.2015 в 21:35.
Алексей_2012 вне форума Ответить с цитированием
Старый 08.02.2015, 21:39   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А зачем? Создай заранее готовую форму, накидай на нее компоненты, а потом просто создавай в динамике.
Можно кстати array of TForm; заменить на ... Кстати я выше говорил на что, внимательнее будь.
И тогда у тебя будет массив любых видов форм а не только TForm.

Накидывать компоненты на форму во время исполнения это учебная задача или ты хочешь какую-то практическую задачу решить? Если учебная то я еще понимаю но на практике не стоит этого делать. Если разнообразных форм будет немного, то лучше их в дизайне подготовить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2015, 21:52   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Для экономии памяти и нервов проще будет менять одну и ту же форму.
Например, если форма не создана(с целью экономии памяти так и делают), то создаем её, заполняем и показываем.
Если форма просто закрыта(или спрятана), но не уничтожена из памяти, то просто заполняем её как надо и показываем.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 08.02.2015, 21:53   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А создавать-активировать без всяких массивов так например
Код:
procedure TForm1.ListBox1Click(Sender: TObject);
var i: Integer;
begin
  if ListBox1.ItemIndex>=0 then begin
    for i:=0 to Screen.FormCount-1 do
      if (Screen.Forms[i] is TForm2) and (Screen.Forms[i].Tag=ListBox1.ItemIndex) then begin
// или по Caption
//    if (Screen.Forms[i] is TForm2) and (Screen.Forms[i].Caption=ListBox1.Items.Strings[ListBox1.ItemIndex]) then begin
        Screen.Forms[i].Show;
        Exit;
      end;
    with TForm2.Create(Application) do begin
// заметь, в Form2 ни чего не присваивается и эту переменную лучше вообще не использовать в таких случаях
      Caption:=ListBox1.Items.Strings[ListBox1.ItemIndex];
      Tag:=ListBox1.ItemIndex;
      Show;
    end;
  end;
end;
по индексу итема из листбокса только если строки не удаляются динамически из него
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 08.02.2015 в 21:57.
Аватар вне форума Ответить с цитированием
Старый 08.02.2015, 21:58   #8
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Т.е. при закрытии формы проблема освобождения памяти, занимаемой формой и ее компонентами отпадает сама собой?

не работает код

з.з.ы, будете смеяться, но у меня мысль создать массив пользовательских типов из
Tform
TstringGrid
Tbutton
:D потом при закрытии проверить какая из форм закрыта и уничтожить все объекты.

Stilet, я стараюсь, но не особо понимаю
Изображения
Тип файла: jpg Безымянный.jpg (23.6 Кб, 140 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 08.02.2015 в 22:00.
Алексей_2012 вне форума Ответить с цитированием
Старый 08.02.2015, 22:01   #9
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
А создавать-активировать без всяких массивов так например
еще проще в самом списке листбокса держать ссылку чтобы поиском не заниматься
lomastr_ вне форума Ответить с цитированием
Старый 08.02.2015, 22:02   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
не работает код
Думаешь на твоей картинке видно на какой строке ошибка?
Цитата:
еще проще в самом списке листбокса держать ссылку чтобы поиском не заниматься
C одной стороны проще, с другой в OnClose та форма может уничтожаться с помощью caFree. Тогда эту ссылку придется тоже править, а надо?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 08.02.2015 в 22:06.
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание форм Михаил Юрьевич Общие вопросы Delphi 5 16.07.2012 03:41
Динамическое создание romanzi Общие вопросы Delphi 1 24.08.2011 12:20
Создание нескольких форм Лера123 Общие вопросы Delphi 4 16.10.2010 18:16
Создание форм DeNyS=) Microsoft Office Access 2 13.12.2009 15:30
Динамическое создание нескольких форм Gypsy Общие вопросы Delphi 18 21.10.2009 14:52