麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

解決了datatree的‘死節點’問題

2019-11-18 17:57:16
字體:
來源:轉載
供稿:網友

//問題描述見 howto 一文,代碼最終版本見下文

//標紅色部分為解決問題的關鍵

//標藍色部分為datatree所要求的,即前文提供的解決方案,但并不奏效

PRocedure TScriptProperty.DataTreeDragDrop(Sender: TBaseVirtualTree;
  Source: TObject; DataObject: IDataObject; Formats: TFormatArray;
  Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);
var
  pnode2: PAdminNode;
  data: PInt;
  Node2: PVirtualNode;
  sql: string;

  changeList: TStringList;
  FocusNode: PVirtualNode;
  TargetNode: PVirtualNode;
  Temp:PVirtualNode;
  i: Integer;
  left,right,targe:Integer;
begin
  Effect := DROPEFFECT_NONE;
  if (Source is TBaseVirtualTree) then
  begin
    Node2 := (Source as TBaseVirtualTree).GetFirstSelected;
    data := (Source as TBaseVirtualTree).GetNodeData(Node2);
    pnode2 := Pointer(data^);

    FocusNode := Sender.GetFirstSelected;
    TargetNode := Sender.DropTargetNode;

    left :=LeftBracketIndex(FocusNode);
    right:=RightBracketIndex(FocusNode);
    if TargetNode <> nil then
      targe := TargetNode.Index
    else
      targe := -1;
    if (Source as TBaseVirtualTree).Name = 'DataTree' then
    begin
      if DataTree.DropTargetNode = nil then Exit;
      if DataTree.DropTargetNode.Index = 0 then Exit;
      changeList := TStringList.Create;

      DataTree.BeginUpdate;

//塊拖動問題

      if (left<>0) and (right<>0)and (left<>LeftBracketIndex(TargetNode))and (right <>RightBracketIndex (TargetNode)) then  //后兩個條件解決了同一塊類不能移動的問題
      begin
        if  right< targe then
        begin
           if (LeftStr(stringlist.Strings[targe],5)='While') or (LeftStr(stringlist.Strings[targe],3)='for') then
              Exit;
           for i:=right+ 1 to targe do
               changeList.Add(stringlist.Strings[i]);
           for i:=left-1 to right do
               changeList.Add(stringlist.Strings[i]);
           for i:=left-1 to targe do
               stringlist.Strings[i]:= changeList.Strings[i-left+1];
        end;

        if  (left-1)> targe then
        begin
          if (stringlist.Strings[targe]='{')  then
              exit;
          for i:=left-1 to right do
              changeList.Add(stringlist.Strings[i]);
          for i:=targe to left-2 do
              changeList.Add(stringlist.Strings[i]);
          for i:=targe to right do
              stringlist.Strings[i]:= changeList.Strings[i-targe];
        end;
      end
      else
      begin
        if FocusNode.Index > TargetNode.Index then
        begin
          if (stringlist.Strings[TargetNode.Index]='{')  then
              exit;
          changeList.Add(stringlist.Strings[FocusNode.index]);
          for i:=TargetNode.Index to FocusNode.Index-1 do
              changeList.Add(stringlist.Strings[i]);
          for i:=TargetNode.Index to FocusNode.Index do
              stringlist.Strings[i]:= changeList.Strings[i-TargetNode.Index];
        end;

//行拖動問題   

     if FocusNode.Index < TargetNode.Index then
        begin
          if (LeftStr(stringlist.Strings[TargetNode.Index],5)='While') or (LeftStr(stringlist.Strings[TargetNode.Index],3)='for') then
              Exit;
          for i:=FocusNode.Index+1 to targetnode.Index do
              changeList.add(stringlist.Strings[i]);
          changeList.Add(stringlist.Strings[FocusNode.index]);
          for i:=FocusNode.Index to TargetNode.Index do
              stringlist.Strings[i]:= changeList.Strings[i-FocusNode.Index];
        end;
      end;
      changeList.Free;
      DataTree.EndUpdate;
      DataTree.Clear; //只加了這行代碼就解決了!原理:重畫了整個樹,就不存在width cach的問題了
      self.DataTree.RootNodeCount:=stringlist.Count;
      DataTree.Refresh;
      Exit;
    end
    else if pnode2.typename = 'MobileUserAgent' then
    begin
      if targe > 0 then
        stringlist.Insert(targe, CreateUserAgentCode(pnode2.data))
      else
        stringlist.Append(CreateUserAgentCode(pnode2.data));
      self.DataTree.RootNodeCount:=stringlist.Count;
      DataTree.Refresh;
      Exit;
    end

//腳本拖動問題
    else
    begin
      if application.MessageBox('Are you sure to replace current script?', 'Message', MB_OKCANCEL) = IDCancel then
        exit;

      sql := 'Select texts from systemobjects where itemid=''' + pnode2.id + '''';
      currentdatabase.ExeuteSQlQurey(pnode2, sql, @GetScriptFromDB);
      Self.SetScript(pnode2.texts);
      Exit;
    end;
  end;
end;

『絕對原創 飛飛于北京 2005-08-31』


上一篇:取Run下所有值(原創)

下一篇:如何獲取TWebBrowser控件的超級鏈接

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 亚洲国产高清一区 | 一二区成人影院电影网 | 福利免费观看 | av国产在线被下药迷网站 | 内地av在线 | 成人黄色小视频在线观看 | 色就色 综合偷拍区91网 | 中国性xxx | 欧美大荫蒂xxx | 鲁丝片一区二区三区免费入口 | 精选久久 | 色吧综合网 | 久久久日韩精品一区二区 | 精品一区二区电影 | 亚洲电影免费观看国语版 | 中文欧美日韩 | 久久777国产线看观看精品 | 亚洲情av | 国产精品久久久久久久久久久久久久久久 | 色视频在线 | 欧美成人高清视频 | 免费观看国产精品视频 | 欧美性受xxxx人人本视频 | 国产日韩在线观看一区 | 免费a级毛片大学生免费观看 | 久久99精品久久久久久秒播放器 | 婷婷久久网| 欧美激情在线播放 | 久久探花| 嫩呦国产一区二区三区av | 成人免费毛片一 | 黄色免费高清网站 | 伊人av影院 | 国产资源在线观看视频 | 日韩视频―中文字幕 | 12av毛片| 欧美精品一区二区中文字幕 | 钻石午夜影院 | 一级电影在线免费观看 | 欧美一级美国一级 | 久久久久夜色精品国产老牛91 |