Главная страница
    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.007 c
1-27494
anana][
2003-09-26 17:18
2003.10.09
какая-то фигня


3-27373
Sniper
2003-09-19 00:55
2003.10.09
error initialize Borland Database.


3-27378
RDen
2003-09-19 07:58
2003.10.09
Как сделать чтобы грид не отображал перемещение по таблице


9-27290
drnet
2003-04-08 21:17
2003.10.09
3DSTATE


3-27412
ZoKr
2003-09-18 05:30
2003.10.09
MaskEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский