S
smithcouple
Unregistered / Unconfirmed
GUEST, unregistred user!
我首先用程序做了一个MPI多页面的程序,用TPageControl做主容器,可以动态创建TTabSheet,TTabSheet
内含的是已经创建好的TFrame,菜单栏也可以动态生成Window菜单。释放也没问题。
后来我想做一个叫TMPIController的非可视组建,专门控制MPI,可以指定TPageControl TMenuItem 还有
动态TTabSheet内的TFrame,自己写了CreateNewPage,DeleteActivePage,DeleteAllPages,
DeleteSomePage(PageIndex: integer)等方法。这样就可以用很少的代码实现MPI程序。
但在我做的时候遇到了一个棘手的问题。就是在TFrame那里,因为一般的TFrame和TForm类似,都是
TFrame1 = class(TFrame)这样的子类。
我开始写的是property TabSheetInside: TFrame read FTabSheetInside write SetTabSheetInside;
这样肯定不行,这样只能指定一个类的对象,而不是其子类。因为后面再动态创建的时候都是针对类的。
后来我想到让用户将类名用字符串设置好property InsideClass: string read FInsideClass write SetInsideClass;,再用FindClass找到,但这需要RegisterClass,而我并不知道用户的TFrame那个子类叫什么名字,比如我可以叫TFrame1,他可以叫TFrameChild。这样我就没办法找到用户指定的TFrame子类。
也许我的方法有问题,请大家看看,应该在哪里做修改,或者整体结构就有问题。我重新做,谢谢!
TFrame子类我想是这么操作:比如这个子类叫TFrame1,TempTabSheetInsideName自动生成的,不会重复
TFrame1.Create(Self).Name := TempTabSheetInsideName;
TFrame1(FindComponent(TempTabSheetInsideName)).Parent :=
TTabSheet(FindComponent(TempTabSheetName))
还有一件事,我想问问,一个Frame在Free的时候,其内部的各组件是不是也可以自动Free,而不是需要手动一个个.Free?
内含的是已经创建好的TFrame,菜单栏也可以动态生成Window菜单。释放也没问题。
后来我想做一个叫TMPIController的非可视组建,专门控制MPI,可以指定TPageControl TMenuItem 还有
动态TTabSheet内的TFrame,自己写了CreateNewPage,DeleteActivePage,DeleteAllPages,
DeleteSomePage(PageIndex: integer)等方法。这样就可以用很少的代码实现MPI程序。
但在我做的时候遇到了一个棘手的问题。就是在TFrame那里,因为一般的TFrame和TForm类似,都是
TFrame1 = class(TFrame)这样的子类。
我开始写的是property TabSheetInside: TFrame read FTabSheetInside write SetTabSheetInside;
这样肯定不行,这样只能指定一个类的对象,而不是其子类。因为后面再动态创建的时候都是针对类的。
后来我想到让用户将类名用字符串设置好property InsideClass: string read FInsideClass write SetInsideClass;,再用FindClass找到,但这需要RegisterClass,而我并不知道用户的TFrame那个子类叫什么名字,比如我可以叫TFrame1,他可以叫TFrameChild。这样我就没办法找到用户指定的TFrame子类。
也许我的方法有问题,请大家看看,应该在哪里做修改,或者整体结构就有问题。我重新做,谢谢!
TFrame子类我想是这么操作:比如这个子类叫TFrame1,TempTabSheetInsideName自动生成的,不会重复
TFrame1.Create(Self).Name := TempTabSheetInsideName;
TFrame1(FindComponent(TempTabSheetInsideName)).Parent :=
TTabSheet(FindComponent(TempTabSheetName))
还有一件事,我想问问,一个Frame在Free的时候,其内部的各组件是不是也可以自动Free,而不是需要手动一个个.Free?