控件 在 设计期如何隐藏. 救命 看了半天了 vcl 代码 也不每有看董 (100分)

  • 主题发起人 主题发起人 chshanghai
  • 开始时间 开始时间
C

chshanghai

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个 带 treeview 的 combox 控件
但我不知 在设计期 如何隐藏 treeview

像 combox 如何隐藏 listbox 的
 
把编译之后的东东拿去用,不就可以隐藏了吗?
 
我是说隐藏 treeview 这个对象 不是隐藏代码

就是 像 combobox 一样
combobx 其实有三个对象组成
tbutton, tedit, tlistbox
但你添加一个 combobox 时 窗体上只显示 tbutton, 和 tedit
tlistbox 是不显示的 我以为 可以通过 visible :=false 来实现 但在 设计 期
visible 是每有用的.
我这样说你门明白了吗?
 
每有人顶 , 我顶
 
treeview的parent设为combox
 
to 碧血剑
我设了, 但是不行

我贴出员码

unit u_treelist;

interface

uses
{$IFDEF WIN32}Windows,{$ELSE}Winprocs,{$ENDIF}
Messages, SysUtils, Classes, Graphics, Controls, Forms,
StdCtrls,ComCtrls,ExtCtrls,Buttons;
type
tlisttree = class(TCustomEdit)

private
Fbutton:tspeedbutton;
ftreeview:ttreeview;
procedure SetbuttonPosition;
protected
procedure createwnd; override;
procedure SetParent(AParent: TWinControl); override;
procedure Notification(AComponent: TComponent;
Operation: TOperation);override;

public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); override;
procedure addbutton;
end;


procedure Register;
implementation
{tlisttree}
constructor tlisttree.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
addbutton;
end;
destructor tlisttree.Destroy;
begin
inherited destroy;
end;
procedure tlisttree.createwnd;

begin
inherited createwnd;
with fbutton do begin
caption:='▼';
// visible:=false
end;

end;

procedure tlisttree.addbutton ;
begin
Fbutton:=tspeedbutton.Create(self);
Fbutton.FreeNotification(Self);
ftreeview:=ttreeview.Create(self);
ftreeview.FreeNotification(self);
end;


procedure tlisttree.SetParent(AParent: TWinControl);
begin
inherited setparent(aparent);
if fbutton<>nil then begin
fbutton.Parent :=aparent;
fbutton.Visible :=true;
end;
if ftreeview<>nil then begin
ftreeview.Parent :=aparent;
ftreeview.Visible :=false;
end;

end;
procedure Tlisttree.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (AComponent = Fbutton) and (Operation = opRemove) then
Fbutton := nil;
if (AComponent = Ftreeview) and (Operation = opRemove) then
Ftreeview := nil;


end;
procedure tlisttree.SetbuttonPosition ;
var
P: TPoint;
begin
if fbutton<>nil then
Fbutton.SetBounds(left+width,top,fbutton.Width,height);
if ftreeview<>nil then
Ftreeview.SetBounds(left,top+height,Width,20);

end;

procedure tlisttree.SetBounds;
begin
inherited SetBounds(ALeft, ATop, AWidth, AHeight);
SetbuttonPosition;
end;








(************************************)

{***************************************************************************}
procedure Register;
begin
RegisterComponents('myvcl', [tlisttree]);


end;

end.


 
我记不太清楚是否有这个:
在Create(AOwner:TComponent)中:ControlStyle:=ControlStyle+[csInvisibleDesign];
不知道是不是有这个风格:设计器不可见。请看一下关于TControlStyle这个集合中是否有
 
<<就是 像 combobox 一样
<<combobx 其实有三个对象组成
<<tbutton, tedit, tlistbox
<<但你添加一个 combobox 时 窗体上只显示 tbutton, 和 tedit
<< tlistbox 是不显示的 我以为 可以通过 visible :=false 来实现 但在 设计 期
<,visible 是每有用的.
<<我这样说你门明白了吗?
你看一下TComBox源代码,怎么会有TButton、TEdit、TListBox对象组成呢。
TCustomComboBox = class(TWinControl)
private
FItems: TStrings;
FCanvas: TCanvas;
FCharCase: TEditCharCase;
FSorted: Boolean;
FStyle: TComboBoxStyle;
FItemHeight: Integer;
FMaxLength: Integer;
FDropDownCount: Integer;
FEditHandle: HWnd;
FListHandle: HWnd;
FEditInstance: Pointer;
FListInstance: Pointer;
FDefEditProc: Pointer;
FDefListProc: Pointer;
FIsFocused: Boolean;
FFocusChanged: Boolean;
FSaveItems: TStringList;
FSaveIndex: Integer;
FDroppingDown: Boolean;
FOnChange: TNotifyEvent;
FOnDropDown: TNotifyEvent;
FOnDrawItem: TDrawItemEvent;
FOnMeasureItem: TMeasureItemEvent;
procedure AdjustDropDown;
 
ndKeler 说的是对的 发分
 
接受答案了.
 
你再create里面创建treeview 就行了

 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部