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
|
Точно также
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 |
|