📄 fctreeview_itemseditor.pas
字号:
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 + -