我有一个TFrame后代,它有一个相当大的面板,它是第三方组件(TLMDSimplePanel))。该面板上的大小调整很好,但我希望它包含的框架在用户更改面板大小时动态调整大小。 (面板上有一个小尺寸拇指夹,用户只需单击并用鼠标拖动即可。)
此框架的代码如下:
unit SizeableFrame;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TcmBaseFrameFrame, LMDCustomControl, LMDCustomPanel, LMDCustomBevelPanel,
LMDSimplePanel, StdCtrls;
type
TcmSizeableFrame = class(TcmBaseFrame)
LMDSimplePanel1: TLMDSimplePanel;
Memo1: TMemo;
Memo2: TMemo;
procedure LMDSimplePanel1Resize(Sender: TObject);
procedure FrameCanResize(Sender: TObject; var NewWidth, NewHeight: Integer;
var Resize: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
cmSizeableFrame: TcmSizeableFrame;
implementation
{$R *.dfm}
procedure TcmSizeableFrame.FrameCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
inherited;
Resize := True;
end;
procedure TcmSizeableFrame.LMDSimplePanel1Resize(Sender: TObject);
const
ExpandByPixels = 60;
var
MyFrame : TFrame;
begin
inherited;
Self.Height := LMDSimplePanel1.Height + ExpandByPixels;
Self.Width := LMDSimplePanel1.Width + ExpandByPixels;
end;
end.
如果用户缩小框架的大小,它的效果非常好,但是如果他们试图将其拉伸到大于原始边界的范围,那么他们只能将其扩展为出现的内容是其原始大小+ ExpandByPixels,之后用户无法继续将其流畅地拖动到更大的大小。
如果它们停止,然后再次单击并拖动尺寸夹点,则可以将它拖出更大的尺寸,但同样也会以相同的方式约束(当前尺寸+ ExpandByPixels =外边界)。他们可以无休止地重复这个循环,将框架扩展到任何尺寸,但在一次鼠标移动中不会流畅,这就是我想要的。
我已经针对TForm后代测试了同样的问题,并且得到了相同的症状。
我在这里缺少什么?
提前感谢您提供任何帮助。 : - )
答案 0 :(得分:4)
您是否尝试将Frame.Autosize设置为true?
或者您需要在鼠标移动时调整框架的大小。这样包含的对象可以在容器边界内扩展。
更新:一些简单的代码,与普通的TPanel配合使用,可以横向调整大小......
type
TFrame5 = class(TFrame)
Panel1: TPanel;
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure Panel1Resize(Sender: TObject);
end;
implementation
{$R *.dfm}
procedure TFrame5.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
with Sender as TPanel do
if ssLeft in Shift then
begin
Width := X;
end;
end;
procedure TFrame5.Panel1Resize(Sender: TObject);
begin
with Sender as TPanel do
begin
(Parent as TFrame).Width := Width + 2*Left;
end;
end;