![]() |
|
|
![]()
|
|
| GraNit |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Здравствуйте, уважаемые господа!
Мне "по наследству" досталась одна программа. Написали ее на CBuilder3. Использует не стандартные компоненты. Пробую перенести ее на Builder5. Вот вроде все нормально, при компиляции нет ошибок, НО!!! пропадают значения переменных объявленных в public-е. Переменные разных типов. Одни зачения беруться из ini файла, а рабочая дата назначается при загрузке (вибирается календарем). Что интересно, до метода show() все значения на месте, а после того как отображается форма, все значения равны NULL или 0. Форма для печати выходит так же пустая, она формируется в самой программе. Еще, открытие формы стала происходить в течении 20 секунд. Очень долго. Программа работает, не дает никаких ошибок. Полдергейст какой-та Что происходит, я не понимаю. Прошу помощи. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
||||
|
||||
| GraNit |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Fazil6, Вы видать человек опытний, подскажите мне, пожалуйста:
почему конструктор ANSIString вызывается после присвоения переменным значения? Я присваиваю значения переменным в FormOnCreate. Значит мне лучше переместить все хотя бы в OnActivate, когда все готово для отображения? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 18 Всего: 154 |
либо вызывается конструктор копирования для строки, либо происходит неявное преобразование типов AnsiString str; str = "это const char*"; в этом примере вызывается сначала конструктор для создания AnsiString из "это const char*", затем происходит присваивание. |
|||
|
||||
| GraNit |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Lazin, в моем случае получается так:
Unit1.h //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include "Unit3.h" #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include "RxMenus.hpp" #include <ComCtrls.hpp> #include <Menus.hpp> #include <inifiles.hpp> #include "ACE.hpp" class TMN : public TForm { TMenuItem *N1; TMenuItem *N2; bla-bla-bla private: // User declarations public: // User declarations __fastcall TMN(TComponent* Owner); AnsiString director, mainbuh, company; AnsiString lastdate, path_base, path_doc, disk, path_in, path_out, numdoc, my_oper, my_drive; TDateTime curdat; }; //--------------------------------------------------------------------------- extern PACKAGE TMN *MN; //--------------------------------------------------------------------------- #endif а вот уже unit.cpp тут в начале как всегда куча кода void __fastcall TMN::FormCreate(TObject *Sender) { SetEnvironmentVariable("TMP","C:\\WINDOWS\\TEMP"); TIniFile *pIniFile = new TIniFile( GetCurrentDir( )+"\\pack.ini"); director = pIniFile->ReadString( "MAIN", "DIRECTOR", "Íåèçâåñòåí" ); mainbuh = pIniFile->ReadString( "MAIN", "MAINBUH", "Íåèçâåñòåí" ); company = pIniFile->ReadString( "MAIN", "COMPANY", "Íåèçâåñòåí" ); lastdate = pIniFile->ReadString( "SYSTEM", "LASTDATE", DateToStr(Now()) ); path_base = pIniFile->ReadString( "SYSTEM", "PATHBASE", "BASES\\" ); path_doc = pIniFile->ReadString( "SYSTEM", "PATHDOC", "DOC\\" ); disk = pIniFile->ReadString( "SYSTEM", "DISK", "ARCHIVE\\" ); path_in = pIniFile->ReadString( "SYSTEM", "PATHIN", "IN\\" ); path_out = pIniFile->ReadString( "SYSTEM", "PATHOUT", "OUT\\" ); numdoc = pIniFile->ReadString( "SYSTEM", "NUMDOC", "0" ); my_oper = pIniFile->ReadString( "SYSTEM", "OPERATOR", "" ); my_drive = pIniFile->ReadString( "SYSTEM", "DRIVE", "A:\\" ); delete pIniFile; ну и так далее.... я попробовал пошаговое исполнение и был выяснил, что сначала выполняется OnCreate, а затем создается мой класс формы. Странно все как-то. Я думал, что должно наоборот. Сначала создается касс формы, а потом начинаю исполняться процедуры класса. И вот, получилось так что заполнились все переменные, а при создании формы они обнунинись. Ничего не понимаю. У меня Builder5 |
|||
|
||||
| pandrew |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 27.3.2006 Репутация: 3 Всего: 3 |
Описание порядка событий есть в литературе. Зачем думать? Надо знать. Члены класса (переменные формы) разумно всегда инициализировать в конструкторе и удалять в деструкторе. |
|||
|
||||
| GraNit |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
pandrew, извиняюсь, я не профессионал. Говорю, что мне она досталась в наследство.
Буду тады книжки читать. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |