📄 fctreeview_itemseditor.pas
字号:
unit fcTreeView_ItemsEditor;
interface
{$i fcIfDef.pas}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, fcTreeView, ExtCtrls, checklst, fcCommon, {$ifdef fcdelphi6up}
designintf,
{$else}
dsgnintf,
{$endif}
Buttons;
type
TfcTreeViewItemsEditor = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
TextEdit: TEdit;
GroupBox2: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
ImageIndexEdit: TEdit;
SelectedIndexEdit: TEdit;
StateIndexEdit: TEdit;
ShowCheckBox: TCheckBox;
CheckListBox: TCheckListBox;
TreeView: TfcTreeView;
StringData1Edit: TEdit;
Label5: TLabel;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
Label6: TLabel;
StringData2Edit: TEdit;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Button4: TButton;
Panel2: TPanel;
NewItemButton: TSpeedButton;
NewSubitemButton: TSpeedButton;
DeleteButton: TSpeedButton;
MoveUpButton: TSpeedButton;
MoveDownButton: TSpeedButton;
LoadButton: TSpeedButton;
SpeedButton1: TSpeedButton;
CheckboxRadioGroup: TGroupBox;
CheckboxButton: TRadioButton;
RadioButton: TRadioButton;
GrayedCheckbox: TCheckBox;
procedure NewItemButtonClick(Sender: TObject);
procedure NewSubitemButtonClick(Sender: TObject);
procedure DeleteButtonClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
procedure TextEditChange(Sender: TObject);
procedure ShowCheckBoxClick(Sender: TObject);
procedure StateIndexEditExit(Sender: TObject);
procedure SelectedIndexEditExit(Sender: TObject);
procedure ImageIndexEditExit(Sender: TObject);
procedure CheckListBoxClickCheck(Sender: TObject);
procedure CheckListBoxDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure CheckListBoxClick(Sender: TObject);
procedure TreeViewDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure MoveButtonClick(Sender: TObject);
procedure TreeViewMouseDown(TreeView: TfcCustomTreeView; Node: TfcTreeNode; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TreeViewDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure StateIndexEditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure StringData1EditExit(Sender: TObject);
procedure LoadButtonClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure StringData2EditExit(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure CheckboxButtonClick(Sender: TObject);
procedure RadioButtonClick(Sender: TObject);
procedure GrayedCheckboxClick(Sender: TObject);
procedure TreeViewToggleCheckbox(TreeView: TfcCustomTreeView;
Node: TfcTreeNode);
procedure TreeViewChanging(TreeView: TfcCustomTreeView;
Node: TfcTreeNode; var AllowChange: Boolean);
procedure TreeViewChange(TreeView: TfcCustomTreeView;
Node: TfcTreeNode);
procedure TreeViewCalcNodeAttributes(TreeView: TfcCustomTreeView;
Node: TfcTreeNode; State: TfcItemStates);
procedure Button4Click(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
SuspendCheckboxList: Boolean;
InRefreshControls: boolean;
DataModified: boolean;
OrigTreeView: TfcCustomTreeView;
// DragFlag: Boolean;
procedure RefreshControls;
procedure UpdateNode(UpdateAll: boolean);
procedure RefreshChecklistBox(Node: TfcTreeNode);
procedure FillChecklistBox;
procedure SetCheckboxEnabled(val: boolean);
{ Private declarations }
public
{ Public declarations }
end;
{$ifdef fcDelphi6Up}
TFormDesigner = IDesigner;
{$else}
TFormDesigner = IFormDesigner;
{$endif}
procedure ExecuteTreeNodesEditor(ADesigner: TFormDesigner; ATreeView: TfcTreeView);
var
fcTreeViewItemsEditor: TfcTreeViewItemsEditor;
implementation
{$R *.DFM}
type TEditorTreeView = class(TfcTreeView);
procedure ExecuteTreeNodesEditor(ADesigner: TFormDesigner; ATreeView: TfcTreeView);
begin
with TfcTreeViewItemsEditor.Create(Application) do
begin
TEditorTreeView(TreeView).NodeClass := TEditorTreeView(ATreeView).NodeClass;
OrigTreeView:= ATreeView;
TreeView.Items.Assign(ATreeView.Items);
TreeView.MultiSelectAttributes.Assign(ATreeView.MultiSelectAttributes);
TreeView.Font.Assign(ATreeView.Font);
TreeView.Font.Color:= clWindowText; { 3/9/00 - Use window text for design - time }
if ATreeView.Images <> nil then
TreeView.Images:= ATreeView.Images;
if ATreeView.StateImages <> nil then
TreeView.StateImages := ATreeView.StateImages;
TreeView.Options:= ATreeView.Options - [tvoAutoURL, tvoHideSelection];
TreeView.Indent:= ATreeView.Indent;
if ShowModal = mrOK then
begin
ATreeView.Items.Assign(TreeView.Items);
if ADesigner <> nil then ADesigner.Modified else ShowMessage('nil');
end;
Free;
end;
end;
procedure TfcTreeViewItemsEditor.NewItemButtonClick(Sender: TObject);
var ParentOfSelected: TfcTreeNode;
Node: TfcTreeNode;
begin
// UpdateNode(False);
if TreeView.Selected=Nil then ParentOfSelected:= Nil
else ParentOfSelected:= TreeView.Selected.parent;
TreeView.selected := TreeView.Items.AddChild(ParentOfSelected, '');
if parentOfSelected=nil then
Node := TfcTreeNode(TreeView.Items.GetFirstNode)
else
Node := TfcTreeNode(parentOfSelected.GetFirstChild);
if (Node<>Nil) and (Node.CheckboxType=tvctRadioGroup) then
begin
TfcTreeNode(TreeView.selected).CheckboxType:= tvctRadioGroup;
TfcTreeNode(TreeView.selected).StateIndex:= 1;
end;
RefreshControls;
UpdateNode(False);
TextEdit.setFocus;
end;
procedure TfcTreeViewItemsEditor.NewSubitemButtonClick(Sender: TObject);
begin
// UpdateNode;
if TreeView.selected<>Nil then
begin
TreeView.selected:= TreeView.Items.AddChild(TreeView.Selected, '');
UpdateNode(False);
TextEdit.setFocus;
end;
end;
procedure TfcTreeViewItemsEditor.DeleteButtonClick(Sender: TObject);
begin
if TreeView.selected <> nil then
begin
TreeView.Items.Delete(TreeView.Selected);
RefreshControls;
end
end;
type TTempTree = class(TfcTreeView);
procedure TfcTreeViewItemsEditor.FillChecklistBox;
var BooleanProps: TStringList;
i: Integer;
Node: TfcTreeNode;
begin
Node := TTempTree(TreeView).NodeClass.Create(TreeView.Items);
ChecklistBox.Items.Clear;
BooleanProps := TStringList.Create;
try
fcGetBooleanProps(Node, BooleanProps);
if BooleanProps.count>0 then
begin
CheckListbox.enabled:= True;
TabStop:= True;
end;
for i := 0 to BooleanProps.Count - 1 do
ChecklistBox.Items.Add(BooleanProps[i]);
finally
BooleanProps.Free;
Node.Free;
end;
end;
procedure TfcTreeViewItemsEditor.RefreshChecklistBox(Node: TfcTreeNode);
var i: Integer;
begin
SuspendCheckboxList := True;
for i := 0 to CheckListBox.Items.Count - 1 do
ChecklistBox.Checked[ChecklistBox.Items.Count - 1] :=
Boolean(fcGetOrdProp(Node, ChecklistBox.Items[i]));
SuspendCheckboxList := False;
end;
procedure TfcTreeViewItemsEditor.RefreshControls;
var haveSelection: boolean;
begin
haveSelection:= TreeView.selected<>Nil;
InRefreshControls:= True;
DeleteButton.enabled:= haveSelection;
NewSubItemButton.enabled:= haveSelection;
TextEdit.enabled:= haveSelection;
ImageIndexEdit.enabled:= haveSelection;
StringData1Edit.enabled:= haveSelection;
StringData2Edit.enabled:= haveSelection;
SelectedIndexEdit.enabled:= haveSelection;
StateIndexEdit.enabled:= haveSelection;
ShowCheckbox.enabled:= haveSelection;
CheckListBox.Enabled := haveSelection;
if ShowCheckBox.enabled then
begin
ShowCheckbox.enabled:= haveSelection and
not TreeView.MultiSelectCheckboxNeeded(TreeView.Selected);
if not ShowCheckbox.enabled then begin
ShowCheckbox.checked:= false;
end
end;
if TreeView.selected <> nil then
begin
RefreshChecklistBox(TreeView.Selected);
TextEdit.text:= TreeView.Selected.Text;
ImageIndexEdit.text:= inttostr(TreeView.Selected.ImageIndex);
StringData1Edit.text:= TreeView.Selected.StringData;
StringData2Edit.text:= TreeView.Selected.StringData2;
SelectedIndexEdit.text:= inttostr(TreeView.Selected.SelectedIndex);
StateIndexEdit.text:= inttostr(TreeView.Selected.StateIndex);
ShowCheckbox.checked:= (TreeView.Selected as TfcTreeNode).CheckboxType<>tvctNone;
If ShowCheckbox.checked then begin
StateIndexEdit.enabled:= False;
if (TreeView.Selected as TfcTreeNode).CheckboxType=tvctRadioGroup then
begin
CheckboxButton.checked:= False;
RadioButton.checked:= True;
end
else begin
CheckboxButton.checked:= True;
RadioButton.checked:= False;
end;
GrayedCheckbox.checked:= TreeView.Selected.Grayed;
end
else begin
CheckboxButton.checked:= True;
RadioButton.checked:= False;
end;
SetCheckboxEnabled(ShowCheckbox.checked);
end;
InRefreshControls:= False;
end;
procedure TfcTreeViewItemsEditor.SetCheckboxEnabled(val: boolean);
begin
CheckboxButton.enabled:= val;
RadioButton.enabled:= val;
GrayedCheckbox.enabled:= val;
end;
procedure TfcTreeViewItemsEditor.UpdateNode(UpdateAll: boolean);
procedure SetSiblingsToRadio(Node: TfcTreeNode; RadioGroupFlag: boolean);
begin
Node:= TreeView.GetFirstSibling(Node);
{ parentNode:= TwwTreeNode(TreeView.selected.parent);
if parentNode=nil then
Node := TreeView.Items.GetFirstNode as TwwTreeNode
else
Node := TwwTreeNode(parentNode.GetFirstChild);
}
while Node <> nil do
begin
if RadioGroupFlag then begin
Node.CheckboxType:= tvctRadioGroup;
Node.StateIndex:=strtoint(StateIndexEdit.text);
end
else if Node.CheckboxType=tvctRadioGroup then begin
Node.CheckboxType:= tvctNone;
Node.StateIndex:=-1;
end;
Node := TfcTreeNode(Node.GetNextSibling);
end;
TreeView.Invalidate;
end;
begin
if TreeView.selected<>nil then begin
DataModified:= True;
TreeView.Selected.Text := TextEdit.text;
if ImageIndexEdit.text<>'' then
TreeView.Selected.ImageIndex:= strtoint(ImageIndexEdit.text);
if StringData1Edit.text<>'' then
TreeView.Selected.StringData:= StringData1Edit.text;
if StringData2Edit.text<>'' then
TreeView.Selected.StringData2:= StringData2Edit.text;
if SelectedIndexEdit.text<>'' then
TreeView.Selected.SelectedIndex:= strtoint(SelectedIndexEdit.text);
if StateIndexEdit.text<>'' then
TreeView.Selected.StateIndex:= strtoint(stateindexedit.text);
if not UpdateAll then exit;
if ShowCheckbox.checked then
begin
if RadioButton.checked then { Radio group }
SetSiblingsToRadio(TfcTreeNode(TreeView.selected), True)
else begin
SetSiblingsToRadio(TfcTreeNode(TreeView.selected), False);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -