⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fctreeview_itemseditor.pas

📁 一套及时通讯的原码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
             if CheckboxButton.checked then
                (TreeView.selected as TfcTreeNode).CheckboxType:= tvctCheckbox
             else
                (TreeView.selected as TfcTreeNode).CheckboxType:= tvctRadioGroup;
             (TreeView.selected as TfcTreeNode).StateIndex:=strtoint(StateIndexEdit.text);
          end;

          TreeView.selected.grayed:=GrayedCheckbox.checked;

       end
       else begin
          if RadioButton.checked then { Radio group }
             SetSiblingsToRadio(TfcTreeNode(TreeView.selected), False)
          else (TreeView.selected as TfcTreeNode).CheckboxType:= tvctNone;
       end

    end;
end;

procedure TfcTreeViewItemsEditor.FormShow(Sender: TObject);
begin
   FillChecklistBox;  { 4/22/99 - Put before refresh controls }
   RefreshControls;
   TreeView.Options:= TreeView.Options - [tvo3StateCheckbox];
//   TreeView.ReadOnly:= True;
end;

procedure TfcTreeViewItemsEditor.FormClose(Sender: TObject;
  var Action: TCloseAction);
var answer: integer;
begin
   if ModalResult = mrOK then UpdateNode(True)
   else if (ModalResult = mrCancel) and DataModified then begin
      answer:= MessageDlg('Changes have been made!  Do you wish to save them?',
           mtConfirmation, [mbYes, mbNo, mbCancel], 0);
      if (answer = mrYes) then ModalResult:= mrOK
      else if (answer = mrNo) then ModalResult:= mrCancel
      else Action:= caNone;
   end
end;

procedure TfcTreeViewItemsEditor.Button3Click(Sender: TObject);
begin
   UpdateNode(True);
end;

procedure TfcTreeViewItemsEditor.TextEditChange(Sender: TObject);
begin
   if TextEdit.modified then
   begin
      TreeView.Selected.Text:= TextEdit.Text;
      DataModified:= True;
   end
//   if (Sender as TEdit).Focused then UpdateNode;
//   if TreeView.Selected<>Nil then
//      TreeView.Selected.Text:= (Sender as TEdit).text;
end;

procedure TfcTreeViewItemsEditor.ShowCheckBoxClick(Sender: TObject);
begin
   if InRefreshControls then exit;
   if ShowCheckbox.checked then
   begin
      StateIndexEdit.text:= '1';
      StateIndexEdit.enabled:= False;
      SetCheckboxEnabled(true);
   end
   else begin
      StateIndexEdit.text:= '-1';
      StateIndexEdit.enabled:= True;
      SetCheckboxEnabled(false);
   end;
   UpdateNode(True);
end;

procedure TfcTreeViewItemsEditor.StateIndexEditExit(Sender: TObject);
begin
   if StateIndexEdit.modified then
   begin
      TreeView.Selected.StateIndex:= strtoint(StateIndexEdit.Text);
      TreeView.InvalidateNode(TreeView.Selected);
      DataModified:= True;
   end
end;

procedure TfcTreeViewItemsEditor.SelectedIndexEditExit(Sender: TObject);
begin
   if SelectedIndexEdit.modified then
   begin
      TreeView.Selected.SelectedIndex:= strtoint(SelectedIndexEdit.Text);
      DataModified:= True;
   end
end;

procedure TfcTreeViewItemsEditor.ImageIndexEditExit(Sender: TObject);
begin
   if ImageIndexEdit.modified then
   begin
      TreeView.Selected.ImageIndex:= strtoint(ImageIndexEdit.Text);
      TreeView.InvalidateNode(TreeView.Selected);
      DataModified:= True;
   end
end;

procedure TfcTreeViewItemsEditor.CheckListBoxClickCheck(Sender: TObject);
begin
  if SuspendCheckboxList then Exit;
  if TreeView.Selected <> nil then
    fcSetOrdProp(TreeView.Selected, CheckListBox.Items[CheckListBox.ItemIndex],
      ord(CheckListBox.Checked[CheckListBox.ItemIndex]));
end;

procedure TfcTreeViewItemsEditor.CheckListBoxDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
  function ExtrapolateText: string;
  var i: Integer;
  begin
    result := ChecklistBox.Items[Index];
    i := 2;
    while i <= Length(result) do
    begin
      if result[i] in ['A'..'Z'] then
      begin
        Insert(' ', result, i);
        inc(i);
      end;
      inc(i);
    end;
  end;
begin
  Inc(Rect.Left, 2);
  SetBkMode(ChecklistBox.Canvas.Handle, TRANSPARENT);
  SetBkColor(ChecklistBox.Canvas.Handle, 0);
  SetTextColor(ChecklistBox.Canvas.Handle, ColorToRGB(Font.Color));
  DrawText(ChecklistBox.Canvas.Handle, PChar(ExtrapolateText),
    Length(ExtrapolateText), Rect, DT_VCENTER or DT_SINGLELINE);
end;

procedure TfcTreeViewItemsEditor.CheckListBoxClick(Sender: TObject);
begin
//  CheckListBox.Checked[CheckListBox.ItemIndex] := not CheckListBox.Checked[CheckListBox.ItemIndex];
end;

procedure TfcTreeViewItemsEditor.TreeViewDragDrop(Sender, Source: TObject;
  X, Y: Integer);
var HitTest : TfcHitTests;
    KeyState: TKeyboardState;
begin
  with (Sender as TfcTreeView) do begin
    HitTest := GetHitTestInfoAt(X,Y);
    if (Selected <> nil) and
       ([fchtOnItem, fchtOnButton, fchtOnIndent, fchtOnLabel, fchtOnRight] * HitTest <> []) then
    begin
       if ([fchtOnItem, fchtOnButton, fchtOnIndent, fchtOnLabel, fchtOnRight] * HitTest <> []) then
       begin
          Items.BeginUpdate;
          DataModified:= True;
          GetKeyboardState(KeyState);

          if KeyState[vk_Shift]>=128 then
             Selected.MoveTo(GetNodeAt(X,Y), fcnaAddChild)
          else begin
             if (GetNodeAt(X,Y)=nil) then
                Selected.MoveTo(GetNodeAt(X,Y), fcnaInsertAfter)
             else
                Selected.MoveTo(GetNodeAt(X,Y), fcnaInsert);
          end;
          Items.EndUpdate;
       end
    end
    else if fchtNowhere in HitTest then
    begin
       Selected.MoveTo(DropTarget, fcnaAdd)
    end;

    DropTarget := nil;
    Screen.Cursor := crDefault;
  end
end;

procedure TfcTreeViewItemsEditor.MoveButtonClick(Sender: TObject);
var NextSibling: TfcTreeNode;
    Mode: TfcNodeAttachMode;
begin
  Mode := fcnaInsert;
  if (TreeView.Selected = nil) then Exit;
  if (Sender as TSpeedButton).Tag < 0 then
  begin
    NextSibling := TreeView.Selected.GetNextSibling;
    if NextSibling = nil then Exit;
    NextSibling := NextSibling.GetNextSibling;
    if NextSibling = nil then
    begin
      NextSibling := TreeView.Selected;
      Mode := fcnaAdd;
    end;
  end else NextSibling := TreeView.Selected.GetPrevSibling;
  if NextSibling = nil then Exit;
  TreeView.Items.BeginUpdate;
  TreeView.Selected.MoveTo(NextSibling, Mode);
  TreeView.Items.EndUpdate;
  DataModified := True;
end;

