Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

класс наследник TForm (проблемы показа формы)

9.9K
11 апреля 2007 года
BelStudent
48 / / 18.03.2007
Короче так, я создаю свой класс TmyForm, который является наследником TForm, плюс ещё запоминает текущие координа в файл. Потом начинаются проблемы:
1)как ни странно мой класс не отображается в инспекторе обьектов,
2) мой класс существует, но как сделать чтобы показывалась МОЯ форма
3)вопрос вытекает из 2): как сделать чтобы по нажатью на кнопку "new form" создавалась МОЯ форма, а не TForm1?
19K
11 апреля 2007 года
Snikex
32 / / 03.04.2007
А ты как создаешь класс? Если твоя форма является наследником TFrom, то имеет смысл создавать File->New->Form. Если ты делал так, то посмотри свойство Visible (после создания формы вызови Show()).
9.9K
11 апреля 2007 года
BelStudent
48 / / 18.03.2007
Цитата: Snikex
А ты как создаешь класс? Если твоя форма является наследником TFrom, то имеет смысл создавать File->New->Form. Если ты делал так, то посмотри свойство Visible (после создания формы вызови Show()).



Что значит как создавал форму? Просто писал (см. мой h-файл):

Код:
#ifndef TFormCoorH  
#define TFormCoorH

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//#include <TForm.h>
class TFormCoor:public TForm
  { //TIniFile *ini;
    public:
      _fastcall TFormCoor(TComponent *Owner);
  };


extern PACKAGE TFormCoor *FormCoor;
//---------------------------------------------------------------------------
#endif

А по нажатию File->New->Form создаётся форма по умолчанию! но не моя.
10K
11 апреля 2007 года
Archy_74
51 / / 13.12.2006
#ifndef и #define содержат название h-файла, а не класса

параметры формы находяться в dfm-файле

Имхо послушайся совета выше File->New->Form.

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

PS в проектном файле bpr также надо указат ь принадлежность формы проекту
309
12 апреля 2007 года
el scorpio
1.1K / / 19.09.2006
Создаёшь новую форму.
Называешь её, как надо.
Накидываешь на неё, что надо.
И добавляешье её в "репозитарий" (project \ add to repository...)

Далее нужно просто добавлять в проект не просто "новую форму", а "другой объект" (other...). В появившемся окне репозитария выбирается своя форма и добавлается в режиме "наследования" (inherited)
246
12 апреля 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: BelStudent
Короче так, я создаю свой класс TmyForm, который является наследником TForm, плюс ещё запоминает текущие координа в файл. Потом начинаются проблемы:
1)как ни странно мой класс не отображается в инспекторе обьектов,


Ничего странного (как ни странно:)) нет т.к. для этого его нужно зарегистрировать соответствующим образом. Рекоммендации: курите RegisterCustomModule(...).

Цитата: BelStudent

2) мой класс существует, но как сделать чтобы показывалась МОЯ форма


см. выше

Цитата: BelStudent

3)вопрос вытекает из 2): как сделать чтобы по нажатью на кнопку "new form" создавалась МОЯ форма, а не TForm1?


1. Уже оговаривалось выше - создать свой модуль с новыми св-ми, событиями и т.д.
2. Зарегистрировать его с помощью RegisterCustomModule(...)
3. Создать мастер где реализовать создание модуля + добавить пункт меню File->New->MYForm или в репозиторий.

9.9K
16 апреля 2007 года
BelStudent
48 / / 18.03.2007
Цитата: GIZMO

2. Зарегистрировать его с помощью RegisterCustomModule(...)
3. Создать мастер где реализовать создание модуля + добавить пункт меню File->New->MYForm или в репозиторий.



Покажи на примере как толком использовать RegisterCustomModule(...); куда её прописывать?
Искал в инете, а но нашёл для случая с Delphi и то на английском языке.

246
17 апреля 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: BelStudent
Покажи на примере как толком использовать RegisterCustomModule(...); куда её прописывать?
Искал в инете, а но нашёл для случая с Delphi и то на английском языке.


В пакете только одно подходящее место - функция Register() (там где компоненты, визарды, редакторы св-в регистрируются...). Вот там ее и вызывай.

9.9K
17 апреля 2007 года
BelStudent
48 / / 18.03.2007
Цитата: GIZMO
В пакете только одно подходящее место - функция Register() (там где компоненты, визарды, редакторы св-в регистрируются...). Вот там ее и вызывай.


если честно как-то не думал если создаю наследник формы то нужно создавать пакет. Я просто в ручную создавал класс-наследник, а потом File->New Form и в этой форме менял то что TForm1 являлась наследником TForm на то что она теперь наследник TmyForm (в данном случае TmyForm и TCoorForm одно и то же), и соответственно менял аналогично в конструкторе и h-файле (см.ниже)
Улучшенный мой h-файл:

Код:
#ifndef TCoorFormH
#define TCoorFormH

#include <Forms.hpp>

class TCoorForm: public TForm
 {
   public:
    __fastcall TCoorForm(TComponent *);
   
 };
//---------------------------------------------------------------------------
#endif


cpp-файл:
Код:
pragma hdrstop

#include "TCoorForm.h"
#include <IniFiles.hpp>
//---------------------------------------------------------------------------

#pragma package(smart_init)

__fastcall TCoorForm::TCoorForm(TComponent* Owner)
        : TForm(Owner)
   {
     
   }

Видоизменнёный мною файл формы TForm1
h-файл

Код:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <DesignIntf.hpp>
#include <DesignEditors.hpp>
#include "TCoorForm.h"
//---------------------------------------------------------------------------
class TForm1 : public TCoorForm
{
__published:    // IDE-managed Components
        void __fastcall FormCreate(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

cpp-файл
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TCoorForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 
}
//---------------------------------------------------------------------------

Это всё работает, но я трачу много времени пока это сделаю.

Попробовал создать компонент,наследник TFrom (File->New->Package). Нажал Install и пакет установился на панель инструментов, но всё равно полученный компонент требует контейнара (на что помещаться) но форма на форме мне не нужна.
Пытался в нутри полученного компонента прописать RegisterCustomModule(TForm,TCoorForm); но реакции ни какой.
Народ, прошу вашей помощи.:confused:
246
20 апреля 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: BelStudent
если честно как-то не думал если создаю наследник формы то нужно создавать пакет. Я просто в ручную создавал класс-наследник, а потом File->New Form и в этой форме менял то что TForm1 являлась наследником TForm на то что она теперь наследник TmyForm (в данном случае TmyForm и TCoorForm одно и то же), и соответственно менял аналогично в конструкторе и h-файле (см.ниже)
Улучшенный мой h-файл:
...



если честно, то нифига не понял что ты делал...

Можно обойтись без мастера, а положить форму (свою. написанную ручками, с новыми Паблишед св-вами) в репозиторий, но при этом все равно нужен пакет где будет вызов RegisterCustomModule (нужно. чтобы IDE знал, что твоя форма это дизайнер...). Тогда тоже должны твои св-ва быть видны в ObjectInspector. но говорю - это через Жж...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог