165 lines
3.8 KiB
Plaintext
165 lines
3.8 KiB
Plaintext
unit DSelRdpDest;
|
||
|
||
interface
|
||
|
||
uses
|
||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
|
||
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, VirtualTrees, Vcl.ExtCtrls,
|
||
RSecuClient;
|
||
|
||
const
|
||
WM_RESP_DESTLIST = WM_USER + 3945;
|
||
|
||
type
|
||
PDestEnt = ^TDestEnt;
|
||
TDestEnt = record
|
||
sIp,
|
||
sEmpNo,
|
||
sAccount,
|
||
sComName: String;
|
||
end;
|
||
|
||
TDlgSelRdpDest = class(TForm)
|
||
pnClient: TPanel;
|
||
pnBottom: TPanel;
|
||
vtList: TVirtualStringTree;
|
||
btnOk: TButton;
|
||
btnCancel: TButton;
|
||
procedure vtListGetNodeDataSize(Sender: TBaseVirtualTree;
|
||
var NodeDataSize: Integer);
|
||
procedure vtListFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
|
||
procedure vtListGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
|
||
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
|
||
procedure btnOkClick(Sender: TObject);
|
||
private
|
||
{ Private declarations }
|
||
Client_: TRSecuClient;
|
||
sSelDestIp_: String;
|
||
procedure RequestDestList;
|
||
public
|
||
{ Public declarations }
|
||
Constructor Create(aOwner: TComponent; aClient: TRSecuClient);
|
||
|
||
procedure process_WM_RESP_DESTLIST(var msg: TMessage); Message WM_RESP_DESTLIST;
|
||
|
||
property SelDestIp: String read sSelDestIp_;
|
||
end;
|
||
|
||
var
|
||
DlgSelRdpDest: TDlgSelRdpDest;
|
||
|
||
implementation
|
||
|
||
uses
|
||
GlobalSocketDefine, Tocsg.Packet, Tocsg.Exception, Tocsg.VTUtil,
|
||
superobject;
|
||
|
||
{$R *.dfm}
|
||
|
||
Constructor TDlgSelRdpDest.Create(aOwner: TComponent; aClient: TRSecuClient);
|
||
begin
|
||
Inherited Create(aOwner);
|
||
sSelDestIp_ := '';
|
||
Client_ := aClient;
|
||
RequestDestList;
|
||
end;
|
||
|
||
procedure TDlgSelRdpDest.RequestDestList;
|
||
var
|
||
Send: ISendPacket;
|
||
begin
|
||
Send := TTgPacket.Create(RS_REQ_RDP_DESTLIST);
|
||
Send.Handle := Handle;
|
||
Send.WndMessage := WM_RESP_DESTLIST;
|
||
Send.S['EmpNo'] := Client_.EmpNo;
|
||
gClient.SendPacket(Send);
|
||
end;
|
||
|
||
procedure TDlgSelRdpDest.btnOkClick(Sender: TObject);
|
||
var
|
||
pNode: PVirtualNode;
|
||
pData: PDestEnt;
|
||
begin
|
||
pNode := vtList.GetFirstSelected;
|
||
if pNode = nil then
|
||
begin
|
||
MessageBox(Handle, PChar('<27><><EFBFBD><EFBFBD> PC<50><43> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽʽÿ<CABD>.'), PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
pData := vtList.GetNodeData(pNode);
|
||
sSelDestIp_ := pData.sIp;
|
||
|
||
ModalResult := mrOk;
|
||
end;
|
||
|
||
procedure TDlgSelRdpDest.vtListFreeNode(Sender: TBaseVirtualTree;
|
||
Node: PVirtualNode);
|
||
var
|
||
pData: PDestEnt;
|
||
begin
|
||
pData := Sender.GetNodeData(Node);
|
||
Finalize(pData^);
|
||
end;
|
||
|
||
procedure TDlgSelRdpDest.vtListGetNodeDataSize(Sender: TBaseVirtualTree;
|
||
var NodeDataSize: Integer);
|
||
begin
|
||
NodeDataSize := SizeOf(TDestEnt);
|
||
end;
|
||
|
||
procedure TDlgSelRdpDest.vtListGetText(Sender: TBaseVirtualTree;
|
||
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
|
||
var CellText: string);
|
||
var
|
||
pData: PDestEnt;
|
||
begin
|
||
pData := Sender.GetNodeData(Node);
|
||
|
||
case Column of
|
||
0 : CellText := IntToStr(Node.Index + 1);
|
||
1 : CellText := pData.sIp;
|
||
2 : CellText := pData.sEmpNo;
|
||
3 : CellText := pData.sAccount;
|
||
4 : CellText := pData.sComName;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgSelRdpDest.process_WM_RESP_DESTLIST(var msg: TMessage);
|
||
var
|
||
Rcv: IRcvPacket;
|
||
i: Integer;
|
||
pData: PDestEnt;
|
||
begin
|
||
try
|
||
Rcv := IRcvPacket(msg.LParam);
|
||
|
||
vtList.BeginUpdate;
|
||
try
|
||
VT_Clear(vtList);
|
||
|
||
if Rcv.O['List'] = nil then
|
||
exit;
|
||
|
||
if Rcv.O['List'].DataType <> stArray then
|
||
exit;
|
||
|
||
for i := 0 to Rcv.A['List'].Length - 1 do
|
||
begin
|
||
pData := VT_AddChildData(vtList);
|
||
pData.sIp := Rcv.A['List'].O[i].S['IP'];
|
||
pData.sEmpNo := Rcv.A['List'].O[i].S['EmpNo'];
|
||
pData.sAccount := Rcv.A['List'].O[i].S['Account'];
|
||
pData.sComName := Rcv.A['List'].O[i].S['ComName'];
|
||
end;
|
||
finally
|
||
vtList.EndUpdate;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_RESP_DESTLIST()');
|
||
end;
|
||
end;
|
||
|
||
end.
|