Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

Как "сбросить" 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.05 c
15-1149302214
TSingle
2006-06-03 06:36
2006.07.02
MinSingle: Single = 1.5e-45; Почему?


3-1146390819
DDDiM
2006-04-30 13:53
2006.07.02
MYSQL->XML


2-1150036999
Ladan
2006-06-11 18:43
2006.07.02
CopyFile


15-1149570044
Иксик
2006-06-06 09:00
2006.07.02
Подмосковье


15-1149411044
Галинка
2006-06-04 12:50
2006.07.02
Где найти книги по C#