谁能告诉我这是为什么 ?

LJHCHP 2002-07-11 08:22:34
我写了一个有checkbox的TreeView,不知道为什么它不管没有item的时候,都有水平的滚动条,这是为什么?
unit CheckBoxTreeView;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, ComCtrls, CommCtrl;

type
TCheckBoxTreeView = class(TTreeView)
private
FOldState: Boolean;
FOnNodeChecked: TNotifyEvent;
FOnNodeUnChecked: TNotifyEvent;
{ Private declarations }
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure Change(Node: TTreeNode); override;
procedure Click; override;
{ Protected declarations }
public
function IsNodeChecked(Node: TTreeNode): Boolean;
procedure SetNodeChecked(Node: TTreeNode; Checked: Boolean);
{ Public declarations }
published
property Align;
property Anchors;
property AutoExpand;
property BevelEdges;
property BevelInner;
property BevelOuter;
property BevelKind default bkNone;
property BevelWidth;
property BiDiMode;
property BorderStyle;
property BorderWidth;
property ChangeDelay;
property Color;
property Ctl3D;
property Constraints;
property DragKind;
property DragCursor;
property DragMode;
property Enabled;
property Font;
property HideSelection;
property HotTrack;
property Images;
property Indent;
property MultiSelect;
property MultiSelectStyle;
property ParentBiDiMode;
property ParentColor default False;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly;
property RightClickSelect;
property RowSelect;
property ShowButtons;
property ShowHint;
property ShowLines;
property ShowRoot;
property SortType;
property StateImages;
property TabOrder;
property TabStop default True;
property ToolTips;
property Visible;
property OnAddition;
property OnAdvancedCustomDraw;
property OnAdvancedCustomDrawItem;
property OnChange;
property OnChanging;
property OnClick;
property OnCollapsed;
property OnCollapsing;
property OnCompare;
property OnContextPopup;
property OnCreateNodeClass;
property OnCustomDraw;
property OnCustomDrawItem;
property OnDblClick;
property OnDeletion;
property OnDragDrop;
property OnDragOver;
property OnEdited;
property OnEditing;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnExpanding;
property OnExpanded;
property OnGetImageIndex;
property OnGetSelectedIndex;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
{ Items must be published after OnGetImageIndex and OnGetSelectedIndex }
property Items;
{ Published declarations }
property OnNodeChecked: TNotifyEvent read FOnNodeChecked write FOnNodeChecked;
property OnNodeUnChecked: TNotifyEvent read FOnNodeUnChecked write FOnNodeUnChecked;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TCheckBoxTreeView]);
end;

{ TCheckBoxTreeView }

procedure TCheckBoxTreeView.Change(Node: TTreeNode);
begin
inherited Change(Node);
FOldState := IsNodeChecked(Node);
end;

procedure TCheckBoxTreeView.Click;
var
NewState: Boolean;
begin
inherited Click;
NewState := IsNodeChecked(Self.Selected);
if NewState = FOldState then Exit;
if (NewState) and Assigned(FOnNodeChecked) then FOnNodeChecked(self)
else if (not NewState) and Assigned(FOnNodeUnChecked) then
FOnNodeUnChecked(self);
end;

procedure TCheckBoxTreeView.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style:=Params.Style or TVS_CHECKBOXES;
end;

function TCheckBoxTreeView.IsNodeChecked(Node: TTreeNode): Boolean;
const
TVIS_CHECKED = $2000;
var
TvItem :TTVItem;
begin
Result := False;
if Node = nil then Exit;
TvItem.Mask := TVIF_STATE;
TvItem.hItem := Node.ItemId;
TreeView_GetItem(Node.TreeView.Handle, TvItem);
Result := (TvItem.State and TVIS_CHECKED) = TVIS_CHECKED;
end;

procedure TCheckBoxTreeView.SetNodeChecked(Node: TTreeNode;
Checked: Boolean);
const
TVIS_CHECKED = $2000;
var
TvItem: TTVItem;
begin
FillChar(TvItem, SizeOf(TvItem), 0);
with TvItem do begin
hItem := Node.ItemId;
Mask := TVIF_STATE;
StateMask := TVIS_STATEIMAGEMASK;
if Checked then
TvItem.state := TVIS_CHECKED
else
TvItem.state := TVIS_CHECKED shr 1;
TreeView_SetItem(Node.TreeView.Handle, TvItem);
end
end;

end.
...全文
42 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxpbuaa 2002-07-11
  • 打赏
  • 举报
回复
这是使用了TVS_CHECKBOXES的问题。如果一定要去掉横向滚动条,可以用ShowScrollBar(TCheckBoxTreeView.Handle,SB_HORZ,false);

—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
I.Maxim := MaximStr;
I.Explain := '可用分不够可以给我发短消息';
I.Desire := '加不加分随你';
—————————————————————————————————

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