procedure TfcTreeViewItemsEditor.TreeViewMouseDown(TreeView: TfcCustomTreeView;
  Node: TfcTreeNode; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if fchtOnLabel in TreeView.GetHitTestInfoAt(X,Y) then
     TreeView.BeginDrag(False);
end;

procedure TfcTreeViewItemsEditor.TreeViewDragOver(Sender, Source: TObject;
  X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept:= True;
end;

procedure TfcTreeViewItemsEditor.StateIndexEditKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if key=vk_return then begin
    if ActiveControl = TextEdit then
    begin
       NewItemButton.Click;
    end
    else if (ActiveControl = ImageIndexEdit) or
            (ActiveControl = StringData1Edit) or
            (ActiveControl = StringData2Edit) or
            (ActiveControl = SelectedIndexEdit) or
            (ActiveControl = StateIndexEdit) then
    begin
       TEdit(ActiveControl).OnExit(ActiveControl);
       TEdit(ActiveControl).SelectAll;
    end
  end


end;

procedure TfcTreeViewItemsEditor.StringData1EditExit(Sender: TObject);
begin
   if (Sender as TEdit).modified then
   begin
      TreeView.Selected.StringData:= (Sender as TEdit).Text;
      DataModified:= True;
   end
end;

procedure TfcTreeViewItemsEditor.LoadButtonClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
     TreeView.LoadFromFile(OpenDialog1.FileName);
  end;
end;

procedure TfcTreeViewItemsEditor.SpeedButton1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
  begin
    if FileExists(SaveDialog1.FileName) then
      if MessageDlg(Format('OK to overwrite %s', [SaveDialog1.FileName]),
        mtConfirmation, mbYesNoCancel, 0) <> idYes then Exit;
    TreeView.SaveToFile(SaveDialog1.FileName);
  end;

end;

procedure TfcTreeViewItemsEditor.StringData2EditExit(Sender: TObject);
begin
   if (Sender as TEdit).modified then
   begin
      TreeView.Selected.StringData2:= (Sender as TEdit).Text;
      DataModified:= True;
   end
end;

procedure TfcTreeViewItemsEditor.FormResize(Sender: TObject);
begin
  if Width<500 then Width:= 500;
  if Height<325 then Height:= 325;
end;

procedure TfcTreeViewItemsEditor.CheckboxButtonClick(Sender: TObject);
begin
   RadioButton.checked:= False;
   if InRefreshControls then exit;
   UpdateNode(True);
end;

procedure TfcTreeViewItemsEditor.RadioButtonClick(Sender: TObject);
begin
   CheckboxButton.checked:= False;
   if InRefreshControls then exit;
   UpdateNode(True);
end;

procedure TfcTreeViewItemsEditor.GrayedCheckboxClick(Sender: TObject);
begin
   if InRefreshControls then exit;
   UpdateNode(True);
end;

procedure TfcTreeViewItemsEditor.TreeViewToggleCheckbox(
  TreeView: TfcCustomTreeView; Node: TfcTreeNode);
begin
   RefreshControls;
end;

procedure TfcTreeViewItemsEditor.TreeViewChanging(
  TreeView: TfcCustomTreeView; Node: TfcTreeNode;
  var AllowChange: Boolean);
begin
   try
      if ImageIndexEdit.modified or StateIndexEdit.modified or
         SelectedIndexEdit.modified or StringData1Edit.modified or
         StringData2Edit.modified then
         UpdateNode(False);
   except
      AllowChange:= False;
      raise;
   end;
end;

procedure TfcTreeViewItemsEditor.TreeViewChange(
  TreeView: TfcCustomTreeView; Node: TfcTreeNode);
begin
   RefreshControls;
end;

procedure TfcTreeViewItemsEditor.TreeViewCalcNodeAttributes(
  TreeView: TfcCustomTreeView; Node: TfcTreeNode; State: TfcItemStates);
begin
  if (Node.StringData<>'') and (tvoAutoURL in OrigTreeView.Options) then
  begin
      if not (fcisSelected in State) or not TreeView.Focused then
         Treeview.Canvas.Font.Color:= clBlue;
      Treeview.Canvas.Font.Style:=
              Canvas.Font.Style + [fsUnderline];
  end
end;

procedure TfcTreeViewItemsEditor.Button4Click(Sender: TObject);
begin
  fcHelp(Handle, 'TfcTreeView Nodes Editor');
end;

procedure TfcTreeViewItemsEditor.FormKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if Key = VK_F1 then Button4Click(Button4);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -