16 / 16 / 3
Регистрация: 28.05.2013
Сообщений: 233
|
|||||||||||
1 | |||||||||||
Динамическое создание n -ного количества форм12.11.2013, 10:40. Показов 5574. Ответов 28
Метки нет (Все метки)
Прошу прощения, если уже есть такая тема, но ничего путного не нашел.
Пишу что-то вроде аськи (диплом) на дельфи. (обмен сообщениями приватно и в общем чате). Соответственно, мне нужно для каждого человека делать отдельную форму, в которой будет приватный чат только с одним человеком. И в эту же форму надо кидать то, что пишет этот человек (с сокетами я разобрался). А значит Главное окно, в котором есть ClientSocket, должно как-то передавать в дочернюю форму какие-либо данные. В итоге, вопрос у меня такой: как мне при создании n-ного количества форм через
Пытался через FindComponent, но он ищет именно на форме, а не сами формы. Подскажите, плиз. P.S.: при использовании
Как бы сделать их независимыми? Спасибо
0
|
12.11.2013, 10:40 | |
Ответы с готовыми решениями:
28
Динамическое создание неизвестного числа форм Динамическое создание форм (runtime) с параметрами взятыми из файла Динамическое создание форм Динамическое создание форм |
пофигист широкого профиля
4754 / 3191 / 860
Регистрация: 15.07.2013
Сообщений: 18,482
|
|
12.11.2013, 10:50 | 2 |
0
|
16 / 16 / 3
Регистрация: 28.05.2013
Сообщений: 233
|
|
12.11.2013, 10:52 [ТС] | 3 |
Прошу прощения, можно хоть какой-нить примерчик использования? Дальше я сам, по аналогии.
Вопрос в P.S. остается в силе...
0
|
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
|
|
12.11.2013, 11:01 | 4 |
0
|
пофигист широкого профиля
4754 / 3191 / 860
Регистрация: 15.07.2013
Сообщений: 18,482
|
|
12.11.2013, 11:02 | 5 |
2
|
16 / 16 / 3
Регистрация: 28.05.2013
Сообщений: 233
|
|
12.11.2013, 11:04 [ТС] | 6 |
Valenth, Прошу прощения, это к чему? К P.S.? Если да, то не работает. При сворачивании главного окна, дочерние тоже исчезают.
0
|
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
|
||||||
12.11.2013, 11:15 | 7 | |||||
klaxwork, к P.S. Рекомендую создавать формы именно так. А насчёт зависимости: первая форма, созданная дельфой, является главной (MainForm) и её события отражаются на всей программе (сворачивание, закрытие). Как в делфи 7 главная форма - это полоска сверху. Если её свенуть - свернётся всё.
Как вариант - сделать невидимую форму и создать её первой, чтобы она была главной. Но это плохая идея. Странно, что у Вас есть такая необходимость. Добавлено через 2 минуты Если хотите как, например, в квипе - окно с контактами спряталось, а чат остался - запретите окну с контактами сворачиваться, а по кнопке "закрыть" - делать Form.Hide();
1
|
16 / 16 / 3
Регистрация: 28.05.2013
Сообщений: 233
|
|
12.11.2013, 11:18 [ТС] | 8 |
Valenth, да, необходимость существует. Ведь в той же самой аське при закрытии основного окна со списком пользователей окна/формы с чатами остаются на месте. И каждое из них можно свернуть/развернуть независимо от главного окна.
А если такой вариант? Форму с логином/паролем при успешной авторизации делать Form1.Visible:=False; ? И в системном трее оставить у часов значек, при нажатии на который будет открываться список... Тогда возникает вопрос: как мне перехватить закрытие формы со списком по Alt-F4 или по крестику и свернуть в трей без закрытия? Спасибо. Мда. Пока писал -- предложили то же самое...
0
|
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
|
|
12.11.2013, 11:23 | 9 |
Ну я предложил выше только Вам придётся предусмотреть другие способы закрытия приложения.
Главной формой лучше всё-таки сделать форму с контактами.
1
|
16 / 16 / 3
Регистрация: 28.05.2013
Сообщений: 233
|
|
12.11.2013, 11:45 [ТС] | 10 |
В принципе, я почти так и подумал...
После авторизации на нем показывается до поры скрытая панель со списком поверх логина с паролем. Эта панель сразу после авторизации обновляется. Дальше это окно можно свернуть в трей. Так же там существует флаг. По умолчанию =0. Если нажимается кнопка закрыть, то он меняется на 1 и программа пытается закрыть главное окно. Т.о. отслеживаем закрытие по крестику и не даем закрыть раньше времени. В общем спасибо за ответ! Дальше уже по алгоритму буду разбираться. Добавлено через 8 минут Да, тему можно закрывать. Всем спасибо!
0
|
16 / 16 / 3
Регистрация: 28.05.2013
Сообщений: 233
|
|
16.11.2013, 12:05 [ТС] | 11 |
Снова открываю тему...
Дело в том, что формы должны иметь имена вида 'User_'+IntToStr(UserId) и сколько этих форм будет открыто -- неизвестно. А мне нужно, чтоб в любое время программа могла проверить, не закрыта ли эта форма; если закрыта, то открыть иначе передать в эту форму какие-то данные в какой либо компонент, к примеру в ChatMemo... И вот вопрос: как можно сделать так (без явного описания всех возможных имен форм), чтоб можно было обращаться так: ('User'+IntToStr(UserId)).Memo2.Lines.Add('bla-bla-bla');? При чем обращаться без перебора в Screen.Forms... Спасибо.
0
|
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
|
||||||
16.11.2013, 12:07 | 12 | |||||
Динамический массив типа
0
|
16 / 16 / 3
Регистрация: 28.05.2013
Сообщений: 233
|
|
16.11.2013, 12:31 [ТС] | 13 |
Динамический массив не катит...
Дело в том, что формы могут быть открыты в любом порядке (это что-то типа аськи и я могу открыть форму сначала с юзером 45, а потом с юзером 3). И мне что, создавать массив из 45 форм и только в 45 и 3 создавать формы? Пробный проект тут: http://files.mail.ru/557C98038... D631430390 При нажатии на Button1 создается новая форма При нажатии на Button2 выводятся имена всех форм. И еще: как я понял, при закрытии формы -- она остается в памяти. Как мне очистить память от закрытых форм? Спасибо.
0
|
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
|
||||||
16.11.2013, 12:48 | 14 | |||||
У Вас будет массив из двух элементов, только и всего. Зачем связывать индекс массива и id пользователя? Если надо, чтобы форма запоминала id пользователя, то записывайте его в свойство Tag формы. Или сделайте свою структуру массива:
0
|
Супер-модератор
|
||||||
16.11.2013, 13:03 | 15 | |||||
Пары Name=Value никто не отменял:
0
|
16 / 16 / 3
Регистрация: 28.05.2013
Сообщений: 233
|
|
16.11.2013, 13:53 [ТС] | 16 |
А как мне обращаться к форме с номером, к примеру, UserID=6?
Или UserID=15? Или надо будет все-таки перебирать все записи в поисках нужного UserID? Прошу прощения за такие нескромные, и может быть, наивные вопросы. Просто я дельфи изучал выборочно.
0
|
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
|
|
16.11.2013, 14:24 | 17 |
Перебором. Это не так уж сильно нагружает проц, как кажется. А про метод, описанный UI, ничего сказать не могу. Возможно, тем способом и проще.
0
|
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
|
|
16.11.2013, 16:05 | 18 |
А кто подскажет чем будет отличаться динамически созданная форма от "нормально" созданной?
0
|
120 / 110 / 19
Регистрация: 04.11.2013
Сообщений: 471
|
|
16.11.2013, 16:52 | 19 |
NIKOLAYY, ничем.
0
|
16 / 16 / 3
Регистрация: 28.05.2013
Сообщений: 233
|
|||||||||||
16.11.2013, 22:11 [ТС] | 20 | ||||||||||
Допустим я создал 3 формы.
Получатся формы в массиве:
Код:
Подскажите, пожалуйста...
0
|
16.11.2013, 22:11 | |
16.11.2013, 22:11 | |
Помогаю со студенческими работами здесь
20
Map и динамическое создание форм Динамическое создание форм (Не MFC) Динамическое создание подчиненных форм Динамическое создание контролла на одной из нескольких форм Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Блоги программистов | |||||
Обновление сайта www.historian.by
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
|
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
|
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list):
s=^y]
p=x and y
for i in range(1,len(x)):
s. append((x^y)^p)
p=(x and y)or(p and (x or y))
return s
x=list()
y=list()
|
Это мы не проходили, это нам не задавали...(асихронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
|
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
|
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения
PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
|
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
|
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
|
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9
Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
|
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev
wget. . .
|
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin.
Есть ещё регистры,. . .
|
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps
Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
|