C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как это реализовать на Билдере?, Динамическая работа с фреймами
Zhouck
Отправлено: 10.10.2003, 09:58


Не зарегистрирован







4 года работал на BCB. Но вот пришлось делать проги на Делфях. Оказалось, что кой-какие вещи удобнее делать именно в делфи.
Вот задача — динамически создавать фреймы по их имени. Реализация на делфи
[CODE]
type
TFrameClass = class of TFrame;

procedure TFormMain.ShowFrame(FrameClass: TClass;ParentPanel:TWinControl);
begin
//запретить прорисовку контейнера фреймов
LockWindowUpdate(ParentPanel.Handle);
//если фрейм не пуст, очистить его
if(MainFrame<>nil) then
MainFrame.Free();
//создать фрейм по его типу
MainFrame:=TFrameClass(FindClass(FrameClass.ClassName)).Create(FormMain);
MainFrame.Parent:=ParentPanel;
MainFrame.Align:=alClient;
//разрешить прорисовку контейнера фреймов
LockWindowUpdate(0);
end;

Ну и
ShowFrame(TFrameKontragent,PanelMain);

Как это реализовать в Билдере
Asher
Отправлено: 10.10.2003, 12:40


Мастер участка

Группа: Модератор
Сообщений: 550



Точно также biggrin.gif
CODE

class TMainFrame : public TFrame
{
__published: // IDE-managed Components
private:          // User declarations
public:  // User declarations
       __fastcall TMainFrame(TComponent* Owner);//Конструктор
};
//Реализация
__fastcall TMainFrame::TMainFrame(TComponent* Owner) : TFrame(Owner){}


//Основной код
TMainFrame *fraMFrame;


fraMFrame = new  TMainFrame(ParentPanel);//Создать фрейм типа TMainFrame
fraMFrame->Parent = ParentPanel;//Разместить на панели
fraMFrame->Align=alClient;//Установить выравнивание


Guest
Отправлено: 10.10.2003, 13:14


Не зарегистрирован







Это и так понятно. Но не об этом вопрос. Я в функцию должен передавать класс оъекта (фрейма) или его имя, а не прямо указывать тип. Т.е. создание объекта по его классу(имени класса) когда объект наследуется от базового класса TFrame и принимает тип например TFrame1,TFrame4,TFrame3. Иначе для создания нужно фрейма придется применять switch
Asher
Отправлено: 10.10.2003, 13:53


Мастер участка

Группа: Модератор
Сообщений: 550



Все верно. Прийдется применять switch
Отсутствие классовых ссылок (есть только объектные) — большой минус С++ перед Delphi. По моему именно это одна из основных причин того, что VCL написан на Delphi и никогда не будет реализован (в таком виде как он есть) на С++.
Хотя... Никогда не говори никогда (С)Бонд, ... Джеймс Бонд
** Zhouck
Отправлено: 10.10.2003, 15:30


Не зарегистрирован







Жаль. Не хотелось это через switch

Вернуться в Вопросы программирования в C++Builder