说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何给运行中生成节点的treeview控件加图标?????

编辑:说三道四文库 发布时间:2017-01-24 11:27
HTML文档下载 WORD文档下载 PDF文档下载
在运行中生成treeview的节点,然后个他们加上imagelist里面的图标,使用不相同的索引值。可是,当点击字节点的时候,图标会改变成父节点的图标,只是为什么?怎样才能使父节点和子节点有不同,且不改变的图标?
要看效果:http://www.comprg.com.cn/wz055.htm

Delphi环境下灵活的数据库树表实现 

 林琪

   我们目前正在开发的军队武器装备科技档案信息管理网络系统是面对全军的,管理全军武器装备科技档案的信息管理网络系统,由于全军在武器装备科技档案的管理模式上千变万化,对管理系统的需求也不相同,特别是,从调研的结果看:各单位的项目分类(信息分类)的级数是不定的,因此实现时一方面要考虑到通用性,另一方面也要保证用户使用的灵活性。

  

1 数据结构设计

在设计时可以采用两种数据存储方式(数据结构)。

1)信息分类表采用一个分类作为表的一条记录的方式进行存储,并由父类编号建立各类之间的关系,即:

分类号 
 类的含义 
 父类的编号 
 
0001 
 计算机 
   
 
0002 
 无线电 
   
 
… … 
 … … 
 … … 
 

2)这种分类表结构的建立不用动态生成表结构,但使用时相对麻烦。我们采用以下的表结构建立信息分类关系。这样的结构可以实现任意级的树型结构,如M层的一个结构:其中M是本单位的分类最大深度。类号要唯一识别每一个类。最上一级的分类号为全宗号+本级的分类代号,其他任意级的类其类号都为上一级的分类号+本级的分类代号。用户根据本单位档案的信息分类情况输入类信息,由系统动态创建表。

信息分类号
 全宗号
 类1含义
 类2含义
 类M含义
 分类深度
 
0001
 Zzb20
 电子
 计算机
   
 2
 
0002
 Zzb20
 电子
 无线电
   
 2
 
0003
 Zzb20
 通信
 卫星
   
   
 
0004
 Zzb20
 通信
 遥感
   
   
 
C4
 C6
 C20
 C20
 C20
 C1
 
XXFLH
 QZH
 L1
 L2
 LM
 FLSD
 

       在下面的例子中由于安全要求,对数据库表的结构作了简化,同时只使用了一些模拟数据以作说明。

  

2 树表外形设计

       由于Delphi提供的树表控件比较简单,外观不很美观,因此需要作一些“修饰”工作。为了强调重点,忽略了数据库操作如查询等,在例程中只使用了有关树表控件。

1)增加色彩

一般的树表控件没有底图,没有色彩,因此首先要解决色彩问题。解决的方法就是在树表控伯的ONDraw事件响应中增加底图显示代码。

procedure TForm1.Tree1CustomDraw(Sender: TCustomTreeView; const ARect: TRect; var DefaultDraw: Boolean);

begin

     with tree1.Canvas do                        //取树表控件的显示底板

     begin

     brush.color:=RGB(200,200,255);              //设置画笔颜色

     FillRect(ARect);                               //填充底板

 
  

     end; 

end;

这里仅为树表控件设置的底板颜色,实际上还可以设置底图,但由于底图的色彩不易控制,在调整树表结点时,容易出现颜色混乱的情况,而且只设置其颜色使树表控件的显示更加简洁。但只在ONDraw事件中设置颜色是不够的,还需要在其子项(结点)的显示事件中增加以下代码:

procedure TForm1.Tree1CustomDrawItem(Sender: TCustomTreeView;

  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);

var

 Noderect:TRect;

begin

     with tree1.Canvas do

     begin

          case Node.Level of                  //根据不同的层次,设置不同的结点字体颜色

          0:   font.Color:=clBlue;

          …

          5:   font.Color:=clGreen;

          end;

      if node=tree1.Selected then       //为突出选中的结点,将选中结点字体颜色设置为红色

          font.Color:=clRed;

          NodeRect:=Node.DisplayRect(false);              //设置结点的显示方式

          brush.Color:=RGB(200,200,255);

          fillrect(NodeRect);                         //将结点的背景色与控件底板色设置为一致

     end;

end;

      

