unit FCaPolicySel; 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 PCateEnt = ^TCateEnt; TCateEnt = record sCaption: String; Kind: TCtxAwareKind; end; TFrmCaPolicySel = class(TFrame) pnBottom: TPanel; btnOk: TButton; btnCancel: TButton; vtList: TVirtualStringTree; Splitter1: TSplitter; pcMain: TPageControl; tabDate: TTabSheet; tabTime: TTabSheet; Label1: TLabel; Label2: TLabel; dpDateBegin: TDateTimePicker; dpDateEnd: TDateTimePicker; Label3: TLabel; Label4: TLabel; dpTimeBegin: TDateTimePicker; dpTimeEnd: TDateTimePicker; tabIpRange: TTabSheet; Label5: TLabel; mmIR_IpRange: TMemo; tabVNic: TTabSheet; Label6: TLabel; Memo1: TMemo; tabRDP: TTabSheet; tabWebb: TTabSheet; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; CheckBox5: TCheckBox; CheckBox6: TCheckBox; Label7: TLabel; Label8: TLabel; Memo2: TMemo; tabWlan: TTabSheet; tabUsb: TTabSheet; tabBT: TTabSheet; tabMTP: TTabSheet; tabApp: TTabSheet; tabAInst: TTabSheet; tabACap: TTabSheet; tabFile: TTabSheet; tabFolder: TTabSheet; tabLogoff: TTabSheet; tabScrSv: TTabSheet; tabScrLck: TTabSheet; tabSleep: TTabSheet; tabSecu: TTabSheet; tabVul: TTabSheet; Label9: TLabel; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; Memo3: TMemo; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; RadioButton4: TRadioButton; RadioButton5: TRadioButton; RadioButton6: TRadioButton; Memo4: TMemo; Label16: TLabel; RadioButton7: TRadioButton; RadioButton8: TRadioButton; RadioButton9: TRadioButton; Memo5: TMemo; Label17: TLabel; RadioButton10: TRadioButton; RadioButton11: TRadioButton; RadioButton12: TRadioButton; Memo6: TMemo; Label18: TLabel; RadioButton13: TRadioButton; RadioButton14: TRadioButton; Memo7: TMemo; Label19: TLabel; RadioButton15: TRadioButton; RadioButton16: TRadioButton; Memo8: TMemo; Label20: TLabel; Memo9: TMemo; Label21: TLabel; Label23: TLabel; RadioButton17: TRadioButton; RadioButton18: TRadioButton; RadioButton19: TRadioButton; Memo10: TMemo; CheckBox1: TCheckBox; CheckBox7: TCheckBox; CheckBox8: TCheckBox; CheckBox9: TCheckBox; Label24: TLabel; Label25: TLabel; Label26: TLabel; Label27: TLabel; Label28: TLabel; Label29: TLabel; Label30: TLabel; CheckBox10: TCheckBox; Edit1: TEdit; ÃÊ: TLabel; CheckBox11: TCheckBox; Edit2: TEdit; Label31: TLabel; CheckBox12: TCheckBox; Edit3: TEdit; Label32: TLabel; CheckBox13: TCheckBox; Edit4: TEdit; Label33: TLabel; CheckBox14: TCheckBox; Edit5: TEdit; Label34: TLabel; CheckBox15: TCheckBox; Edit6: TEdit; Label35: TLabel; 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 } SelCaKind_: TCtxAwareKind; public { Public declarations } Constructor Create(aOwner: TComponent); override; procedure RefreshPolicy(nCate: Integer); property SelectedCaKind: TCtxAwareKind read SelCaKind_; end; implementation uses Define, Tocsg.VirtualTreeViewUtil, System.DateUtils; {$R *.dfm} Constructor TFrmCaPolicySel.Create(aOwner: TComponent); procedure InitCtrls; var i: Integer; begin for i := 0 to pcMain.PageCount - 1 do pcMain.Pages[i].TabVisible := false; dpDateBegin.Date := Now; dpDateEnd.Date := IncDay(dpDateBegin.Date, 30); dpTimeBegin.Time := EncodeDateTime(1981, 11, 8, 9, 0, 0, 0); dpTimeEnd.Time := EncodeDateTime(1981, 11, 8, 18, 0, 0, 0); end; begin Inherited Create(aOwner); SelCaKind_ := cakUnknown; InitCtrls; end; procedure TFrmCaPolicySel.RefreshPolicy(nCate: Integer); procedure AddCateEnt(sCaption: String; aKind: TCtxAwareKind); var pData: PCateEnt; 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('³¯Â¥', cakDate); AddCateEnt('½Ã°£', cakTime); end; 2 : begin AddCateEnt('IP ¹üÀ§ ÁøÀÔ', cakIpRange); AddCateEnt('¹«¼± ³×Æ®¿öÅ©', cakWlan); AddCateEnt('°¡»ó NIC Ȱ¼º', cakVNic); AddCateEnt('À¥ºê¶ó¿ìÀú', cakWebb); AddCateEnt('¿ø°Ý µ¥½ºÅ©Åé ¿¬°á', cakRdp); end; 3 : begin AddCateEnt('USB', cakUSB); AddCateEnt('ºí·çÅõ½º', cakBT); AddCateEnt('MTP', cakMTP); end; 4 : begin AddCateEnt('ÇÁ·Î¼¼½º', cakApp); AddCateEnt('ÇÁ·Î±×·¥ ĸ¼Ç', cakAppCap); AddCateEnt('ÇÁ·Î±×·¥ ¼³Ä¡', CakAppInst); end; 5 : begin AddCateEnt('ÆÄÀÏ', cakFile); AddCateEnt('Æú´õ', cakFolder); end; 6 : begin AddCateEnt('·Î±×¿ÀÇÁ', cakLogoff); AddCateEnt('È­¸é º¸È£±â On', cakScrSv); AddCateEnt('Àá±ÝÈ­¸é On', cakScrLck); AddCateEnt('¼ö¸é¸ðµå', cakSleep); AddCateEnt('º¸¾È¸ðµå', cakSecu); AddCateEnt('Ãë¾à¸ðµå', cakVul); end; end; pNode := vtList.GetFirst; if pNode <> nil then begin vtList.Selected[pNode] := true; vtList.FocusedNode := pNode; end; finally vtList.EndUpdate; end; end; procedure TFrmCaPolicySel.btnCancelClick(Sender: TObject); begin if (Owner <> nil) and (Owner is TWinControl) then PostMessage(TWinControl(Owner).Handle, WM_CAPOLICY_DLG_CANCEL, 0, 0); end; procedure TFrmCaPolicySel.vtListFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); var pData: PCateEnt; begin if Node = nil then exit; pData := Sender.GetNodeData(Node); case pData.Kind of cakDate : pcMain.ActivePage := tabDate; cakTime : pcMain.ActivePage := tabTime; cakIpRange : pcMain.ActivePage := tabIpRange; cakWlan : pcMain.ActivePage := tabWlan; cakVNic : pcMain.ActivePage := tabVNic; cakRdp : pcMain.ActivePage := tabRDP; cakWebb : pcMain.ActivePage := tabWebb; cakUSB : pcMain.ActivePage := tabUsb; cakBT : pcMain.ActivePage := tabBT; cakMTP : pcMain.ActivePage := tabMTP; cakApp : pcMain.ActivePage := tabApp; cakAppInst : pcMain.ActivePage := tabAInst; cakAppCap : pcMain.ActivePage := tabACap; cakFile : pcMain.ActivePage := tabFile; cakFolder : pcMain.ActivePage := tabFolder; cakLogoff : pcMain.ActivePage := tabLogoff; cakScrSv : pcMain.ActivePage := tabScrSv; cakScrLck : pcMain.ActivePage := tabScrLck; cakSleep : pcMain.ActivePage := tabSleep; cakSecu : pcMain.ActivePage := tabSecu; cakVul : pcMain.ActivePage := tabVul; end; end; procedure TFrmCaPolicySel.vtListFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var pData: PCateEnt; begin pData := Sender.GetNodeData(Node); Finalize(pData^); end; procedure TFrmCaPolicySel.vtListGetHint(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: string); begin HintText := vtList.Text[Node, Column]; end; procedure TFrmCaPolicySel.vtListGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer); begin NodeDataSize := SizeOf(TCateEnt); end; procedure TFrmCaPolicySel.vtListGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); var pData: PCateEnt; begin if Column = 0 then begin pData := Sender.GetNodeData(Node); CellText := pData.sCaption; end; end; procedure TFrmCaPolicySel.btnOkClick(Sender: TObject); var pNode: PVirtualNode; pData: PCateEnt; 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); SelCaKind_ := pData.Kind; PostMessage(TWinControl(Owner).Handle, WM_CAPOLICY_DLG_OK, 0, 0); end; end; end.