效果展示:
核心代码:
procedure TMain.scAdvancedListBox2Items0Click(Sender: TObject); //单位设置 begin//获取点击的按钮的caption属性var i := TscAdvancedListBox(Sender).ItemIndex;var cap := TscAdvancedListBox(Sender).Items[i].Caption;//创建一个新的标签页var newtab := scGPPageControl1.Tabs.Add;var tabsIndex := scGPPageControl1.Tabs.Count - 1;scGPPageControl1.Tabs[tabsIndex].Caption := cap;//创建一个新的页面var newpage := scGPPageControl1.CreatePage;newtab.Page := newpage;scGPPageControl1.ActivePage := newpage;//实例化框架var frm := TFrmUnit.Create(newpage);frm.ISQL := Format('select * from %s', ['单位列表']);frm.Parent := newpage;frm.getdata;BackButtonClick(Sender); end;
说明一:
var i := TscAdvancedListBox(Sender).ItemIndex;
var cap := TscAdvancedListBox(Sender).Items[i].Caption;
这里我原本是想直接一步到位,用 TscAdvancedListltem(Sender).caption的,结果返回空值,后面弹出 sender.className 才知道,这里的sender指向的是 TscAdvancedListBox,这种现象我还是第一次见.
说明二:
TscGPPageControl控件分为tab(标签)和page(页面)两个部分,动态创建的话,需要分别创建与绑定.
tab的创建语句是: var newtab := scGPPageControl1.Tabs.Add;
page的创建语句是: var newpage := scGPPageControl1.CreatePage;
tab和page绑定的语句是: newtab.Page := newpage;
设置显示页面的语句是:scGPPageControl1.ActivePage := newpage;
说明三:
1.Frame框架,需要实例化才能调用
2.要确定OWER,通常是page,关闭页面时,frame框架也会跟着释放
3.要确定父级(parent).
说明四:
TscGPPageControl属性最好勾选FreeOnClose属性