CommandButton1を押したときにTabControlのタブを追加し、
さらに新しいコンポーネント(ここではMemoとします)をロードしてタブのクライアント領域に表示するにはどのようにすればよろしいのでしょうか?
環境:
Delphi7
WindowsXPHome
VCL リファレンス → TPageControl → TPageControl の使い方
に載っています。
TTabControlは、タブを提供するだけです。
複数のページを扱うには、TPageControlの方が使いやすいのでそちらの例
procedure TForm1.Button1Click(Sender: TObject);
begin // ページ追加のみ
with TTabSheet.Create(PageControl1) do
begin
PageControl := PageControl1;
PageControl1.Tag := PageControl1.Tag +1;
Caption := IntToStr(PageControl1.Tag);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var NewTabSheet : TTabSheet;
begin // メモ追加
NewTabSheet := TTabSheet.Create(PageControl1);
with NewTabSheet do
begin
PageControl := PageControl1;
PageControl1.Tag := PageControl1.Tag +1;
Caption := IntToStr(PageControl1.Tag);
with TMemo.Create(NewTabSheet) do
begin
Parent := NewTabSheet;
Align := alClient;
Lines.add('[TabSheet]');
Lines.add('Owner.Name: '+NewTabSheet.Owner.Name);
Lines.add('Parent.Name: '+NewTabSheet.Parent.Name);
Lines.add('TabSheet.Name: '+NewTabSheet.Name);
Lines.add('TabSheet.Caption: '+NewTabSheet.Caption);
Lines.add('');
Lines.add('[Memo]');
Lines.add('Owner.ClassName: ' + Owner.ClassName);
Lines.add('Parent.ClassName: '+ Parent.ClassName);
Lines.add('TabSheet.ClassName: ' + ClassName);
end;
end;
end;
' ページ追加のみ
Private Sub CommandButton1_Click()
Dim pg As Page
Set pg = MultiPage1.Pages.Add
pg.Caption = "あぁ"
End Sub
procedure TForm1.Button1Click(Sender: TObject);
var NewTabSheet : TTabSheet;
begin // ページ追加のみ
NewTabSheet := TTabSheet.Create(PageControl1);
NewTabSheet.PageControl := PageControl1;
NewTabSheet.Caption := "あぁ";
end;
TPageControlという手がありましたか…
解決しました。大豆Zさん、ありがとうございました
ついでに TabSheetも作りました
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
CloneMemo : TMemo;
MemoRect : TRect;
s : string;
begin
s := DateTimeToStr(Now);
TabControl1.Tabs.add(s);
CloneMemo := nil;
for i := 0 to TabControl1.ControlCount-1 do
if TabControl1.Controls[i] is TMemo then
begin
CloneMemo := TMemo(TabControl1.Controls[i]);
break;
end;
if CloneMemo=nil then
begin
CloneMemo := TMemo.Create(TabControl1);
CloneMemo.Parent := TabControl1;
MemoRect := TabControl1.DisplayRect;
CloneMemo.Top := MemoRect.Top;
CloneMemo.Left := MemoRect.Left ;
CloneMemo.Height := MemoRect.Bottom - MemoRect.Top;
CloneMemo.Width := MemoRect.Right - MemoRect.Left;
end;
CloneMemo.Clear;
CloneMemo.Lines.Add(s);
end;
procedure TForm1.TabControl1Change(Sender: TObject);
var i : integer;
CloneMemo : TMemo;
begin
CloneMemo := nil;
for i := 0 to TabControl1.ControlCount-1 do
if TabControl1.Controls[i] is TMemo then
begin
CloneMemo := TMemo(TabControl1.Controls[i]);
break;
end;
if CloneMemo<>nil then
CloneMemo.Text := TabControl1.Tabs[TabControl1.TabIndex];
end;
ツイート | ![]() |