Форум: "Начинающим";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
ВнизКак "сбросить" TLabel? Найти похожие ветки
← →
and31 (2006-06-10 20:39) [0]Здравствуйте!
На форме несколько TEdit и TLabel компонентов. После необходимых вычислений, закрытия и открытия формы в этих компонентах видны старые данные. Как сбросить все данные разом при открытии формы в состояние по умолчанию? Я так понимаю, что надо использовать событие OnActivate, но как?
Спасибо!
← →
Rial © (2006-06-10 20:47) [1]For I:=0 to Application.ComponentCount-1 do
If (Application.Components[I].ClassParent=TForm)then begin
With Application.Components[I] do
For J:=0 to ComponentCount-1 do begin
If(Components[J].ClassType=TButton) then With (Components[J]as TButton) do Caption:=Name;
If(Components[J].ClassType=TLabel) then With (Components[J]as TLabel) do Caption:=Name;
end;
Что - то в этом роде.
Есть еще много классов, про них тоже не забудь.
← →
Юрий Зотов © (2006-06-10 21:02) [2]Все гораздо проще - надо всего лишь пересоздать форму.
← →
and31 (2006-06-10 21:20) [3]
> Все гораздо проще - надо всего лишь пересоздать форму.
А как это сделать?
← →
Desdechado © (2006-06-10 21:21) [4]По умолчанию при вызове Form1.Close происходит всего лишь Form1.Hide
Это иногда удобно, иногда нет.
Я обычно создаю формы явно (а не в списке Autocreate свойства проекта) черезForm1:=TForm1.Create(Application);
Form1.ShowModal;
А в обработке FormClose пишу
Action := caFree;
Тогда форма при закрытиии не прячется, а уничтожается.
← →
Константинов © (2006-06-10 23:32) [5]Если форма модальная я пишу так:
Application.CreateForm(TForm2,Form2);
Form2.ShowModal;
if Form2.ModalResult = 6 then
begin
//Считываем какие либо данные с контролов формы
end;
Form2.Free;
← →
Eraser © (2006-06-10 23:35) [6]
> Константинов © (10.06.06 23:32) [5]with TForm2.Create(Application) do
try
if ShowModal = 6 then
begin
...
end;
finally
Free;
end;
← →
Rial © (2006-06-11 01:25) [7]
> Юрий Зотов © (10.06.06 21:02) [2]
> Все гораздо проще - надо всего лишь пересоздать форму.
>
А если в обработчике создания висит код на 2-3 секунды выполнения ?
Тогда пересоздавать форму - ужасная мука.
Да и вообще, в большинстве случаев ИМХО, это плохое решение.
Мой вариант тоже не делает ничего сложного, ну разве что
"as" долго работает.
К аффтару:
Ты же читаешь как-то из этих контролов значения,
Так почему бы вручную ни заполнить их как надо ?
Это будет самый быстрый вариант.
← →
Юрий Зотов © (2006-06-11 07:31) [8]> Rial © (11.06.06 01:25) [7]
Итак, в некий момент времени на форме лежит 50 компонентов (что вполне реально и даже еще не много). 10 из них отображают информацию из БД, Интернета, файлов или любого другого внешнего источника (что тоже вполне реально). Некоторые из компонентов были созданы динамически и владельцем имеют не саму форму, а любые другие компоненты, включая и не принадлежащие форме (что тоже встречается нередко). Далее - в процессе работы создаются, изменяются и уничтожаются какие-то списки (типа TList, TStringList и т.п.) или массивы (что тоже встречается частенько). Еще - логика кода построена так, что часть обработчиков событий подключаются и отключаются динамически (что тоже не откровение). И, наконец, форма в процессе своей работы порождает и уничтожает какие-то дополнительные потоки (что тоже вполне реально).
Ну так вот - я был бы весьма Вам признателен, если бы Вы подтвердили свои слова делом и привели прямо здесь код, который бы:
а) иллюстрировал практическое применение Вашего предложения;
б) правильно выполнял полную инициализацию формы, то есть:
- охватывал все компоненты (включая и те, владелец которых - не форма);
- уничтожал ненужные из динамически созданных компонентов;
- охватывал все нужные списки и/или массивы;
- уничтожал ненужные из этих списков и/или массивов;
- учитывал актуальную на текущий момент информацию в БД или любых других внешних источниках;
- правильно проставлял ссылки событий на их обработчики;
- терминировал и уничтожал ненужные дополнительные потоки;
- инициализировал остальные потки;
- учитывал, что в процессе работы над программой состав лежащих на форме компонентов и логика работы кода могут меняться (причем иногда радикально).
Надеюсь, Вы относитесь к числу людей, привыкших не бросаться своими словами, а подтверждать их. Поэтому с нетерпением жду Вашего кода здесь. После чего здесь же приведу свой код, выполняющий те же самые действия. Причем заранее говорю, что мой вариант будет универсальным и никогда не потребует никаких переделок, а для его реализации нужно будет написать всего лишь одну дополнительную строку.
Мы сравним оба варианта и увидим, что есть мука, а что не мука, что работает быстрее, а что медленнее, какое решение в большинстве случаев хорошее, а какое плохое - ну, в общем, все то, что Вы сказали. Но уже не на словах, а на деле.
Итак, жду и желаю Вам успеха.
← →
Rial © (2006-06-11 21:26) [9]1.
Приношу извинения за две необдуманно брошенные фразы:
а)Да и вообще, в большинстве случаев ИМХО, это плохое решение.
Большинство случаев - шаткое понятие, смотря, что именно и как делать.
В Вашем случае я однозначно не прав.
б)Это будет самый быстрый вариант.
Я имел в виду быстрый вариант с точки зрения времени выполнения,
а не написания и отладки. И мука - в том же смысле.
2.
Вообще, я мыслил не так глобально, когда советовал
тупой перебор компонентов.
Ведь несколько - это, как правило, около десяти,
и ввиду уровня сложности вопроса уверен, что все намного проще,
а дело обошлось без Вашего 2.б) .
а)А теперь представьте, что необходимо полное сохранение состояния
формы. Тут уже никак одной строчкой не обойтись.
Теперь никуда не деться от перебора страждущих компонентов
и всех ваших пунктов.
б)По крайней мере, так же вероятна ситуация, что
пересоздание формы неминуемо повлечет за собой
на порядок более продолжительные операции.
Если в редакторе какой - то игры
ради сброса 20-50 компонентов и т.п. получать заново формат пиксела,
переустанавливать контекст и т.д., то потери будут вполне ощутимы.
А всего то надо было запомнить 50 контролов и их начальные имена.
P.S.
Практическое применение + Ваши требования - привести пример
этих пунктов одновременно сейчас не смогу
(ведь это было и так заранее понятно, да ?), хотя, возможно, и наклепаю
что ни будь специально для проверки быстродействия.
P.P.S.
Не на что не претендую, ногами не бить, или бить не сильно.
Я знаю, что где то, скорее всего, я не прав.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c