Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сброс формы, Как сбросить  
:(
    Опции темы
zetxi815eb
Дата 17.12.2007, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Допустим есть форма... пользователь запалняет все поля... кнопки нажимает..

Так вот хочу сделать кнопку НАЧАТЬ ЗАНОВО. Нужно чтоб при нажатии этой кнопки все атрибуты формы, и находящихся в ней объектов были выставлены так, как они были выставлены при запуске программы.

Могу конешно всё вручную сделать...но может есть процедура, и мне не придётся возиться.
PM MAIL   Вверх
Akella
Дата 17.12.2007, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



1. почитай про RTTI. Операторы AS и IS
2. В цикле по компонентам можно определять класс компоненты, ну и уже дальше по обстоятельствам.

Код

 if (components[i] is TEdit) then (components[i] as TEdit).text := '';

PM MAIL   Вверх
Rennigth
Дата 17.12.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(Akella @  17.12.2007,  04:07 Найти цитируемый пост)
1. почитай про RTTI. Операторы AS и IS
2. В цикле по компонентам можно определять класс компоненты, ну и уже дальше по обстоятельствам.

по моему немного не в тему...


zetxi815eb, Все подгрузить из dfm можно наверное и заново. Надо посмотреть как это реализовано в vcl. Сейчас делфей под рукой нету, через часок другой до работы добурусь, посмотрю.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rennigth
Дата 17.12.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Функция в модуле Classes InitInheritedComponent. Она создает все контролы которые прописаны в dfm. Переписываем чтобы не создавала, а читала, и переприсваивала дефолтные значения. Время будет, может напишу сам... 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
lukas
Дата 17.12.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



уничтожаешь свою форму...

так...

Код

Form.Free;


и создаешь ее заново...

Код

Application.CreateForm(TForm, Form);



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
zetxi815eb
Дата 17.12.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Цитата(lukas @ 17.12.2007,  17:12)
уничтожаешь свою форму...

так...

Код

Form.Free;


и создаешь ее заново...

Код

Application.CreateForm(TForm, Form);

При работе программы окно просто исчезает, а программа висит(((
PM MAIL   Вверх
mr.Anderson
Дата 17.12.2007, 23:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Что мудрим-то? Что мешает пробежаться по всем компонентам? Их классы ведь известны? Ну, предположим, это TEdit'ы. Тогда:
Код

for i:=0 to Form1.ComponentCount-1 do
 if( Form1.Components[i].ClassNameIs( 'TEdit' ) ) then
  (Form1.Components[i] as TEdit).Text := '';



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Rennigth
Дата 18.12.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(mr.Anderson @  17.12.2007,  23:05 Найти цитируемый пост)
Что мудрим-то? Что мешает пробежаться по всем компонентам? Их классы ведь известны? Ну, предположим, это TEdit'ы. Тогда:

А если в dfm по умолчанию не пусто в том же едите? smile Вопрос как я понял заключался именно в этом.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Snowy
Дата 18.12.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Подгрузка dfm вызывает создание дочерних компонент.
Поэтому нужно или убивать форму целиком и создавать заново,
либо убивать все контролы на форме и подгрузить dfm.
PM MAIL   Вверх
Rennigth
Дата 18.12.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(Snowy @  18.12.2007,  13:32 Найти цитируемый пост)
Подгрузка dfm вызывает создание дочерних компонент.
Поэтому нужно или убивать форму целиком и создавать заново,
либо убивать все контролы на форме и подгрузить dfm. 

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


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
mr.Anderson
Дата 18.12.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Елки, во сложностей-то напридумывалось... smile Нет, можно, конечно, и так, вот только зачем? Ну даже если текст не такой по умолчанию, можно прописать отдельно дефолтное значение каждого TEdit'а в его свойстве Hint. А потом подставлять при обходе это свойство. Элементарно и легко реализуемо.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Snowy
Дата 18.12.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Цитата(Rennigth @  18.12.2007,  13:38 Найти цитируемый пост)
Да, согласен, но кто мешает написать свой загрузчик dfm который будет не содавать конролы на основе данных dfm, а искать на уже имеющийся форме их, и заполнять значениями?
Зачем делать то, что уже есть?
Зачем трогать встроенный механизм сериализации, который недокументирован и не гарантирует своего постоянства?
Есть готовые интерфейсы для него. Не надо в нём ковыряться, как не надо ковыряться в API функциях винды.
А, если и ковыряться, то только в образовательных целях.
PM MAIL   Вверх
mr.Anderson
Дата 18.12.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Чем не нравится мое предложение? smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Rennigth
Дата 18.12.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 15
Всего: 76



Цитата(mr.Anderson @  18.12.2007,  16:00 Найти цитируемый пост)
Чем не нравится мое предложение?  


Цитата(mr.Anderson @  18.12.2007,  15:07 Найти цитируемый пост)
Елки, во сложностей-то напридумывалось...  Нет, можно, конечно, и так, вот только зачем? Ну даже если текст не такой по умолчанию, можно прописать отдельно дефолтное значение каждого TEdit'а в его свойстве Hint. А потом подставлять при обходе это свойство. Элементарно и легко реализуемо. 


А если хинты нужны, и как вспомогательное средство его использовать нельзя? Да и хинты не у всех есть. Вообщем не универсально это уж точно.


Цитата(Snowy @  18.12.2007,  15:19 Найти цитируемый пост)
Зачем делать то, что уже есть?
Зачем трогать встроенный механизм сериализации, который недокументирован и не гарантирует своего постоянства?
Есть готовые интерфейсы для него. Не надо в нём ковыряться, как не надо ковыряться в API функциях винды.
А, если и ковыряться, то только в образовательных целях. 


Ну незнаю... Что криминального в том чтобы еще раз прочитать данные из ресурса(dfm) и обрабатывать их? Раз в борландах не сделали такой возможности(а было бы иногда очень удобно), это ведь еще ничего не значит smile


Цитата(Snowy @  18.12.2007,  15:19 Найти цитируемый пост)
Зачем трогать встроенный механизм сериализации, который недокументирован и не гарантирует своего постоянства?


А кто говорил про то, что надо трогать уже имеющийся механизм?  smile 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
lukas
Дата 18.12.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



zetxi815eb, 

код в студию, что выполняется на твоей форме в события OnCreate, OnShow, OnActive и т.д., скорее что-то мешает... ну или возможно нужно еще поставить свойство Visible := True....


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.