1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891

Переcоздание TForm

08.05.2012, 00:53. Показов 7054. Ответов 72
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, в общем задача простая: есть форма, на ней n-контролов (боксы, едиты, листы и пр.), которые заполняются. Есть кнопка по нажатию которой все контролы должны очищаться, т.е. форма перед нами должна предстать как будто только что созданная.

Очищать каждый элемент вручную - глупо. Использование FindComponent более рационально, однако слишком много разных типов контролов, так что все равно не подходит.

Ну соответственно решил пересоздавать форму по нажатию этой кнопки:

C++
1
2
3
4
5
6
7
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Form1new = new TForm1(Application);
 this->Close();
 Form1new->Show();
}
Однако возникли следующие проблемы. На закрытие форм класса TForm1 у меня стоит:

C++
1
2
3
4
5
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 Application->Terminate();
 Action = caFree;
}
Соответственно
C++
1
this->Close();
- вызывает закрытие приложения.

Вот... Но даже если я решу эту проблему, все равно заметно как форма моргает и если предыдущая форма имела какие-то другие координаты, а не по центру (что выставлено по умолчанию для TForm1), то после нажатия кнопки происходит прыжок формы на центр...

Может кто-нибудь подскажет, как по умнее это сделать?

Благодарю!

Добавлено через 3 минуты

Не по теме:

P.S. LK, поправьте тайтл, пожалуйста... Что-то я промаСал

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.05.2012, 00:53
Ответы с готовыми решениями:

копии TForm
мне надо создать больше двух копий TForm. как мне сделать что бы после создания копий, и закрытия главной формы, не закрывались...

Наследник TForm
Доброго времени суток всем. Такая проблема: создал модуль, в нем описал класс: #include <Forms.hpp> class TMyForm : public...

Вопрос по TForm
Есть главная форма приложения Form1. Есть дополнительная форма Form2, которая создаётся сразу же при запуске приложения, но не...

72
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
08.05.2012, 07:03
Студворк — интернет-сервис помощи студентам
The_Immortal, кажись, обсуждалось и не один раз -

1. Более понятный способ. При сохдании формы, или при самом первом создании формы пишете состояние формы и контролов в файл ини, или в реестр, например, и грузите при необходимости.

2. Менее понятный способ (не делал) .
WriteComponentResFile Function
ReadComponentResFile Function
ReadComponentResFile (C++)

Как сохранить всю форму в файл (как Delphi в *.dfm)
(к сожалению, пример на делфии)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
constructor TForm1.Create(AOwner: TComponent); // override;
var
  fname: String;
begin
  { Для динамически создаваемых контролов, может требоваться
  RegisterClasses(..); }
  fname := FormFilename;
  if FileExists( fname ) then
    begin
      CreateNew(AOwner);
      ReadComponentResFile(fname, Self);
    end
  else
    inherited Create( AOwner );
end;
 
procedure TForm1.FormCloseQuery( Sender: TObject;
   var CanClose: Boolean);
begin
  WriteComponentResFile(FormFileName, Self);
end;
 
{Peter Below, Vladimir Titov}
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.05.2012, 16:34
я как-то по электронке неразрывный пробел отсылал и на форуме выкладывал , а здесь "пустое свойство" не сохраняется
Если сохранять в файл то это можно увидить свойства просто нет
Миниатюры
Переcоздание TForm  
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.05.2012, 16:40
Можно прописать его ручками Text = '' файле и тогда эдит будет очищаться
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
08.05.2012, 16:47  [ТС]
LK, Заюзал пример на делфи - он применителен, когда считывание данных формы в файл и извлечение происходит в разные моменты времени. В данном случае запись данных в файл происходит на закрытие формы, а извлечение - на создание формы. Мне же надо сделать в пределах одной сессии, т.е. когда форма не закрывается.
Поэтому, когда вызываю ReadComponentResFile вылетает ошибка, что такой-то элемент формы уже создан
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.05.2012, 16:47
LK,WriteComponentResFile() ReadComponentResFile() дадут тот же эффект
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
08.05.2012, 16:51  [ТС]
Avazart, а может с WriteComponentResFile прокатит? Просто у меня опять проблема с уже имеющимеся компонентами Я так и не понял, как Вы ее вчера обошли...

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Если сохранять в файл то это можно увидить свойства просто нет
А можно примерчик, как Вы в файл сохраняете?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.05.2012, 16:54
а может с ReadComponentResFile прокатит?
Не прокатит это одно тоже с тем что я предложил по сути
А можно примерчик, как Вы в файл сохраняете?
Я уже это кидал Сохранение динамических компонентов
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
08.05.2012, 16:57  [ТС]
Avazart,
Цитата Сообщение от Avazart Посмотреть сообщение
Я уже это кидал
Чего-то не могу применить для моего случая...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.05.2012, 17:09
Это глючные и не понятные методы, не понимаю почему их не обкатали
Чего-то не могу применить для моего случая...
Эти ф-ции написаны что бы сохранять один компонент, но в читаемом виде
WriteComponentResFile() делает тоже самое только, в не читаемом виде

