powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++Builder делает что-то странное...
3 сообщений из 3, страница 1 из 1
C++Builder делает что-то странное...
    #33517918
Фотография Vector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем.
Пишу задачу на С++ в Borland С++Builder 6.0 (SP4).

У меня есть форма и набор фрйемов, которые могут загружаться на эту форму.
Форма одна, фреймов несколько, причем одновременно на форме может быть только один фрейм. Каждый фрейм имеет "свои" настройки для формы - размер, положение, плюс еще свои настройки. Загрузка фреймов и удаление производится с единственной формы. Чтобы упросить код модуля формы
создал промежуточный класс TExtendedFrame:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class TExtendedFrame : public TFrame
{
        public:
                virtual void __fastcall saveJustments()= 0 ;
                virtual void __fastcall loadJustments()= 0 ;
                __fastcall TExtendedFrame(TComponent* Owner) : TFrame(Owner) {}
                virtual __fastcall ~TExtendedFrame() {}
};
Здесь видно, что виртуальные функции saveJustments() и loadJustments() абстрактные и, потому, должны быть переопределены в наследниках, что я и делаю в своих фремах. Они являются наследниками этого фрейма. Вот определение одного из фреймов:
Код: plaintext
1.
2.
class TFrEditDB : public TExtendedFrame 
{
и его конструктор:
Код: plaintext
1.
2.
3.
__fastcall TFrEditDB::TFrEditDB(TComponent* Owner)
        : TExtendedFrame(Owner)
{

В каждом фрейме, как я говорил выше, я переопределяю функции loadJuatments() и saveJustments().
В главной форме я опредили указатель на текущий фрейм типа TExtendedFrame:
Код: plaintext
1.
2.
private:	// User declarations
        TExtendedFrame *frame;
Естественно в конструкторе формы я обнуляю этот указатель. А загрузка очередного фрейма производится так:
Код: plaintext
1.
2.
3.
  if(frame!=NULL) { frame->saveJustments(); delete frame; }
  frame=new TFrEditDB(this);
  frame->Parent=this;
Видно что при смене фрейма настройки предыдущего будут сохранены благодаря чуду полиморфизма.
Теперь вопрос, а точнее ПРОБЛЕМА.
Суть в том что-то при редактировании любого фрейма - наследника от TExtendedFrame Builder пишет в .dfm файл редактируемого фрема свойства, которых у TFrame нет!!!
А конкретно вот такие:

object FrTimeByTime: TFrTimeByTime
Left = 202
Top = 391
Width = 347
Height = 263
Align = alClient
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
PixelsPerInch = 96
TextHeight = 13

object SmrtPanel1: TSmrtPanel

Вот. Приходится каждый раз, после изменений на фрейме, закрывать проект в Builder, заходить в .dfm файл и удалять строки, указанные жирным шрифтом. Потом открывать проект и делать Build Project..
После этого все нормально.
Вопрос, может кто знает как сдалть так, чтобы Builder корректно отрабатывал в данном случае.
С уважением Vector
...
Рейтинг: 0 / 0
C++Builder делает что-то странное...
    #33518220
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При редактировании любого фрейма, закрывай окно-контейнер в редакторе. Дабы не переписывались свойства Font установи для фрейма ParentFont=true
...
Рейтинг: 0 / 0
C++Builder делает что-то странное...
    #33519927
Фотография rodb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Vector",

Я предлагаю вам вообще отказаться от фреймов.
Обыкновенные нормальные формы можно так же с успехом создавать на TPanel.


Еще одна деталь. Не используйте наследование в GUI. То что две формы по виду
почти похожи друг на друга, еще не повод вставлять их в иерархию
наследования. Сделайте просто Copy/Paste с другой формы.

С Уважением


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++Builder делает что-то странное...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]