我有一个基于TPanel的自定义组件。目的是在顶部显示一个所谓的“标题区域”,它显示一个标题并具有可自定义的边框和背景颜色。它工作正常,除了一个小问题:在设计时,点击“标题区”时, 未选择组件(不显示蓝色项目符号),这意味着我无法拖动或修改组件的属性。如果我在“标题区域”外单击,则选择该组件。任何人都可以为此解决问题吗?提前致谢。遵循简短的描述性图像:
答案 0 :(得分:5)
对于标题面板集(例如):
constructor TMyTitlePanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle - [csAcceptsControls] + [csNoDesignVisible];
end;
另一种选择是使用SetSubComponent(True)
作为标题面板:https://stackoverflow.com/a/9479909/937125
答案 1 :(得分:1)
我认为这是IDE的一个错误.. 我测试了这个单元,它按预期工作(使用子组件):
unit uMyPanel;
interface
uses
System.SysUtils, System.Classes,
Vcl.Controls, Vcl.ExtCtrls, WinApi.Messages;
type
TMyPanel = class(TPanel)
private
{ Private declarations }
FSubPanel: TPanel;
procedure WMWindowPosChanged(var Message: TWMWindowPosChanged);
message WM_WINDOWPOSCHANGED;
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TMyPanel]);
end;
{ TMyPanel }
const
FSubPanelHeight = 30;
constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited;
FSubPanel := TPanel.Create(Self);
FSubPanel.Parent := Self;
FSubPanel.Width := Width;
FSubPanel.Height := FSubPanelHeight;
FSubPanel.Caption := 'Title';
FSubPanel.Color := $00F4EBE2;
FSubPanel.Font.Color := $00B68C59;
Caption := '';
ShowCaption := False;
Height := 100;
Color := $00F4EBE2;
end;
destructor TMyPanel.Destroy;
begin
if Assigned(FSubPanel) then
FSubPanel.Destroy;
inherited;
end;
procedure TMyPanel.WMWindowPosChanged(var Message: TWMWindowPosChanged);
begin
inherited;
FSubPanel.Width := Width;
end;
end.
如果这个组件TMyPanel
在你的delphi IDE中有同样的问题..那么它可能是一个bug,因为这个组件是用XE3测试的,我没有遇到过这个问题。
注意:这只是一个测试..你应该做@Sir Rufo建议的那些。