- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个面板控件,允许用户最小化面板并隐藏该面板上的组件。单个 THidePanel 似乎可以按预期工作,但当我将其中两个放在由拆分器分隔的表单上时,则不然。第一个面板对齐 alLeft;第二个面板alClient:
当单击第二个面板的按钮时,它不会做出最小化或最大化的 react 。这是我的全部代码。为什么不起作用?
const
BoarderSize = 20;
type
TButtonPosition = (topleft, topright, buttomleft, buttomright);
///
/// a panel with a smaller panel inside and a button on the side
///
THidePanel = class(TPanel)
private
{ Private-Deklarationen }
///
/// a smaller working panel
WorkingPanel: TPanel;
FLargeHight: Integer;
FLargeWidth: Integer;
FActivateButton: TButton;
FExpandState: Boolean;
FButtonPosition: TButtonPosition;
FOnActivateBtnClick: TNotifyEvent;
procedure SetButtonPosition(const Value: TButtonPosition);
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
constructor create(aOwner: TComponent); override;
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
procedure HideComponents;
procedure H_ActivateButtonClick(Sender: TObject);
procedure SetState(astate: Boolean);
procedure free;
destructor destroy; override;
published
{ Published-Deklarationen }
property OnActivateButtonClick: TNotifyEvent read FOnActivateBtnClick
write FOnActivateBtnClick;
property ButtonPosition: TButtonPosition read FButtonPosition
write SetButtonPosition;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [THidePanel]);
end;
{ THidePanel }
constructor THidePanel.create(aOwner: TComponent);
begin
inherited;
WorkingPanel := TPanel.create(self);
WorkingPanel.Caption := 'V01';
FActivateButton := TButton.create(self);
FActivateButton.Parent := self;
FActivateButton.Caption := '<';
FActivateButton.OnClick := H_ActivateButtonClick;
FActivateButton.Width := BoarderSize;
FActivateButton.Height := BoarderSize;
WorkingPanel.Caption := '';
FLargeWidth := self.Width;
SetButtonPosition(topright);
end;
destructor THidePanel.destroy;
begin
inherited;
end;
procedure THidePanel.free;
begin
inherited;
WorkingPanel.free;
FActivateButton.free;
end;
procedure THidePanel.HideComponents;
var
i: Integer;
begin
for i := 0 to WorkingPanel.ControlCount - 1 do
WorkingPanel.Controls[i].Visible := False;
end;
procedure THidePanel.WMSize(var Msg: TWMSize);
begin
/// set inner panel size
WorkingPanel.Top := self.Top + BoarderSize;
WorkingPanel.Left := self.Left + BoarderSize;
WorkingPanel.Width := self.Width - 2 * BoarderSize;
WorkingPanel.Height := self.Height - 2 * BoarderSize;
/// move button
SetButtonPosition(FButtonPosition);
end;
procedure THidePanel.H_ActivateButtonClick(Sender: TObject);
begin
/// button is clicked!
///
FExpandState := not FExpandState;
SetState( FExpandState );
///
if (Assigned(FOnActivateBtnClick)) then
FOnActivateBtnClick(self);
end;
procedure THidePanel.SetButtonPosition(const Value: TButtonPosition);
begin
FButtonPosition := Value;
case FButtonPosition of
topleft:
begin
FActivateButton.Left := 0;
FActivateButton.Top := 0;
end;
topright:
begin
FActivateButton.Left := self.Width - BoarderSize;
FActivateButton.Top := 0;
end;
buttomleft:
begin
FActivateButton.Left := 0;
FActivateButton.Top := self.ClientWidth - BoarderSize;
end;
buttomright:
begin
FActivateButton.Top := self.ClientWidth - BoarderSize;
FActivateButton.Left := self.Width - BoarderSize;
end;
else
/// never go here
end;
end;
procedure THidePanel.SetState(astate: Boolean);
begin
if astate then
begin
/// ...
FActivateButton.Caption := '>';
self.Width := BoarderSize;
end
else
begin
/// ...
FActivateButton.Caption := '<';
self.Width := FLargeWidth;
end;
end;
最佳答案
当 Control 的 Anchors 设置为 alClient 时,您无法更改大小。
将第二个面板对齐设置为 alLeft 或 alRight 。如果您想使用此控件填充表单,请设置表单的AutoSize True
或在调整大小时手动设置控件的最大尺寸。
关于delphi - 为什么我的尺寸更改控件在与 TSplitter 共享窗体时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856305/
我正在使用启用了 VCL 样式的 Delphi,并且我想更改我的表单的 TSplitter 的颜色。我覆盖TSplitter.Paint在插入器类中绘制比默认 VCL 样式更深的颜色 cBtnFace
我有以下面板结构 从代码中我需要根据右侧、底部或左侧的情况对齐底部面板。将拆分器向右和底部对齐不会造成问题,但将拆分器向左对齐我做不到 负责面板和分离器对齐的代码 procedure TForm1.a
我有一个对话框,其布局如下: --------------------------------------------- |
我正在编写一个面板控件,允许用户最小化面板并隐藏该面板上的组件。单个 THidePanel 似乎可以按预期工作,但当我将其中两个放在由拆分器分隔的表单上时,则不然。第一个面板对齐 alLeft;第二个
我正在使用此链接 TSplitter enhanced with grab bar 中发布的代码,在分割器控件中绘制抓取栏, procedure TSplitter.Paint; var R: T
我有一个包含三个部分的表单,我希望允许用户根据需要调整它们的大小 左侧有一个部分(占据整个高度),右侧有一个部分又被垂直切成两部分。见下文: 11|22 11|--- 11|33 使用一个分离器非常简
我正在使用一组现有的 TControl 设计一个新的 VCL 组件。控件放置在 TPanels 上,一些对齐到左侧位置,一个对齐到右侧位置,最后一个对齐到客户区。每个面板都有自定义组件作为其父级。 我
检查下面的图片! 如何在 TPageControl 内的两个 TGroupBox 之间放置 TSplitter? 我还尝试将 TGroupBox 包装在 TPanels 中,并将 TSplitter
其中包括一个演示我的问题的小项目。我有一个与主窗体对齐的TPageControl。在两个选项卡中的每一个上,我都有客户端对齐的面板。在每个面板上我都有 2 个子面板和一个分离器。左侧面板和分离器向左对
我有这种情况(见图),现在当我搬家时Splitter1在运行时启动,Panel2高度也随之增长Form1高度增长。 但我需要知道并阻止此类事件,当 Splitter1无法向上移动,因为 Panel1.
我是一名优秀的程序员,十分优秀!