Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];

Вниз

Допустим у нас есть ClassName фрейма   Найти похожие ветки 

 
Zhouck   (2003-09-26 16:36) [0]

Как по нему создать єеземпляр фрейма (для помещения на форму)?


 
KSergey   (2003-09-26 16:38) [1]

Это в смысле строка с наименованием класса?

Ну тут недавно пробегало обсуждение этого вопроса...

Вот что я для себя из него "вынес":

Как создать элемент по строковому имени его класса?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
C: TPersistentClass;
begin
C := GetClass(Edit1.Text);
if (C <> nil) and C.InheritsFrom(TControl) then
with TControlClass(C).Create(Self) do
begin
Parent := Self;
SetBounds(Random(Self.ClientWidth - Width), Random(Self.ClientHeight - Height), Width, Height);
end
else ShowMessage("Неизвестный класс " + Edit1.Text);
end;

initialization
Randomize;
RegisterClasses([TEdit, TButton, TMemo, TCheckBox, TListBox, TPanel, TGroupBox]); // только прописанные здесь классы будут доступны для создания
end.


 
MBo   (2003-09-26 16:38) [2]

registerclass
getclass или findclass


 
Palladin   (2003-09-26 16:38) [3]

если он RegisterClass то
frame:=FindClass(ClassName).Create;


 
Zhouck   (2003-09-26 16:51) [4]

Попробовал так
MainFrame:=FindClass(FrameClass.ClassName).Create;
Получаю несовместимость типов TFrame и TPersistent


 
don-do   (2003-09-26 16:55) [5]

Дык приведение типов на что?


 
me   (2003-09-26 17:01) [6]

TComponent(frame):= TComponentClass(FindClass(ClassName)).Create(<owner>);


 
Palladin   (2003-09-26 17:03) [7]

а проще нельзя чтоли?

MainFrame:=TFrame(FindClass(FrameClass.ClassName)).Create();


 
Zhouck   (2003-09-26 17:04) [8]

Интересно. Это как
C:=FindClass(FrameClass.ClassName).Create;
MainFrame:=C as FrameClass
так не канает
или что ?


 
Zhouck   (2003-09-26 17:09) [9]

Ага

procedure TMainForm.ShowFrame(FrameClass: TClass;ParentPanel:TWinControl);
begin
if(MainFrame<>nil) then
MainFrame.Free();
MainFrame:=TFrame(FindClass(FrameClass.ClassName)).Create(nil);
MainFrame.Parent:=ParentPanel;
MainFrame.Align:=alClient;
end;
procedure TMainForm.CallFirstFrameClick(Sender: TObject);
begin
if(MainFrame<>nil) then
MainFrame.Free();
ShowFrame(TFrame2,(ContainerFrame as TObject));
end;


Получаем Access violation


 
me   (2003-09-26 17:10) [10]

Palladin © (26.09.03 17:03) [7]

Можно.

type
TFrameClass = class of TFrame;

MainFrame:=TFrame Class(FindClass(FrameClass.ClassName)).Create(<owner>);


 
Zhouck   (2003-09-26 17:15) [11]

Ура . Последний вариант таки заработал правильно



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.009 c
1-27560
anonymous
2003-09-29 14:02
2003.10.09
Есть ли что-нить типа StringGrid1.Cells[i,j] для DBGrid1 ?


6-27631
Maxim Pshevlotsky
2003-08-11 10:57
2003.10.09
Как расшифровать CHMOD в числовое представление?


7-27758
Константин
2003-07-23 22:31
2003.10.09
Как изменить разрешение экрана?


3-27351
MsGuns
2003-09-18 17:07
2003.10.09
Редактируемый отчет


14-27708
Senti
2003-09-21 00:43
2003.10.09
У кого есть новая версия DynamicSkinForm





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский