TabControlと他コンポーネントの連動(VBで曰くload関数)

解決


Basicer  2005-01-09 22:27:25  No: 12622

CommandButton1を押したときにTabControlのタブを追加し、
さらに新しいコンポーネント(ここではMemoとします)をロードしてタブのクライアント領域に表示するにはどのようにすればよろしいのでしょうか?

環境:
Delphi7
WindowsXPHome


大豆Z  2005-01-10 00:26:32  No: 12623

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;


大豆Z  2005-01-10 02:54:39  No: 12624

' ページ追加のみ
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;


Basicer  2005-01-10 03:21:43  No: 12625

TPageControlという手がありましたか…
解決しました。大豆Zさん、ありがとうございました


大豆Z  2005-01-10 03:29:07  No: 12626

ついでに 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;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加