Добавлено через 10 минут
Если бы можно было как-то программно получить список-значение всех свойств компонента.
C# как я помню есть такой способ...а вот в Buildere ?
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
08.05.2012, 17:30  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Если сохранять в файл то это можно увидить свойства просто нет
Так а можно примерчик кода, как Вы это поместили в файл?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.05.2012, 17:48
Можно решить так (не решает проблему с "блыманием" формы)
Пишим код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
namespace my
 {
 void SaveComponent(TComponent* Component,String FileName)
  {
  TMemoryStream *Ms = new TMemoryStream();
  Ms->WriteComponent(Component);
  TFileStream *Fs = new  TFileStream(FileName,fmCreate);
  Ms->Position = 0;
  ObjectBinaryToText(Ms,Fs);
  delete Fs,Ms;
  }
 
  void LoadComponent(TComponent* Component,String FileName)
  {
  TFileStream *Fs = new TFileStream(FileName,fmOpenRead);
  TMemoryStream *Ms = new TMemoryStream();
  ObjectTextToBinary(Fs,Ms);
  Ms->Position = 0;
  Ms->ReadComponent(Component);
  delete Fs,Ms;
  }
 }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
my::SaveComponent(Form1,"1.txt");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(;this->ComponentCount!=0;) delete this->Components[0];
my::LoadComponent(Form1,"1.txt");
}
//---------------------------------------------------------------------------
Запускаем на кномку пока не жмем.
Открываем 1.txt в текстовом редакторе правим его ручками:
Аккуратно удаляем из него свойства формы, и заменяем свойства нужных компонентов.
Сохраняем и жмем кнопку.

Таким же образом можно переписать ф-ции для загрузки каждого в отдельности компонента решив проблему с "блыманием"...
Миниатюры
Переcоздание TForm  
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
09.05.2012, 23:02
Цитата Сообщение от Avazart Посмотреть сообщение
Открываем 1.txt в текстовом редакторе правим его ручками
ага, а на рисуночке правите Unit1.dfm в явном виде .
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.05.2012, 00:11
ага, а на рисуночке правите Unit1.dmf в явном виде
Я только показал что надо править.А вообще можно напрямую от туда копирнуть в txt-файл и там править
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.05.2012, 00:11

Доступ к обьектам TForm
Задача в следующем: есть TForm и в на нём лежит порядка 100 кнопок. Кнопки имеют определённые имена, и именно с помощью этих имён я и хочу...

Класс перехватчик к TForm
Добрый день, добавляю к TForm доп строку namespace SLE { class TF : public Vcl::Forms::TForm { private: AnsiString...

Вопрос по TForm::OnKeyPress
Есть форма. На ней расположен TStringGrid и несколько кнопочек. Хочется отработать нажатие на клавишу (независимо от того, на каком из...

Создание наследника TForm
Всем привет. При попытке создать наследника TForm получаю ошибку "Resource MyClass not found." Unit1.cpp ...

Вывод текта на TForm
Здравствуйте. Как на TForm вывести RichEdit1->Text. Пробую через Form1->Canvas->TextOutA(0,0,RichEdit1->Text), но только выводит он всесь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
73
Ответ Создать тему
Опции темы

Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru