实现在virtualStringtree中编辑的标准步骤

2016-02-19 21:30 48 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是实现在virtualStringtree中编辑的标准步骤,一起来学习了解下吧!

【 tulaoshi.com - 编程语言 】

  1.设置TVirtualStringTree属性:

        toFullRowSelect : false;

        toMultiSelect:false;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

         toExtendedFocous:true;

         toEditable:true;

         editDelay:0 //如果不调用editnode,则不会CREATE EDITOR

  2.实现virtualStringtree的ONClick事件:
    功能:根据当前获取焦点的node,判断是否edit该node

  TMMSLibraryForm版本:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  procedure TMMSLibraryForm.DataTreeClick(Sender: TObject);
  var
    Column:TColumnIndex;
    node:PVirtualNode;
  begin
    if DataTree.FocusedNode=nil then  Exit;

    node:=DataTree.FocusedNode;
    Column:=DataTree.FocusedColumn;

    if Column3 then
       DataTree.EditNode(node,Column);

  end;

  TSPNumbersForm版本:

  procedure TSPNumbersForm.VSTreeSPnumberClick(Sender: TObject);
  var
    Column:TColumnIndex;
    node:PVirtualNode;
  begin
    if VSTreeSPnumber.FocusedNode=nil then  Exit;

    node:=VSTreeSPnumber.FocusedNode;
    Column:=VSTreeSPnumber.FocusedColumn;

    VSTreeSPnumber.EditNode(node,Column);
  end;

  
  TTestNumberForm版本:

  procedure TTestNumberForm.VSTreeTestNumberClick(Sender: TObject);
  var
    Column:TColumnIndex;
    node:PVirtualNode;
  begin
    if VSTreeTestNumber.FocusedNode=nil then  Exit;

    node:=VSTreeTestNumber.FocusedNode;
    Column:=VSTreeTestNumber.FocusedColumn;

    VSTreeTestNumber.EditNode(node,Column);   
  end;

  3.实现virtualStringtree的ONCreateEditor事件:
    功能:如果editnode被调用,则执行此函数;之前设置editDelay:0,是为避免在不允许改动的node上出现editor

  TMMSLibraryForm版本:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  procedure TMMSLibraryForm.DataTreeCreateEditor(Sender: TBaseVirtualTree;
    Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
  begin
     EditLink:=TStringEditLink.create('',stringlist[node.index * 5+Column])
  end;

  
  TSPNumbersForm版本:

  procedure TSPNumbersForm.VSTreeSPnumberCreateEditor(
    Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
    out EditLink: IVTEditLink);
  begin
     EditLink:=TStringEditLink.create('',stringlist[node.index * 7+Column]);
  end;

  TTestNumberForm版本:

  procedure TTestNumberForm.VSTreeTestNumberCreateEditor(
    Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
    out EditLink: IVTEditLink);
  begin
     EditLink:=TStringEditLink.create('',stringlist[node.index * 4+Column]);
  end;

  4.实现virtualStringtree的ONNewText事件:
    功能:根据获取焦点的node的column,判断值的合法性,并同时更新数据库和stringlist

  TMMSLibraryForm版本:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  procedure TMMSLibraryForm.DataTreeNewText(Sender: TBaseVirtualTree;
    Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);
  var
    sql:string;
  begin
    case Column of
      0:
      begin
        if  (StrToInt64Def(Trim(NewText),-1)=-1) then
        begin
          ShowMessage('"'+Trim(NewText)+'"'+'does not represent a valid number!');
          Exit;
        end;

        sql:='update mmslibrary set MMS_ID='+Trim(NewText)+' where MMS_ID='+Stringlist.strings[node.Index*5];

      end;

      1:
        sql:='update mmslibrary set MMS_Type="'+Trim(NewText)+'" where MMS_ID='+Stringlist.strings[node.Index*5];

      2:
        sql:='update mmslibrary set MMS_Smil="'+Trim(NewText)+'" where MMS_ID='+Stringlist.strings[node.Index*5];

      4:
        sql:='update mmslibrary set MMS_Subject="'+Trim(NewText)+'" where MMS_ID='+Stringlist.strings[node.Index*5];

    end;

    if currentdatabase.ExecuteSqlNoQurey(sql)= 1 then
       ShowMessage('Save to Database sucessfully!')
    else
       ShowMessage('Error occurs while Saving to Database!');

    Stringlist.strings[node.Index*5+Column]:=Trim(NewText);

    DataTree.RootNodeCount:=stringlist.Count div 5 ;
    DataTree.Refresh;
  end;

  TSPNumbersForm版本:

  procedure TSPNumbersForm.VSTreeSPnumberNewText(Sender: TBaseVirtualTree;
    Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);
  var
    sql:string;
  begin
    case Column of
      0:
      begin
        if  (StrToInt64Def(Trim(NewText),-1)=-1) then
        begin
          ShowMessage('"'+Trim(NewText)+'"'+'does not represent a valid number!');
          Exit;
        end;

        sql:='update spnumbers set SP_SPID='+Trim(NewText)+' where SP_SPID='+Stringlist.strings[node.Index*7];
      end;
      1:
      sql:='update spnumbers set SP_Name="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      2:
      sql:='update spnumbers set SP_Nameforshort="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      3:
      sql:='update spnumbers set SP_operationtype="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      4:
      sql:='update spnumbers set SP_Code="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      5:
      sql:='update spnumbers set SP_operationcode="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
      6:
      sql:='update spnumbers set SP_operationName="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7];
    end;

    if currentdatabase.ExecuteSqlNoQurey(sql)= 1 then
       ShowMessage('Save to Database sucessfully!')
    else
       ShowMessage('Error occurs while Saving to Database!');

    Stringlist.strings[node.Index*7+Column]:=Trim(NewText);

    VSTreeSPnumber.RootNodeCount:=stringlist.Count div 7 ;
    VSTreeSPnumber.Refresh;
  end;

  TTestNumberForm版本:

  procedure TTestNumberForm.VSTreeTestNumberNewText(Sender: TBaseVirtualTree;
    Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);
  var
    sql:string;
  begin
    case Column of
      0:
      begin
        if  (StrToInt64Def(Trim(NewText),-1)=-1) then
        begin
          ShowMessage('"'+Trim(NewText)+'"'+'does not represent a valid number!');
          Exit;
        end;

        sql:='update testnumbers set TN_MSISDN='+Trim(NewText)+' where TN_MSISDN='+Stringlist.strings[node.Index*4];
      end;
      1:
      sql:='update testnumbers set TN_Imsi="'+Trim(NewText)+'" where TN_MSISDN='+Stringlist.strings[node.Index*4];
      2:
      sql:='update testnumbers set TN_Location="'+Trim(NewText)+'" where TN_MSISDN='+Stringlist.strings[node.Index*4];
      3:
      sql:='update testnumbers set TN_Description="'+Trim(NewText)+'" where TN_MSISDN='+Stringlist.strings[node.Index*4];
    end;

    if currentdatabase.ExecuteSqlNoQurey(sql)= 1 then
       ShowMessage('Save to Database sucessfully!')
    else
       ShowMessage('Error occurs while Saving to Database!');

    Stringlist.strings[node.Index*4+Column]:=Trim(NewText);

    VSTreeTestNumber.RootNodeCount:=stringlist.Count div 4 ;
    VSTreeTestNumber.Refresh;
  end;
  

来源:https://www.tulaoshi.com/n/20160219/1626342.html

延伸阅读
'在form中放一个textBox两个labelConst EM_GETSEL = &HB0Const EM_LINEFROMCHAR = &HC9Const EM_LINEINDEX = &HBBPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" _(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _lParam As Any) As LongPublic Sub Get...
Visual Basic中的文本框控件允许用户在其中键入文本,以便在 程序中使用。相反, 程序员可能会希望显示一些文本但不希望用户编 辑该文本。本文介绍了如何创建只读的文本框控件的内容。 使一个文本框控件只读 在Visual Basic中,如果文本框控件的MultiLine属性设置为True ,文本将会自动地换行到下一行。另外,如果文本框控件的ScrollB...
首先第一个是 jar 文件的制作,Java 里面直接把 .class 文件打包到 .jar 文件里面就可以了,但是 Android 的 Dalvik VM 是不认 Java 的 byte code 的,所以不能直接这么打包,而要用 dx 工具转成 Dalvik byte code 才可以。当然,dx 工具转了之后,jar 包里面就不 是 .class 文件了,而是 .dex 文件。 第二个是,Android 里面虽然也提供了 URLC...
在数据库编程中,不必要也不可能将应用程序操作的所有数据库字段放入一个数据库文件中。正确的数据库结构应是:将数据库字段放入多个数据库文件,相关的数据库都包含一个唯一的要害字段,在多数据库结构里可以建立联系。 例如:要编制一个人事治理程序,为简化演示程序,只建立两个数据库,每个数据库都只建立两个字段。 ...
标签: Web开发
    在我们制作网页的时候会经常碰到一些需求,如果不知道方法,说不定会困扰我们半天。其实实现它们都很简单,下面我们就一起来看看这些常用的网页编辑方法。 取消文本居中 在编排网页文本时,你可能会遇到这样的问题:只想让一行字符居中,但其它行的字符却会跟着也变成居中了。其实,这是因为在 MX中进行居中、居...

经验教程

656

收藏

44
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部