2)设置图标

       图像列表控件与树表控件可以算是“老搭档”,即为了显示不同层次的结点就需要为树表控件设置一个对应的图像列表,其设置方法比较简单,可以参见有关的Delphi程序设计手册。由于树结构层次不定,因此不能象常规的方法那样建立了树表与图像列表之间的关系即大功告成,这里还需要做的是建立树表结点与图像列表的关系,可以通过以下两个函数实现。

procedure TForm1.Tree1GetImageIndex(Sender: TObject; Node: TTreeNode);

begin

     node.ImageIndex:=node.Level;    //由结点的层次决定其对应图标在图像列表中的位置

end;

  

procedure TForm1.Tree1GetSelectedIndex(Sender: TObject; Node: TTreeNode);

begin

     node.SelectedIndex:=node.ImageIndex;

end;

  

3)  窗体激活事件响应

响应窗体激活事件时,需要作一些设置。由于在原系统中,此窗体涉及的功能和控件较多,许多功能的完成都需要激活另外的窗体。因此需要避免对数据库信息的重复设置。可以如下实现:

procedure TForm1.FormActivate(Sender: TObject);

var

 i:integer;

begin

 if first_in=false then            //区别是否首次激活,从而决定是否需要设置初始状态

 begin

  hint.Caption := '    提示: 正在准备,请稍候...';

  application.ProcessMessages ;

  tree1.Items.Clear;                    //设置第一个树表状态和颜色

  tree1.Color:=RGB(200,200,255);

  tree2.Items.Clear;                    //设置第一个树表状态和颜色

  tree2.Color:=RGB(100,200,255);

  qznode:=nil;                         //为了显示动态结构的分类层次,将各层树结点初始化为空

  for i:=0 to 5 do

   last_node[i]:=nil;

   stackdepth:=0;                       //设置栈初始深度为0

  show_tree1(0);          //调用show_tree1显示分类内容,参数0表示从第一层开始显示

  hint.Caption:='    提示: 数据成功调入';

  Application.ProcessMessages;

  end;

    first_in:=true;        

end;

  

4)  树表内容显示

由于树表结点层次的不确定,我们采用了递归显示的方法完成树表内容的显示。这里设置了4个变量,其含义为;

变量
 类型
 含义
 可选范围
 
cur_cds
 TQuery
 当前的查询集
 dbmd.qz,dbmd.fl1,dbmd.fl2,

dbmd.fl3,dbmd.fl4,dbmd.fl5
 
cur_str
 string
 当前的查询语句
   
 
num_str
 String
 当前的层次数查询语句
   
 
cur_level
 Integer
 当前层次
   
 
cur_node
 TTreeNode
 当前结点
   
 

这里利用栈确定父结点与子结点的关系,若某结点对应的分类深度比当前深度要大,就需要将此结点入栈,并惟此结点为父结点,以插入孩子结点方式递归地显示它的下一层结点,若当前层的结点都已显示完毕,就需要退栈,回到上一层次再作计算。主要的实现过程如下:

procedure TForm1.show_tree1(level:integer);

…                //变量声明

begin

  case level of              //根据输入参数,确定当前数据集、结点和查询语句

  0:

  begin

    cur_cds:=dbmd.qz;

    cur_node:=qznode;

    cur_str:='select distinct QZH from XXFLB ';

  end;

  1:

  begin

    cur_cds:=dbmd.fl1;

    cur_str:='select distinct L1 from XXFLB ';

    cur_str:=cur_str +' where  QZH= '+''''+dbmd.qz.Fields.Fields[0].value+'''';

  end;

  …

  end;

   cur_cds.close;                              //实现查询

   cur_cds.SQL.clear;

   cur_cds.SQL.Add(cur_str);

   cur_cds.open;

       for i:=1 to cur_cds.RecordCount do                     //遍历当前层的所有结点

          begin

            if level=0 then                             //若为第一层则调用add方法创建结点

               cur_node := tree1.Items.Add(cur_node,cur_cds.Fields.Fields[0].value)

            else                //否则,在上一结点基础上调用AddChild方法创建其子结点

      cur_node:=tree1.Items.AddChild(last_node[stackdepth-1],cur_cds.Fields.Fields[0].value);

          if level<5 then            //根据当前结点层次及结点内容确定当前类的分类深度

          begin

          case level of

          0:

          begin

          num_str:='select  FLSD from XXFLB ';

          num_str:=num_str +' where  QZH= '+''''+dbmd.qz.Fields.Fields[0].value+'''';

          end;

          1:

           …

          end;

          dbmd.sd.close;                               //执行深度查询

          dbmd.sd.SQL.Clear;

          dbmd.sd.sql.add(num_str);

          dbmd.sd.Open;

          val(dbmd.sd.Fields.Fields[0].value,cur_level,code); //取其深度

           if  cur_level>level then          //若当前层次未达到其分类深度

            begin

                      last_node[stackdepth]:=cur_node;     //当前结点入栈

                      stackdepth:=stackdepth+1;

                      show_tree1(level+1);                       //递归显示下一层次结点

             end;

           end;

           cur_cds.Next;          //取当前结果集中的下一条记录

           if i > cur_cds.RecordCount -1  then            //若当前层中全部记录显示完毕则退栈

                stackdepth:=stackdepth-1;

          end;

 
  

end; 

       另外第二个树表的内容显示的基本方法与此类似,所不同的是第二个树表的显示函数所带的参数为串型参数,该参数有两种可能,即为‘’或由点击第一个树表的事件产生串参数。若参数为空串,则要在第二个树表中显示所有项目,否则要根据参数创建过滤条件选择显示项目。具体方法可以参见源代码。

  

5)  树表调整

 
  

树表的调整即是对树表当前结点的条件,可以由两种事件产生,即树结点的扩展和点击树结点。由于一个全宗号下的分类种类很多,层次也可能很大,因此用户希望打开一个类时,与其无关的类就关闭,这样就可以保证仅有目前所选择的结点,而不需要用户利用滚动条在打开的结点中寻找。其实现要充分利用树结点的方法和属性。特别强调的是在对点击树表结点的响应事件中用到了结点的扩展方法,尽管对结点扩展事件的响应函数所实现的功能与之类似,但一定不能加入类似的结点扩展方法,如tree1.Selected.Expand(false)等,因为在扩展事件中调用扩展方法会导致事件循环,甚至死机。 

对第二个树表的调整与第一个树表的处理方式类似,但功能不同,这里不多介绍。

procedure TForm1.Tree1Click(Sender: TObject);

…                 //变量声明

begin

 if Tree1.Selected=nil then                  //若未选择结点,重置

 begin

   tree2.Items.Clear;

   tree2.Refresh;

   exit;

 end

 else

 begin

    tree2.Items.Clear;

    tree2.Refresh;

     str:=Tree1.Selected.Text;                   //取当前结点内容

     fatherNode:=Tree1.Selected.Parent;    //取当前结点父结点

     tempnode:=Tree1.Selected;                //设置当前结点

     while fatherNode<>nil do                  //由当前层开始关闭所有非当前结点,

//同时返回由其第一层祖先到当前结点所组成的串,作为第二个树表显示的参数。

      begin

           str:=fatherNode.Text+','+str;          //取父结点内容与当前结点内容联接

           usenode:=fatherNode.getFirstChild; //遍历父结点的所有儿子结点

           while usenode<>nil do

           begin

                if usenode<>tempnode then          //只要不是当前结点,则取消扩展状态

                   usenode.Collapse(true);

                usenode:=fatherNode.GetNextChild(usenode);

           end;

           tempnode:=fathernode;    //当前层结点处理完毕后,调整父结点为当前结点

           fathernode:=tempnode.Parent; //再取当前结点的父结点

      end;

      sibNode:=tree1.Items[0];          // 第一层结点的处理与其它层稍有差异

      while  sibNode<>nil do

      begin

        if  sibNode<>tempNode then

          sibNode.Collapse(true);

      sibNode:=sibNode.getNextSibling;

      end;

      tree1.Selected.Collapse(true);           //强制打开当前结点

      tree1.Selected.Expand(false);

      if tree1.Selected.HasChildren=false then   //若当前结点无孩子,

      begin

        show_tree2(str); //说明已构成一个完整的类,调用show_tree2函数实现第二个树表//的内容显示,参数str为完整的类名

        hint.Caption:='    提示: 数据成功调入';

        Application.ProcessMessages;

  end;

 end;

  

参考文献

1 徐新华,IDE和Object Pascal 语言,人民邮电出版社,1998.12 

2 郑城荣,曾凡奎等,Delphi 运行时间库RTL和组件库VCL技术参考,人民邮电出版社,1999.1 

1 徐新华,GUI编程技术,人民邮电出版社,1998.12
非常感谢!!!!
在你的treeview控件的Onchange事件中:
  if youttv.Selected<>nil then
    youttv.Selected.SelectedIndex:=youttv.Selected.ImageIndex;
即可保证图标不变。
treeview中的点有stateindex是选中后的图标值,你一定没改,所以是默认值,而你父图标可能也是默认值,所以一样了,你只要在生成子node 时同时设置imageindex和stateindex就可以了
拦截消息处理过程-Delphi资料 利用API函数开发DELPHI程序三例 利用Hook技术实现键盘监控-Delphi资料 利用浏览窗口 DragDrop 任意文件-Delphi资料 利用未公开函数实现Shell操作监视-Delphi资料 妙用Delphi的标识号 判断Windows类型和版本-Delphi资料 判断一个程序是否dos版本:-Delphi资料 屏蔽系统按键-Delphi资料 屏幕抓字技术揭密(转载)-Delphi资料 启动控制面板-Delphi资料 取得系统所有窗口的方法-Delphi资料 全部窗体可使用鼠标点中移动-Delphi资料 让图像旋转-Delphi资料 热启动控制-Delphi资料 如果隐藏和显示Windows的任务条-Delphi资料 如何把文件删除到回收站中-Delphi资料 如何从任务栏上隐藏应用程序的按纽?-Delphi资料 如何得到Windows 的temp路径-Delphi资料 如何得到WINDOWS的SYSTEM路径-Delphi资料 如何得到上一个激活的组件-Delphi资料 如何得到系统目录-Delphi资料 如何得到执行程序的当前路径-Delphi资料 如何访问一个进程的内存空间-Delphi资料 如何关CD机的门?-Delphi资料 如何关闭外部开启的应用程序-Delphi资料 如何获得系统内存的有关信息?-Delphi资料 如何获取硬盘的ID-Delphi资料 如何检查软驱中的软盘和光驱的光盘是否发生变化。-Delphi资料 如何检查一个驱动器是否就绪?并且不出现错误信息-Delphi资料 如何将Wav文件做到EXE文件里-Delphi资料 利用SHAppBarMessage是否不能直接制作自动隐藏的工具栏的?? OleServer错误! 选中LISTBOX的ITEM的时候触发的是什么事件? 抢分问题,如何把一个TStream存入数据库中的某个字段里? 快,能者不难,难者不能 急寻数值计算类软件---(如水质模拟)!!! 怎样取得CEditView中所显示的文字啊? 告诉我好么! 在线程中可使用回调函数吗? Socket里面ShutDown和Close函数分别有什么作用? CBC和VC相比好在哪里?CBC也能调用一切API,相比之下VC简直不能做数据库.但为什么就是招VCVB的比招CBC的多? wwwunix(木易)大侠请来令分。多谢你的帮助。 :) 下载文件夹的选择 立早在不在,还你分~~~~~~~~~~~~~~~~~ widlcatbb领分 请问做数据库开发 外面招人用VB的多还是用Delphi cbc的多?到底哪个好? 在flash中如何将色块转为线条模式? 我的电脑启动后不断运行超级解霸,不知怎么回事? 请问做数据库开发 外面招人用VB的多还是用Delphi cbc的多?到底哪个好?? QQ号码被盗,请各位大虾救命啊.高分送上. 请高手帮忙!!!!!!!!!!!!!!!!! 复合数据窗口如何存为HTML文件? :请问做数据库开发 外面招人用VB的多还是用Delphi cbc的多?到底哪个好??VB的优势在哪里? 我用Table连接Access 数据库,程序运行时出现 Database Login窗口,它是干什么的? flash中如何将色块转为线条模式? 是一个什么样的标签! 送分!!!!!!vb基础疑难! 这段程序中的SETFILTER()在没有事务对象和数据对象没有连接就可以用该函数吗?见内地的程序 关于postmessage 绿茶兄,你能告诉我你的QQ号吗? 我的为14588854 【 jinesc(杂牌军司令)(杂牌军是人民军队)接着! 】 请问:好的搜索引擎有那些?有没有新的上传思路? 考中程需要看哪些书? c/s模式的系统是什么样的概念,具体如何实现 关于vc调用调用CView的问题? 用jsp 使用sqlserver还是mysql与ODBC/JDBC连接哪个更方便? 大家好!请各位帮我参考一下学java应该用那种开发工具最好呀?谢谢!! 关于FTP代理服务器 为什么会出现闪屏现象 请问reportbuild6是否支持ado呢? 奇怪的SetWindowPos!知情者请进 【 jinesc(杂牌军司令)(杂牌军是人民军队)你的贴呢? 】 如果我在查看中添加绘图工具栏,如何才能显示/隐藏绘图工具栏菜单? 我在SCO UNIX5.0.6中设置显卡的显示效果为800 * 600 & 64Kcolor , 但是... 请问怎样固定窗体在屏幕上的位置,用鼠标不能拖动?谢! 我没有学过basec能不能学vb呢? 怎么这么多4月份的贴子UP上来的?那么旧的贴子大家就不要再UP啦 ,,,,,,,,,,,,楼上楼下的姑娘们,出来接招了,,,,,,,,,关于reasle版本多线程不对称运行问题 武汉真TMD热,我快热疯了,送分!! dim语句是用来做什么的? 请问一个用户连上ORacle后,如何知道他(她)的权限有哪些?用SQL应该怎么写呢? 急,求救,关于和Applet的Socket通讯的问题。我只能给这么高了! 计算多面体有几个五面体几个六面体怎么算啊?好像有一个公式的,有一个方程组的,能不能帮我回想一哈啊! 阿伏伽德罗常数是NA,铜的摩尔质量为M,铜的密度是ρ,那么以下说法正确的是 [ ] A.1kg铜所含原子的数目阿伏伽德罗常数是NA,铜的摩尔质量为M,铜的密度是ρ,那么以下说法正确的是 [ ]A.1kg铜所 SiO2,CsCl,CBr4,CF4熔沸点比较 足球是几面体?是不是有一些5面体组成? 设钻石的密度为p,摩尔质量为M,阿伏加德罗常数为NA,请写出a克拉钻石所含的分子数和每个钻石分子直径的表达式 请问一下,这道怎么做? 下列物质中熔点最高的是 ( ) A.CsCl B.SiO2 C.CO2 D.Ar 硼原子的结构为20个正三角形构成,消去每个顶点后为足球烯,那足球烯是有多少个六面体和五面体构成?用硼原子来解释 有一横截面为s的导线,流经其中的电流为I,已知导线材料的密度为p,摩尔质量为M,阿伏伽德罗常数NA,电子电量为e.假设每个原子贡献一个电子,求导线中自由电子定向移动速率v 熔点高低排列 CsCl大于KCl大于NaCl 为什么不对啊,结构相似时比质量分数 体积相同的四面体,六面体,十二面体,二十面体,表面积最大的是? 铜的摩尔质量为M(kg/mol),密度为P(kg/M3).若阿伏加德罗常数为Na,则下列说法错误的是?A 1M3 铜所含的原子数目是P*NA/M B 1kg铜所含的原子数目是P*NAC 一个铜原子的质量是(M/NA)kgD 一个铜原子占 氯化钠,氯化锂,氯化钾,cscl按熔点高低怎么排序呀? 正四面体,正六面体,正八面体,正十二面体,有几个顶点,几条棱,几个面正四面体,正六面体,正八面体,正十二面体,正二十面体,有几个顶点,几条棱,几个面回答全多给分 知道一物体的体积 密度 摩尔质量 阿伏伽德罗常数 如何求该物体所含的分子数? CsCl型晶体是什么空隙 密排六方晶格的一个晶胞内有几个原子 已知铜的摩尔质量M,铜的密度是p,求同原子质量和体积.已知NA同上 NaCl与CsCl配位数差异的原因书上说是由于Cs+半径大于Na+半径,但难以理解.讲一讲. 密排六方晶格中间的原子在哪?要具体位置, 已知NaCl的摩尔质量为Mg/mol例7、已知NaCl的摩尔质量为Mg·mol-1,食盐晶体的密度为ρg·cm-3,若右图中Na+与最邻近的Cl-的核间距离为acm,那么阿伏加德罗常数的值可表示为A.2Ma^3ρ B.M/a^3ρ C.2M/a^3ρ D.M/2a 高压下NaCl结构晶胞会转化成CsCl形结构的原因! 如何根据晶胞参数求原子的半径?已知晶格常数和密度. 已知铜的密度是8.9*10^3kg/m^3,铜的摩尔质量是63.5*10^(-3)kg/mol.体积是4.5cm^3的铜块中含有多少个铜原子?并估算铜原子的直径是多少? TiO2,NaCl,CsCl 的晶体结构各是什么样的? matlab 空间画圆想用matlab画出左边的图形 不知道有没有人能帮下忙给出程序 铜的摩尔质量是Mg\mol,密度是Dg\cm3,阿伏加德罗常数是NA,下列说法正确的是:A 1dm3的铜所含的原子数目是DNA\M B 1KG铜所含的原子数目是DNAC 1个铜原子的质量是M\NAgD1个铜原子所占的体积是D\M\NAcm3 高二化学,有关晶体结构,书上只给出了Nacl,Cscl,ZnS三种类型,里面没有CO2,H2O之类的啊?高二化学,有关晶体结构,书上只给出了Nacl,Cscl,ZnS三种类型,里面没有CO2,H2O之类的常见物的啊? 晶格和点阵是什么关系 晶胞和晶格又有什么关系 另外标准浓度有什么意义一共有14个晶格,是不是每个晶格的顶点就是晶胞呢 铼是晶格类型六角密集,外表与铂同的是吗? 铜的摩尔质量为Mg/mol,密度为dg/cm3,阿伏伽德罗常数为NA,下列说法正确的是A 1kg Cu所含原子数为DNAB 一个铜原子所占有的体积为(MNA/d)cm3、C 一个铜原子的质量为(M/NA)gD 1cm3铜所含有的原子数为DN hcp晶体结构填充系数怎么计算?如果HCP可以计算的出,那么金刚石的填充系数又怎么计算呢? 如何在matlab画图区域填充不同的颜色 Cu高温灼热变成什么CuO还是Cu2O hcp-4020x投影机与180寸幕布之间的距离,HCP-3580x与150寸幕布距离,HCP-3200X与120寸幕布距离 六角晶格的第一布里渊区的六个顶点为什么分成两类 让空气依次通过烧碱溶液,浓硫酸中,灼热的铜网(假定反应完全),最终得到的气体是A N2,O2 B N2,稀有气体 C N2,CO2 D 稀有气体和水蒸汽请说明理由, hcp是什么意思 为什么铁是体心立方晶格的? 将Cu和Cu(OH)2的混合物在空气中加强热将Cu和Cu(OH)2的混合物在空气中加热,将Cu和Cu(OH)2的混合物在空气中加强热,Cu完全被氧化,Cu(OH)2完全被分解.如果反应前后固体质量不变,原混合物中Cu(OH)2的 四面体、五面体、六面体和八面体的顶点数、面数和棱数 请说明一下,x射线衍射法测晶格常数a,b,c的计算方程. 将Cu和Cu(OH)2的混合物在空气中加热,Cu完全被氧化,Cu(OH)2完全被分解.如果反应前后固体质量不变,原混和物中Cu(OH)2的质量分数为? 通过填四面体、五面体、六面体和八面体的顶点数、面数和棱数.发现了什么规律 CO2是底心晶胞吗 是面心立方最密堆积吗CO2是底心晶胞吗 是面心立方最密堆积吗 使空气依次通过烧碱溶液.浓硫酸和灼热的铜网.最后得到的气体是什么 听说正多面体只有正四面体、正六面体、正八面体、正十二面体和正二十面体五种是这样吗?回答一定要详细一些! 为什么金属是体心立方晶胞就不可能是共价键构成 CsCl晶体Cs+,Na+为什么是1:1, 正四面体,正方体,正八面体,正十二面体的顶点数,面数,棱数之间有什么关系 面心立方晶胞原子数为什么是4个,而心立方晶胞的原子数却是2个? CsCl等密度梯度离心中,浮力密度高的是在上面还是在下面?RT 相同表面积的四面体,六面体,正十二面体以及正二十面体,其中体积最大的是? 化学选修三 求密度.已知Al原子数为4 原子半径为d Na阿伏伽德罗常数 Al相对原子质量M Al晶体的密度为答案:M/(4√2 d^3 Na)如果给出的半径 是根据什么公式求出来的 麻烦写下公式 谢谢 cscl是什么船公司 数学:证明,空间中仅存在5种正多面体:正四面体,正六面体,正八面体,正十二面体,正二十面体. 已知NaCl摩尔质量为58.5g/mol,食盐晶体的密度为pg/cm3,若钠离子与最邻近的氯离子的核间距离acm,那么阿伏伽德罗常数可以表示为 已知气泡内气体的密度为1.29 kg/m3,平均摩尔质量为0.029 kg/mol.阿伏加德罗常数NA=6.02×1023mol-1,取气体分子的平均直径为2×10-10 m,若气泡内的气体能完全变为液体,请估算液体体积与原来气体体积的 正四面体,正方体,正八面体,正十二面体,正二十面体 的顶点数,面数,棱数 已知氯化钠摩尔质量,阿伏加德罗常数,密度,求钠离子中心间的距离 SiO2 CsCl CBr4 CF4的溶点高低怎么判断
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn