• Delphi:assigned,TTreeView,return/result,listview


    assigned 是用来判断某一指针(pointer)或过程引用是否为nil(空),如果为空则返回假(false)。用法示例(防止窗体被实例化多次):
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if (Not assigned(form2)) then
      begin
        form2:=Tform2.Create(Self);
      end;
      form2.show;
    end;

    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action:=caFree;
      form2:=nil;  //这句比较重要,窗体被释放时,窗体变量并不会自动变空
    end;


    TTreeView
    procedure TForm_login.cxButton1Click(Sender: TObject); // 登录
    var
      newNode0, newNode1, newNode2: TTreenode;//管理每层结点
    begin
      if not Assigned(Form_main) then
      begin
        Form_main := TForm_main.Create(nil);
      end;
      Form_main.Show;
      if cxComboBox1.ItemIndex = 1 then
      begin
        Form_main.cxTreeView1.Items.Clear;
        with Form_main.cxTreeView1.Items do
        begin
          newNode0 := add(nil, 'root');
          newNode1 := AddChildFirst(newNode0, 'child1');
          newNode2 := AddChildFirst(newNode1, 'child10');
          newNode1 := AddChild(newNode0, 'child2');
          newNode2 := add(newNode2, 'child11');
          newNode0 := add(nil, 'root1');
        end;
        ShowMessage(string(Form_main.cxTreeView1.Items.Item[3].Text));
      end;
      self.Hide;
    end;


    在c++中: 跳出一个函数用return(返回类型),在return的同时就跳出函数了, 无返回类型函数直接return就跳出了。   
    但delphi不一样:   result中保存的是返回值,但真正跳出函数要用exit,   exit在退出函数的同时把result值返回,   如果是procedure,就没有result

    delphi中result一般做为函数的返回值,不做为退出条件,退出条件是exit,abort等,给result赋值不会退出函数。


    listview 指定行 指定列的值 listview基本用法大全
    //增加项或列(字段) 
    ListView1.Clear; 
    ListView1.Columns.Clear; 
    ListView1.Columns.Add; 
    ListView1.Columns.Add; 
    ListView1.Columns.Add; 
    ListView1.Columns.Items[0].Caption:='id';
    ListView1.Columns.Items[1].Caption:='type';
    ListView1.Columns.Items[2].Caption:='title';
    ListView1.Columns.Items[2].Width:=300; 
    Listview1.ViewStyle:=vsreport; 
    Listview1.GridLines:=true;//此处代码也可以直接在可视化编辑器中完成,也可写成以下这样 
    begin 
    with listview1 do
    begin
    Columns.Add; 
    Columns.Add; 
    Columns.Add; 
    ViewStyle:=vsreport; 
    GridLines:=true; 
    columns.items[0].caption:='进程名'; 
    columns.items[1].caption:='进程ID'; 
    columns.items[2].caption:='进程文件路径'; 
    Columns.Items[0].Width:=100; 
    Columns.Items[1].Width:=100; 
    Columns.Items[2].Width:=150; 
    end 
    end; 
    //增加记录 
    with listview1.items.add do 
    begin 
    caption:='1212';  
    subitems.add('hh1');  
    subitems.add('hh2');  
    end;  
    //删除  
    listview1.items.delete(0); 
    //从数据库表里读取数据写入Listview 
    var 
    Titem:Tlistitem;       //此处一定要预定义临时记录存储变量. 
    begin 
    ListView1.Items.Clear; 
    with adoquery1 do
    begin 
    close; 
    sql.Clear; 
    sql.Add('select spmc,jg,sl from kcxs'); 
    Open; 
    ListView1.Items.Clear; 
    while not eof do
    begin 
    Titem:=ListView1.Items.add; 
    Titem.Caption:=FieldByName('spmc').Value; 
    Titem.SubItems.Add(FieldByName('sl').Value); 
    Titem.SubItems.Add(FieldByName('jg').Value); 
    next; 
    end; 
    //删除  
    ListView1.DeleteSelected; 
    //如何取得ListView中选中行的某一列的值 
    procedure TForm1.Button2Click(Sender: TObject); 
    begin 
    ShowMessage(ListView1.Selected.SubItems.Strings[1]); //返回选中行第三列中的值 
    end; 
    showMessage(listView1.Selected.Caption);   //返回选中行第一列的值. 
    第1列的值: -->>> ListView1.Selected.Caption    
    第i列的值(i>1):-->>> ListView1.Selected.SubItems.Strings[i] 
    ListView1.Items.Item[1].SubItems.GetText); //取得listview某行某列的值 
    Edit2.Text := listview1.Items[1].SubItems.strings[0];   //读第1行第2列 
    表示第2行,原因是从0开始地得嘛,0表示第二列,原因是第1列就为Caption
    返回选中行所有子列值.是以回车符分开的,你还要从中剥离出来你要的子列的值。   
    showMessage(ListView1.Selected.SubItems.GetText);    
    ListView 简单排序的实现 
    ListView 排序 
    怎样实现单击一下按升序,再单击一下按降序。 
    function CustomSortProc(Item1, Item2: TListItem; ColumnIndex: integer): integer; stdcall; 
    begin 
    if ColumnIndex = 0 then 
    Result := CompareText(Item1.Caption,Item2.Caption) 
    else
    Result := CompareText(Item1.SubItems[ColumnIndex-1],Item2.SubItems[ColumnIndex-1]) 
    end;  
    procedure TFrmSrvrMain.ListView1ColumnClick(Sender: TObject; 
    Column: TListColumn); 
    begin 
    ListView1.CustomSort(@CustomSortProc,Column.Index); 
    end; 
    =============================================================== 
    //增加  
    i := ListView1.Items.Count;  
    with ListView1 do 
    begin  
    ListItem:=Items.Add;  
    ListItem.Caption:= IntToStr(i);  
    ListItem.SubItems.Add('第 '+IntToStr(i)+' 行');  
    ListItem.SubItems.Add('第三列内容');  
    end;  
    //按标题删除  
    for i:=ListView1.Items.Count-1 downto 0 Do  
    if ListView1.Items[i].Caption = Edit1.Text then  
    begin  
    ListView1.Items.Item[i].Delete(); //删除当前选中行  
    end;  
    //选中一行  
    if ListView1.Selected <> nil then  
    Edit1.Text := ListView1.Selected.Caption;  
    // listview1.Items[Listview1.Items.Count -1].Selected := True;  
    // listview1.Items[Listview1.Items.Count -1].MakeVisible(True);  
    procedure TForm1.Button2Click(Sender: TObject); // 选择第一条  
    begin  
    listview1.SetFocus;  
    listview1.Items[0].Selected := True;  
    end;  
    procedure TForm1.Button1Click(Sender: TObject); // 选择最后一条  
    begin  
    listview1.SetFocus;  
    listview1.Items[Listview1.Items.Count -1].Selected := True;  
    end;  
    //这是个通用的过程  
    procedure ListViewItemMoveUpDown(lv : TListView; Item : TListItem; MoveUp, SetFocus : Boolean);  
    var  
    DestItem : TListItem;  
    begin  
    if (Item = nil) or ((Item.Index - 1 < 0) and MoveUp) or  
     ((Item.Index + 1 >= lv.Items.Count) and (not MoveUp))  
    then Exit;  
    lv.Items.BeginUpdate;  
    try 
    if MoveUp then  
    DestItem := lv.Items.Insert(Item.Index - 1)  
    else 
    DestItem := lv.Items.Insert(Item.Index + 2);  
    DestItem.Assign(Item);  
    lv.Selected := DestItem;  
    Item.Free;  
    finally 
    lv.Items.EndUpdate;  
    end;  
    if SetFocus then lv.SetFocus;  
    DestItem.MakeVisible(False);  
    end;  
    //此为调用过程,可以任意指定要移动的Item,下面是当前(Selected)Item  
    ListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True);//上移  
    ListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True);//下移  
    TListView组件使用方法  
    引用CommCtrl单元  
    procedure TForm1.Button1Click(Sender: TObject);  
    begin  
    ListView_DeleteColumn(MyListView.Handle, i);//i是要删除的列的序号,从0开始  
    end;  
    用LISTVIEW显示表中的信息:  
    procedure viewchange(listv:tlistview;table:tcustomadodataset;var i:integer);  
    begin  
    tlistview(listv).Items.BeginUpdate; {listv:listview名}  
    try 
    tlistview(listv).Items.Clear;  
    with table do {table or query名}  
    begin  
    active:=true;  
    first;  
    while not eof do 
    begin  
    listitem:=tlistview(listv).Items.add;  
    listitem.Caption:=trim(table.fields[i].asstring);  
    // listitem.ImageIndex:=8;  
    next;  
    end;  
    end;  
    finally 
    tlistview(listv).Items.EndUpdate;  
    end;  
    end;  
    ListView使用中的一些要点。以下以一个两列的ListView为例。  
    →增加一行:  
    with ListView1 do 
    begin  
    ListItem:=Items.Add;  
    ListItem.Caption:='第一列内容';  
    ListItem.SubItems.Add('第二列内容');  
    end;  
    →清空ListView1:  
    ListView1.Items.Clear;  
    →得到当前被选中行的行的行号以及删除当前行:  
    For i:=0 to ListView1.Items.Count-1 Do  
    If ListView1.Items[i].Selected then //i=ListView1.Selected.index  
    begin  
    ListView1.Items.Delete(i); //删除当前选中行  
    end;  
    当然,ListView有OnSelectItem事件,可以判断选择了哪行,用个全局变量把它赋值出来。  
    →读某行某列的操作:  
    Edit1.Text := listview1.Items[i].Caption; //读第i行第1列  
    Edit2.Text := listview1.Items[i].SubItems.strings[0]; //读第i行第2列  
    Edit3.Text := listview1.Items[i].SubItems.strings[1]; //读第i行第3列  
    以次类推,可以用循环读出整列。  
    →将焦点上移一行:  
    For i:=0 to ListView1.Items.Count-1 Do  
    If (ListView1.Items[i].Selected) and (i>0) then  
    begin  
    ListView1.SetFocus;  
    ListView1.Items.Item[i-1].Selected := True;  
    end;  
    不过在Delphi6中,ListView多了一个ItemIndex属性,所以只要  
    ListView1.SetFocus;  
    ListView1.ItemIndex:=3;  
    就能设定焦点了。  
    Delphi的listview能实现交替颜色么?  
    procedure TForm1.ListView1CustomDrawItem(  
    Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;  
    var DefaultDraw: Boolean);  
    var  
    i: integer;  
    begin  
    i:= (Sender as TListView).Items.IndexOf(Item);  
    if odd(i) then sender.Canvas.Brush.Color:= $02E0F0D7  
    else sender.Canvas.Brush.Color:= $02F0EED7;  
    Sender.Canvas.FillRect(Item.DisplayRect(drIcon));  
    end;


  • 相关阅读:
    CF-911E.Stack Sorting(栈)
    随机算法 && CodeForces
    CF-579D."Or" Game(或运算)
    CF-242E.XOR on Segment(异或线段树)
    莫队 && 洛谷 P1494 [国家集训队]小Z的袜子
    洛谷 P4168 [Violet]蒲公英(分块)
    分块 && 洛谷 P2801 教主的魔法
    启发式合并 && U41492 树上数颜色
    使用mysqlbinlog server远程备份binlog的脚本
    mysqldump备份过程中都干了些什么
  • 原文地址:https://www.cnblogs.com/IceKernel/p/2270071.html
Copyright © 2020-2023  润新知