Alignの設定について

解決


Toshi  2007-05-07 06:31:13  No: 26047

初歩的なことですが教えてください。

FormにPanel1を配置し、Align:=alLeft; に設定します。
もうひとつ、Panel2を配置して、Align:=alTop; に設定すると、
Panel2は、Panel1の上に配置されてしまします。

これを、Panel1をLeftにそのまま配置して、Panel2をPanel1の右に
配置する設定方法があったらお願いします。


TS  2007-05-07 07:04:31  No: 26048

>Panel1を配置し、Align:=alLeft
その右側にSplitterを配置 
Panel1をその右側に配置
Align:=alClientでどうでしょか


Toshi  2007-05-07 07:14:15  No: 26049

こんにちわ
やはり、Splitterしかありませんか。
実は画面を多重に分割して使っているため、Panel2の下にさらにPanel3とか
配置しています。途中までSplitterでやりかけたのですが、
私の知らない、簡単な方法があるのか、知りたいと思いました。


del5  2007-05-07 07:41:45  No: 26050

Splitterを使う以外の方法として
Panel1を配置し、Align:=alLeft;
PanelCを配置し、Align:=alClient;  //・・縁を消して見えないようにする。
Panel2をPanelCを親にして配置し、Align:=alTop;

こうすれば、擬似的に出来るかと..


TS  2007-05-07 07:45:52  No: 26051

>私の知らない、簡単な方法があるのか、知りたいと思いました。
Toshiさんがどこまでわかられるのか私にはわかりません
私ならPageControlを使うと思います。


A  2007-05-07 14:52:01  No: 26052

Align=alCustomを使います。

Formにpanelを2つ置いて、panelのAlignを「alCustom」にしてください。
CustomAlignInsertBefore
CustomAlignPosition
をoverrideします。

function TForm1.CustomAlignInsertBefore(C1, C2: TControl): Boolean;
begin
  Result:= (C2=Panel2) and (C1=Panel1);
end;

procedure TForm1.CustomAlignPosition(Control: TControl; var NewLeft,
  NewTop, NewWidth, NewHeight: Integer; var AlignRect: TRect;
  AlignInfo: TAlignInfo);
begin
  if Control=Panel1 then
  begin
    NewLeft:= 0;
    NewTop:= 0;
    NewWidth:= 150;
    NewHeight:= ClientHeight;
  end else
  if Control=Panel2 then
  begin
    NewLeft:= Panel1.Width;
    NewTop:= 0;
    NewWidth:= ClientWidth-NewLeft;
    NewHeight:= 120;
  end;
end;


TS  2007-05-07 16:44:56  No: 26053

ToshiさんではないですがPanelの配置に苦労した事があります
Aさん、いいですね。


Toshi  2007-05-07 22:21:41  No: 26054

皆さん情報をありがとうございました。

Aさん、こういう方法もあったんですね。とても参考になりました。

これから、少し試行錯誤をしたいと思います。
とりあえず、お礼です。  また、この件は解決としました。


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

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






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