Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1149613857
Socers'
2006-06-06 21:10
2006.07.02
Fifa 2006


3-1146831909
TheEd
2006-05-05 16:25
2006.07.02
IBX: Связь master-detail в запросах


15-1149743871
Ega23
2006-06-08 09:17
2006.07.02
С Днём рождения! 8 июня


4-1143669499
Turbid
2006-03-30 01:58
2006.07.02
Отличие одинарного клика от двойного в трее


2-1149571360
Алексий
2006-06-06 09:22
2006.07.02
экран + мышка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский