RT
解决方案 »
- delphi与网页相互传值的问题。
- 怎么实现 弹出菜单TPopupMenu,在 鼠标右键点击弹出时,无论在什么位置点都是向上弹出。
- ●●●请推荐好点的收费空间●●●
- 如何将ComboBox的Items与数据表中的某一字段中的值绑定
- 请问往数据库里添加,删除修改数据的代码怎么写?一般我都用DBNavigator的,这次我用buttens了。
- 如何才能获得文件的扩展名?
- 请问各位大大在delphi6中怎么动态创建数据表?
- 通过递归生成树图,速度很慢,有何办法
- 前台系统和后台系统是怎么区分的?
- delphi 运行发现list index out of bound(17)
- delphi 线程 access violation at address
- 为什么程序正在运行时,iamge不能显示动画?
用这个构建复选框的:
SetWindowLong(GroupTree.Handle, GWL_STYLE, GetWindowLong(GroupTree.Handle, GWL_STYLE) or $00000100);
var
vTVItem: TTVItem;
Template:integer;
begin
Result := False;
if not Assigned(mTreeNode) or not Assigned(mTreeNode.TreeView) then Exit;
vTVItem.mask := TVIF_STATE;
vTVItem.hItem := mTreeNode.ItemId;
TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem);
if not TreeView_GetItem(mTreeNode.TreeView.Handle, vTVItem) then Exit;
vTVItem.stateMask := TVIS_STATEIMAGEMASK;
vTVItem.state := IndexToStateImageMask(Succ(Ord(mChecked)));
Result := TreeView_SetItem(mTreeNode.TreeView.Handle, vTVItem);
end; { TreeNodeSetChecked }
procedure TFrmMain.DOYNChecked(Node: TTreeNode; isChecked: Boolean; CoustomTreeView:TTreeView);//操作节点是否被checkd
var
item:TTVItem;
begin
// FrmExplain.Memo1.Lines.Append(inttostr(Node.AbsoluteIndex));
item.mask:=TVIF_HANDLE;
item.hItem:=CoustomTreeView.Items[Node.AbsoluteIndex].ItemId;
TreeView_GetItem(CoustomTreeView.Handle,item);
item.mask:=TVIF_HANDLE or TVIF_STATE;
if not isChecked then
item.state:= (item.state or $1000) and (not $2000)
else
item.state:= (item.state or $2000) and (not $1000);
item.stateMask:=$ffffffff;
TreeView_SetItem(CoustomTreeView.Handle,item);
end;procedure TFrmMain.SetParentChecked(Node: TTreeNode; CoustomTreeView:TTreeView);//当子节点checked时,设置父节点应该设置的checked
begin
if Node.Parent <> nil then
begin
if isBrotherAllChecked(Node, CoustomTreeView) then
DOYNChecked(Node.Parent, True, CoustomTreeView);
SetParentChecked(Node.Parent, CoustomTreeView);
end;
end;procedure TFrmMain.SetChecked(Node: TTreeNode; Checked: Boolean);
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;
function TFrmMain.isBrotherAllChecked(Node: TTreeNode; CoustomTreeView:TTreeView): Boolean;//判断所有的兄弟节点是否已全部被checkd
var
CurChild: TTreeNode;
tmpBool: Boolean;
begin
// Node := Node.Parent;
// if Node.HasChildren then
// begin CurChild:=Node;//.GetFirstChild;
if CurChild <> nil then
begin
tmpBool := IsNodeChecked(CurChild, CoustomTreeView);
if not tmpBool then
begin
Result := False;
exit;
end;
CurChild:=Node.getNextChild(CurChild);
end;
// end;
Result := True;
end;function TFrmMain.IsNodeChecked(Node :TTreeNode; CoustomTreeView:TTreeView) :Boolean;//判断节点是否被checkd
var
item:TTVItem;
begin
item.mask:=TVIF_HANDLE;
item.hItem:=CoustomTreeView.Items[Node.AbsoluteIndex].ItemId;
TreeView_GetItem(CoustomTreeView.Handle,item);
if (item.state and $2000)=0 then
Result := False
else
Result := True;
end;procedure TFrmMain.AllChildYNChecked(Node: TTreeNode; isChecked: Boolean; CoustomTreeView:TTreeView);//操作所有的子节点是否被checkd
var
CurChild: TTreeNode;
begin
if Node.HasChildren then
begin
CurChild:=Node.GetFirstChild;
while CurChild <> nil do
begin
DOYNChecked(CurChild, isChecked, CoustomTreeView);
if CurChild.HasChildren then
begin
AllChildYNChecked(CurChild, isChecked, CoustomTreeView);
end;
CurChild:=Node.getNextChild(CurChild);
end;
end;
end;procedure TFrmMain.SetParentNOChecked(Node: TTreeNode; CoustomTreeView:TTreeView);//当子节点not checked时,设置父节点应该设置的checked
begin
if Node.Parent <> nil then
begin
// DOYNChecked(Node.Parent, False);
SetParentNOChecked(Node.Parent, CoustomTreeView);
end;
end;
procedure TFrmExplain.SetComCtlStyle(Ctl: TWinControl; Value: Integer; UseStyle: Boolean);
var
Style: Integer;
begin
if Ctl.HandleAllocated then
begin
Style := GetWindowLong(Ctl.Handle, GWL_STYLE);
if not UseStyle then Style := Style and not Value
else Style := Style or Value;
SetWindowLong(Ctl.Handle, GWL_STYLE, Style);
end;
end;
建完树后,加一句
SetComCtlStyle(TreeView1,TVS_CHECKBOXES,True);
我使用的时候发现,如果移动过一个节点后,它的选框就会消失!
不知道大家有没有遇到过这种情况,算不算bug。。