天哪!这个简单的问题快让我崩溃了!!! (50分)

  • 主题发起人 主题发起人 *HelloWorld*
  • 开始时间 开始时间
H

*HelloWorld*

Unregistered / Unconfirmed
GUEST, unregistred user!
正在做的这个东西,最核心的部分只用一个半星期就做出来了,可到了最后的界面处理上
却连花了我两天半的时间还一无所获。我快疯了!大家来帮我看一下吧!!!

就是一个form的界面,上面是菜单,接着是toolbar,中间是几个核心控件,最下面是状态
栏。中间的控件部分一分为二为左右两大块,右边是一个pagecontrol;左边那块又上下一
分为二:上面是一个listbox,下面是一个filelistbox。就这么简单的界面。

我现在想让界面大小改变时,内部的控件能够相应改变:不是按比例!而是:

(1)当form垂直高度改变时,左上角的listbox不动,左下角的filelistbox和右边的pagecontrol
高度增加(或减少),宽度不动。

(2)当form水平宽度改变时,左边的两个控件都不动,就右边的pagecontrol的宽度相应增加
(或减少)。

就这么简单的一个效果,我就一直没做出来。要不是statusbar的位置跑了(我设它的top为
窗体新height减去状态栏的高度,可出来的东西就是跑样!),要不就是当窗体变大时没事,
但一旦缩小到原始高度(宽度)以下时,那个pagecontrol就会让整个窗体边上出现滚动条,
可我不想让它出现。

谁来帮帮我呀,我快让自己气死了!
 
在form的onresize事件中写代码
TForm1.FormResize(Sender: TObject);
begin
pagecontrol.weight:=form1.wieght-listbox.weight
end;
大概是这样实现,我只写出了(2),(1)依次推理即可
 
你可以这们做:
放一个Tpanel控件,Align设置为alLeft,TListBox和TFilelIstbox放在TPanel上
其中TListBox的Align设置为alTop,TFileListBox的Align设置为alClient;
TpageControl的align设置为alClient;就行了
 
hupeh最简单,通过多几个Tpanel控件就搞定
 
做程序要有耐性。感到走投无路时,出去放松一下,换一个思路,总会有办法的。
祝你成功。
 
no need code,just set as :

//form
object Form1: TForm1
Left = 136
Top = 95
Width = 544
Height = 411
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Splitter1: TSplitter
Left = 185
Top = 29
Width = 3
Height = 317
Cursor = crHSplit
Color = clRed
ParentColor = False
end
object ToolBar1: TToolBar
Left = 0
Top = 0
Width = 536
Height = 29
Caption = 'ToolBar1'
TabOrder = 0
object ToolButton1: TToolButton
Left = 0
Top = 2
Caption = 'ToolButton1'
ImageIndex = 0
end
object ToolButton2: TToolButton
Left = 23
Top = 2
Caption = 'ToolButton2'
ImageIndex = 1
end
object ToolButton3: TToolButton
Left = 46
Top = 2
Caption = 'ToolButton3'
ImageIndex = 2
end
end
object StatusBar1: TStatusBar
Left = 0
Top = 346
Width = 536
Height = 19
Panels = <>
SimplePanel = False
end
object Panel1: TPanel
Left = 0
Top = 29
Width = 185
Height = 317
Align = alLeft
BevelOuter = bvNone
Caption = 'Panel1'
TabOrder = 2
object Splitter2: TSplitter
Left = 0
Top = 97
Width = 185
Height = 3
Cursor = crVSplit
Align = alTop
Color = clRed
ParentColor = False
end
object ListBox1: TListBox
Left = 0
Top = 0
Width = 185
Height = 97
Align = alTop
ItemHeight = 13
TabOrder = 0
end
object FileListBox1: TFileListBox
Left = 0
Top = 100
Width = 185
Height = 217
Align = alClient
ItemHeight = 13
TabOrder = 1
end
end
object PageControl1: TPageControl
Left = 188
Top = 29
Width = 348
Height = 317
Align = alClient
TabOrder = 3
end
object MainMenu1: TMainMenu
Left = 184
Top = 24
object test1: TMenuItem
Caption = 'test'
end
end
end

//pas
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
FileCtrl, StdCtrls, ExtCtrls, ComCtrls, ToolWin, Menus;

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
test1: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
StatusBar1: TStatusBar;
Panel1: TPanel;
PageControl1: TPageControl;
Splitter1: TSplitter;
ListBox1: TListBox;
FileListBox1: TFileListBox;
Splitter2: TSplitter;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

end.
 
来晚了,让hupeh给答了。:(
 
几个Align属性可搞定。
 
to hupeh:
我按照你说的做了,但是还有问题没有弄懂:
1、我的form上应该有几个panel?给我的感觉是,如果把三个控件放在一个panel里,那么
按照你说的对齐属性就会有冲突:filelistbox和pagecontrol都为alclient,肯定有一个把
另一个给盖住了。
2、如果一个panel上放左边的两个,另一个panel上放右边的pagecontrol,那问题的关键就
在于这两个panel的align属性了。怎么样设置才能让两个panel随form的大小改变而变化呢?
 
哇!真的搞定了,谢谢大家!!!!!!!!!!!!
 
这是界面布局的技巧了你要多用才会熟练
如果你还有什么问题可到http://delphi.ok100.net去问吧
 
后退
顶部