做几个小图标,根据状态来切换,很容易的
解决方案 »
- 请教:cxgrid中的数据替换显示问题。
- 高手请帮忙,在delphi中怎样使用namespase?是否可以避免命名冲突?
- ?????如何设置图元属性?????
- 各位,帮帮忙
- sql server问题。
- delphi 中OLE打印加页眉
- 忽然联系到了小学同校,初中高中同班的同学。可她没有QQ,谁能送我一个?
- 100分的问题,请教我
- Delphi2010报“内存不足”,本质解决办法
- 这是小第的处女作品构想,但很多问题有望大家指教,希望大家看看
- 哪有好的SQL语言教程的电子版下载?
- 对.wav文件的处理,要将格式为16位、44k的采样率、双声道的wav文件转化为8位、8k的采样率、单声道的wav文件。不用工具处理因为我要大量处
Node: TfcTreeNode; Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
//0:没有选,1:灰,2:选中,3:只读
var
node1,pnode,ppNode:TfcTreenode;
i,j:integer;
AllCheck,AllNotCheck:boolean;
myhittest:tfchittests;
begin
if IsFinished then exit;
IsFinished:=true;
Tree1.AutoExpand:=False;
myhittest:=Tree1.gethittestinfoat(X,Y);
if not (fchtonitem in myhittest) then
exit; Node:=tree1.GetNodeAt(X,Y);
Node.Selected:=True;//node.Selected:=true ;
//----------------处理该节点有子节点,则只有1\2两种状态------------
//--------------------若没有子节点,则有0\2两种状态---------------
if node.HasChildren then
begin
if node.ImageIndex=2 then
begin
node.ImageIndex :=0;
Node.SelectedIndex :=0;
end else if node.ImageIndex=0 then
begin
Node.ImageIndex := 2;
Node.SelectedIndex :=2;
end else if Node.ImageIndex =1 then
begin
Node.ImageIndex := 0;
Node.SelectedIndex :=0;
end;
PTreeRec(node.Data).Modified:=true;
end
else
begin
if Node.ImageIndex =2 then
begin
node.ImageIndex :=0 ;
node.SelectedIndex :=0;
end else if Node.ImageIndex = 0 then
begin
Node.ImageIndex := 2;
Node.SelectedIndex := 2;
end ;
PTreeRec(node.Data).Modified:=true;
end;//-----------处理上一级选,下面各级都选----------
//-----------上一级不选,下面各级都不选----------
if node.HasChildren then
begin
node1:=node.GetLastChild ;
while node1<> nil do
begin
j:=node1.AbsoluteIndex ;
node1:=node1.GetLastChild ;
end;
for i:=node.AbsoluteIndex to j do
begin
if node.ImageIndex=2 then begin
Tree1.Items[i].ImageIndex :=2;
Tree1.Items[i].SelectedIndex :=2
end
else if node.ImageIndex=0 then begin
Tree1.Items[i].ImageIndex:=0;
Tree1.Items[i].SelectedIndex:=0;
end
else if node.ImageIndex=1 then begin
Tree1.Items[i].ImageIndex:=0;
Tree1.Items[i].SelectedIndex:=0;
end;
PTreeRec(node.Data).Modified:=true;
end;
end;
//-----------处理子节点中有空,父节点必须为灰的情况---------------//--------------------------只处理三层菜单-------------------------------
if node.Level =2 then //如果有子结点
begin
Allcheck:=true;
Allnotcheck:=true;
Pnode:=node.parent;
for i:= 0 to Pnode.Count -1 do
begin
if Pnode.item[i].ImageIndex <> 2 then
Allcheck:=false;
if Pnode.Item[i].ImageIndex <> 0 then
Allnotcheck:=false;
end;
if Allcheck then
begin
Pnode.ImageIndex :=2;
Pnode.SelectedIndex :=2;
end
else if Allnotcheck then
begin
Pnode.ImageIndex :=0;
Pnode.SelectedIndex :=0;
end
else begin
Pnode.ImageIndex :=1;
Pnode.selectedindex:=1;
end;
PTreeRec(node.Data).Modified:=true;
end; if node.Level=3 then
begin
Allcheck:=true;
Allnotcheck:=true;
pNode:=node.Parent ;
ppNode:=pNode.Parent ; for i:= 0 to Pnode.Count -1 do
begin
if Pnode.item[i].ImageIndex <> 2 then
Allcheck:=false;
if Pnode.Item[i].ImageIndex <> 0 then
Allnotcheck:=false;
end; if Allcheck then
begin
Pnode.ImageIndex :=2;
Pnode.SelectedIndex :=2;
end
else if Allnotcheck then
begin
Pnode.ImageIndex :=0;
Pnode.SelectedIndex :=0;
end
else begin
Pnode.ImageIndex :=1;
Pnode.selectedindex:=1;
end; Allcheck:=true;
Allnotcheck:=true;
for i:= 0 to PPnode.Count -1 do
begin
if PPnode.item[i].ImageIndex <> 2 then
Allcheck:=false;
if PPnode.Item[i].ImageIndex <> 0 then
Allnotcheck:=false;
end; if Allcheck then
begin
PPnode.ImageIndex :=2;
PPnode.SelectedIndex :=2;
end
else if Allnotcheck then
begin
PPnode.ImageIndex :=0;
PPnode.SelectedIndex :=0;
end
else begin
PPnode.ImageIndex :=1;
PPnode.selectedindex:=1;
end;
PTreeRec(Ppnode.Data).Modified:=true; //如果改变了, 节点改变标志
//--------------------以上pnode的节点逻辑上, 多个情况不能表达清楚,全部改变状态--------
end;
node.Selected:=false;
// tree1.Refresh;
// bbtnApply.Enabled:=true;
end;