unit FCaPolicyTaskSel; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, VirtualTrees, Vcl.ComCtrls, ManagerCaPolicy; type PTaskEnt = ^TTaskEnt; TTaskEnt = record sCaption: String; Kind: TCaTaskKind; end; TFrmCaPolicyTaskSel = class(TFrame) pnBottom: TPanel; btnOk: TButton; btnCancel: TButton; vtList: TVirtualStringTree; Splitter1: TSplitter; pcMain: TPageControl; tabPort: TTabSheet; Label1: TLabel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; Memo1: TMemo; tabConn: TTabSheet; Label2: TLabel; ComboBox1: TComboBox; Memo2: TMemo; CheckBox3: TCheckBox; Memo3: TMemo; tabWebb: TTabSheet; Label3: TLabel; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Memo4: TMemo; tabWlan: TTabSheet; Label4: TLabel; RadioButton3: TRadioButton; RadioButton4: TRadioButton; tabApp: TTabSheet; Label5: TLabel; RadioButton5: TRadioButton; RadioButton6: TRadioButton; Memo5: TMemo; tabAppInst: TTabSheet; Label6: TLabel; RadioButton7: TRadioButton; RadioButton8: TRadioButton; Memo6: TMemo; tabUSB: TTabSheet; tabBT: TTabSheet; tabMTP: TTabSheet; Label7: TLabel; RadioButton9: TRadioButton; RadioButton10: TRadioButton; CheckBox4: TCheckBox; Memo7: TMemo; Label8: TLabel; CheckBox5: TCheckBox; Memo8: TMemo; Label9: TLabel; CheckBox6: TCheckBox; Memo9: TMemo; tabFile: TTabSheet; Label10: TLabel; CheckBox7: TCheckBox; CheckBox8: TCheckBox; CheckBox9: TCheckBox; Memo10: TMemo; Memo11: TMemo; Memo12: TMemo; CheckBox10: TCheckBox; tabFolder: TTabSheet; Label11: TLabel; CheckBox11: TCheckBox; tabCB: TTabSheet; Label12: TLabel; Label13: TLabel; Memo13: TMemo; tabLogo: TTabSheet; lbLogo: TLabel; tabScrLock: TTabSheet; Label14: TLabel; Label15: TLabel; Label16: TLabel; edPass1: TEdit; edPass2: TEdit; CheckBox12: TCheckBox; Label17: TLabel; Edit1: TEdit; procedure btnCancelClick(Sender: TObject); procedure vtListGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: string); procedure vtListGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer); procedure vtListGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); procedure vtListFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); procedure vtListFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); procedure btnOkClick(Sender: TObject); private { Private declarations } SelTaskKind_: TCaTaskKind; public { Public declarations } Constructor Create(aOwner: TComponent); override; procedure RefreshPolicy(nCate: Integer); property SelectedCaKind: TCaTaskKind read SelTaskKind_; end; implementation uses Define, Tocsg.VirtualTreeViewUtil, System.DateUtils; {$R *.dfm} Constructor TFrmCaPolicyTaskSel.Create(aOwner: TComponent); procedure InitCtrls; var i: Integer; begin for i := 0 to pcMain.PageCount - 1 do pcMain.Pages[i].TabVisible := false; end; begin Inherited Create(aOwner); SelTaskKind_ := ctkUnknown; InitCtrls; end; procedure TFrmCaPolicyTaskSel.RefreshPolicy(nCate: Integer); procedure AddCateEnt(sCaption: String; aKind: TCaTaskKind); var pData: PTaskEnt; begin pData := VT_AddChildData(vtList); pData.sCaption := sCaption; pData.Kind := aKind; end; var pNode: PVirtualNode; begin vtList.BeginUpdate; try case nCate of 1 : begin AddCateEnt('Æ÷Æ® Á¦¾î', ctkPortPO); AddCateEnt('³×Æ®¿öÅ© Á¢¼Ó °ü¸®', ctkConnPO); end; 2 : begin AddCateEnt('ÇÁ·Î¼¼½º Â÷´Ü', ctkAppPO); AddCateEnt('ÇÁ·Î±×·¥ ¼³Ä¡ Â÷´Ü', ctkAppInstPO); end; 3 : begin AddCateEnt('USB', ctkUsbPO); AddCateEnt('ºí·çÅõ½º', ctkBtPO); AddCateEnt('MTP', ctkMtpPO); end; 4 : begin AddCateEnt('ÆÄÀÏ', ctkFile); AddCateEnt('Æú´õ', ctkFolder); end; 5 : begin AddCateEnt('Ŭ¸³º¸µå', ctkBlcClipPO); AddCateEnt('»ó½Ã·Î°í', ctkScrLogoPO); AddCateEnt('È­¸éÀá±Ý', ctkScrLock); end; 6 : ; end; pNode := vtList.GetFirst; if pNode <> nil then begin vtList.Selected[pNode] := true; vtList.FocusedNode := pNode; end; finally vtList.EndUpdate; end; end; procedure TFrmCaPolicyTaskSel.btnCancelClick(Sender: TObject); begin if (Owner <> nil) and (Owner is TWinControl) then PostMessage(TWinControl(Owner).Handle, WM_CAPOLICY_DLG_CANCEL, 0, 0); end; procedure TFrmCaPolicyTaskSel.vtListFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); var pData: PTaskEnt; begin if Node = nil then exit; pData := Sender.GetNodeData(Node); case pData.Kind of ctkPortPO : pcMain.ActivePage := tabPort; ctkConnPO : pcMain.ActivePage := tabConn; ctkWebb : pcMain.ActivePage := tabWebb; ctkAppPO : pcMain.ActivePage := tabApp; ctkAppInstPO : pcMain.ActivePage := tabAppInst; ctkUsbPO : pcMain.ActivePage := tabUSB; ctkBtPO : pcMain.ActivePage := tabBT; ctkMtpPO : pcMain.ActivePage := tabMTP; ctkFile : pcMain.ActivePage := tabFile; ctkFolder : pcMain.ActivePage := tabFolder; ctkCttSchFile : ; ctkCttSchDir : ; ctkBlcDownDirPO : ; ctkScrLogoPO : pcMain.ActivePage := tabLogo; ctkBlcClipPO : pcMain.ActivePage := tabCB; ctkScrLock : pcMain.ActivePage := tabScrLock; end; end; procedure TFrmCaPolicyTaskSel.vtListFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var pData: PTaskEnt; begin pData := Sender.GetNodeData(Node); Finalize(pData^); end; procedure TFrmCaPolicyTaskSel.vtListGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: string); begin HintText := vtList.Text[Node, Column]; end; procedure TFrmCaPolicyTaskSel.vtListGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer); begin NodeDataSize := SizeOf(TTaskEnt); end; procedure TFrmCaPolicyTaskSel.vtListGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); var pData: PTaskEnt; begin if Column = 0 then begin pData := Sender.GetNodeData(Node); CellText := pData.sCaption; end; end; procedure TFrmCaPolicyTaskSel.btnOkClick(Sender: TObject); var pNode: PVirtualNode; pData: PTaskEnt; begin if (Owner <> nil) and (Owner is TWinControl) then begin pNode := vtList.GetFirstSelected; if pNode = nil then begin MessageBox(Handle, PChar('ÀÎÁö Á¶°ÇÀ» ¼±ÅÃÇØ ÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); exit; end; pData := vtList.GetNodeData(pNode); SelTaskKind_ := pData.Kind; PostMessage(TWinControl(Owner).Handle, WM_CAPOLICY_DLG_OK, 0, 0); end; end; end.