BSOne.SFC/Tocsg.Module/RemoteSecu/EXE_RemoteSecuClient/DSelRdpDest.pas

165 lines
3.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.