老兄:
谢谢!
程序我是从delphi的例子改的,因为,只是试着写,所以比较乱,请你耐心点!
unit strmdem;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, NMStrm,
ExtDlgs, StdCtrls, Psock, ExtCtrls, ComCtrls,StrUtils, Buttons, Menus,
OleCtnrs, DB, ADODB;
Type TNodeData=^NodeData;
NodeData=Record
Mark:String;
Key:String;
ParentKey:string;
MachIP:string;
MachName:string;
end;
type
TForm1 = class(TForm)
nmMsg: TNMStrm;
nmsMsg: TNMStrmServ;
StatusBar1: TStatusBar;
OpenDialog1: TOpenDialog;
tvwMember: TTreeView;
Splitter1: TSplitter;
PageControl1: TPageControl;
tabMsg: TTabSheet;
tabFileSend: TTabSheet;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
redtMsgReceive: TRichEdit;
Splitter2: TSplitter;
Panel2: TPanel;
sbtnMsgSend: TSpeedButton;
mmMsgSend: TMemo;
tabFileReceiveWord: TTabSheet;
tabFileReceivePicture: TTabSheet;
tabFileReceiveOther: TTabSheet;
Image1: TImage;
redtReceive: TRichEdit;
nmFileWord: TNMStrm;
nmsFileWord: TNMStrmServ;
redtFileWordSend: TRichEdit;
munFileWordSend: TPopupMenu;
munFileWordSendSendFromFile: TMenuItem;
cntNetUsers: TADOConnection;
dtDept: TADODataSet;
dtUsers: TADODataSet;
munFileWordSendSend: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure nmsMsgMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure nmMsgMessageSent(Sender: TObject);
procedure nmMsgConnect(Sender: TObject);
procedure nmMsgDisconnect(Sender: TObject);
procedure nmMsgHostResolved(Sender: TComponent);
procedure nmMsgStatus(Sender: TComponent; Status: String);
procedure nmMsgPacketSent(Sender: TObject);
procedure nmMsgInvalidHost(var handled: Boolean);
procedure nmMsgConnectionFailed(Sender: TObject);
procedure nmsMsgClientContact(Sender: TObject);
procedure nmsMsgStatus(Sender: TComponent; Status: String);
procedure FormCreate(Sender: TObject);
procedure sbtnMsgSendClick(Sender: TObject);
procedure nmsFileWordMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
procedure mmMsgSendKeyPress(Sender: TObject; var Key: Char);
procedure FormShow(Sender: TObject);
procedure munFileWordSendSendFromFileClick(Sender: TObject);
procedure nmsFilePictureMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
procedure tvwMemberMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure munFileWordSendSendClick(Sender: TObject);
private
{ Private declarations }
NodeDatas:Array of TNodeData;
NodeCount:integer;
NodeIndex:integer; Function FindParentID(ParentID:String):integer;
Function SynchronizationChild(mTreeView:TTreeView;SelNode:TTreeNode):Boolean;
public
{ Public declarations }
end;var
Form1: TForm1;
SaveDialog:TSaveDialog;
implementationuses uSaveDlg;{$R *.DFM}
Function TForm1.SynchronizationChild(mTreeView:TTreeView;SelNode:TTreeNode):Boolean;//change child node'selected
Var
NodeData:TNodeData;
NextNode:TTreeNode;
NextNodeData:TNodeData;
Selfkey:String;
CurrentSelected:Boolean;
NextAgainIsChild:Boolean;
Begin
NodeData:=SelNode.Data;
SelfKey:=NodeData.Key;
CurrentSelected:=SelNode.Selected;
NextNode:=SelNode.GetNext;
NextNodeData:=NextNode.Data;
if NextNodeData.ParentKey =SelfKey then
Begin
NextNode.Selected:=CurrentSelected;
NextAgainIsChild:=true;
While NextAgainIsChild do
Begin
NextAgainIsChild:=false;
NextNode:=NextNode.GetNext;
if NextNode=nil then break;
NextNodeData:=NextNode.Data;
if NextNodeData.ParentKey =selfkey then
Begin
NextNode.Selected:=CurrentSelected;
NextAgainIsChild:=true;
end;
end;
end
Else
Begin
Result:=False;
end;
end;
Function TForm1.FindParentID(ParentID:String):Integer;
Var
i:integer;
ParentData:TNodeData;
ParentIndex:integer;
Begin
parentIndex:=-1;
For i:=0 to tvwMember.Items.Count-1 do
Begin
parentData:=tvwMember.Items.Item[i].Data;
if ParentData.Key=parentID then
Begin
ParentIndex:=i;
break;
end;
end;
FindParentID:=ParentIndex;
end;
procedure TForm1.Button1Click(Sender: TObject);
//var
//MyFStream: TFileStream;
////MyStream:TMemoryStream;
begin
{
If OpenDialog1.Execute then
Begin
NMStrm1.Host := edit2.Text;
//NMStrm1.FromName := Edit1.Text;
NMStrm1.FromName:=OpenDialog1.FileName;
MyFStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
try
NMStrm1.PostIt(MyFStream);
finally
MyFStream.Free;
end;
end;}
end;procedure TForm1.nmsMsgMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
mMsg:TStrings;
begin
mMsg:=TStringList.Create;
try
redtMsgReceive.Lines.Add('^^^^^^'+sFrom+'^^^^^^');
mMsg.LoadFromStream(strm);
redtMsgReceive.Lines.AddStrings(mMsg);
//redtMsgReceive.CaretPos.Y:=redtMsgReceive.Lines.Count;
finally
mMsg.Free;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
fsavedlg.ShowModal;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
i:integer;
begin
For i:=0 to NodeIndex do //High(NodeDatas)
Dispose(NodeDatas[i]);
end;procedure TForm1.nmMsgDisconnect(Sender: TObject);
begin
If StatusBar1 <> nil then
StatusBar1.SimpleText := 'Disconnected';
end;procedure TForm1.nmMsgHostResolved(Sender: TComponent);
begin
StatusBar1.SimpleText := 'Host Resolved';
end;procedure TForm1.nmMsgStatus(Sender: TComponent; Status: String);
begin
If StatusBar1 <> nil then
StatusBar1.SimpleText := status;
end;procedure TForm1.nmMsgPacketSent(Sender: TObject);
begin
StatusBar1.SimpleText := IntToStr(NMMsg.BytesSent)+' of '+IntToStr(NMMsg.BytesTotal)+' sent';
end;procedure TForm1.nmMsgInvalidHost(var handled: Boolean);
var
TmpStr: String;
begin
If InputQuery('Invalid Host!', 'Specify a new host:', TmpStr) then
Begin
NMMsg.Host := TmpStr;
Handled := TRUE;
End;
end;procedure TForm1.nmMsgConnectionFailed(Sender: TObject);
begin
ShowMessage('Connection Failed');
end;
谢谢!
程序我是从delphi的例子改的,因为,只是试着写,所以比较乱,请你耐心点!
unit strmdem;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, NMStrm,
ExtDlgs, StdCtrls, Psock, ExtCtrls, ComCtrls,StrUtils, Buttons, Menus,
OleCtnrs, DB, ADODB;
Type TNodeData=^NodeData;
NodeData=Record
Mark:String;
Key:String;
ParentKey:string;
MachIP:string;
MachName:string;
end;
type
TForm1 = class(TForm)
nmMsg: TNMStrm;
nmsMsg: TNMStrmServ;
StatusBar1: TStatusBar;
OpenDialog1: TOpenDialog;
tvwMember: TTreeView;
Splitter1: TSplitter;
PageControl1: TPageControl;
tabMsg: TTabSheet;
tabFileSend: TTabSheet;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
redtMsgReceive: TRichEdit;
Splitter2: TSplitter;
Panel2: TPanel;
sbtnMsgSend: TSpeedButton;
mmMsgSend: TMemo;
tabFileReceiveWord: TTabSheet;
tabFileReceivePicture: TTabSheet;
tabFileReceiveOther: TTabSheet;
Image1: TImage;
redtReceive: TRichEdit;
nmFileWord: TNMStrm;
nmsFileWord: TNMStrmServ;
redtFileWordSend: TRichEdit;
munFileWordSend: TPopupMenu;
munFileWordSendSendFromFile: TMenuItem;
cntNetUsers: TADOConnection;
dtDept: TADODataSet;
dtUsers: TADODataSet;
munFileWordSendSend: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure nmsMsgMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure nmMsgMessageSent(Sender: TObject);
procedure nmMsgConnect(Sender: TObject);
procedure nmMsgDisconnect(Sender: TObject);
procedure nmMsgHostResolved(Sender: TComponent);
procedure nmMsgStatus(Sender: TComponent; Status: String);
procedure nmMsgPacketSent(Sender: TObject);
procedure nmMsgInvalidHost(var handled: Boolean);
procedure nmMsgConnectionFailed(Sender: TObject);
procedure nmsMsgClientContact(Sender: TObject);
procedure nmsMsgStatus(Sender: TComponent; Status: String);
procedure FormCreate(Sender: TObject);
procedure sbtnMsgSendClick(Sender: TObject);
procedure nmsFileWordMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
procedure mmMsgSendKeyPress(Sender: TObject; var Key: Char);
procedure FormShow(Sender: TObject);
procedure munFileWordSendSendFromFileClick(Sender: TObject);
procedure nmsFilePictureMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
procedure tvwMemberMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure munFileWordSendSendClick(Sender: TObject);
private
{ Private declarations }
NodeDatas:Array of TNodeData;
NodeCount:integer;
NodeIndex:integer; Function FindParentID(ParentID:String):integer;
Function SynchronizationChild(mTreeView:TTreeView;SelNode:TTreeNode):Boolean;
public
{ Public declarations }
end;var
Form1: TForm1;
SaveDialog:TSaveDialog;
implementationuses uSaveDlg;{$R *.DFM}
Function TForm1.SynchronizationChild(mTreeView:TTreeView;SelNode:TTreeNode):Boolean;//change child node'selected
Var
NodeData:TNodeData;
NextNode:TTreeNode;
NextNodeData:TNodeData;
Selfkey:String;
CurrentSelected:Boolean;
NextAgainIsChild:Boolean;
Begin
NodeData:=SelNode.Data;
SelfKey:=NodeData.Key;
CurrentSelected:=SelNode.Selected;
NextNode:=SelNode.GetNext;
NextNodeData:=NextNode.Data;
if NextNodeData.ParentKey =SelfKey then
Begin
NextNode.Selected:=CurrentSelected;
NextAgainIsChild:=true;
While NextAgainIsChild do
Begin
NextAgainIsChild:=false;
NextNode:=NextNode.GetNext;
if NextNode=nil then break;
NextNodeData:=NextNode.Data;
if NextNodeData.ParentKey =selfkey then
Begin
NextNode.Selected:=CurrentSelected;
NextAgainIsChild:=true;
end;
end;
end
Else
Begin
Result:=False;
end;
end;
Function TForm1.FindParentID(ParentID:String):Integer;
Var
i:integer;
ParentData:TNodeData;
ParentIndex:integer;
Begin
parentIndex:=-1;
For i:=0 to tvwMember.Items.Count-1 do
Begin
parentData:=tvwMember.Items.Item[i].Data;
if ParentData.Key=parentID then
Begin
ParentIndex:=i;
break;
end;
end;
FindParentID:=ParentIndex;
end;
procedure TForm1.Button1Click(Sender: TObject);
//var
//MyFStream: TFileStream;
////MyStream:TMemoryStream;
begin
{
If OpenDialog1.Execute then
Begin
NMStrm1.Host := edit2.Text;
//NMStrm1.FromName := Edit1.Text;
NMStrm1.FromName:=OpenDialog1.FileName;
MyFStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
try
NMStrm1.PostIt(MyFStream);
finally
MyFStream.Free;
end;
end;}
end;procedure TForm1.nmsMsgMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
mMsg:TStrings;
begin
mMsg:=TStringList.Create;
try
redtMsgReceive.Lines.Add('^^^^^^'+sFrom+'^^^^^^');
mMsg.LoadFromStream(strm);
redtMsgReceive.Lines.AddStrings(mMsg);
//redtMsgReceive.CaretPos.Y:=redtMsgReceive.Lines.Count;
finally
mMsg.Free;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
fsavedlg.ShowModal;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
i:integer;
begin
For i:=0 to NodeIndex do //High(NodeDatas)
Dispose(NodeDatas[i]);
end;procedure TForm1.nmMsgDisconnect(Sender: TObject);
begin
If StatusBar1 <> nil then
StatusBar1.SimpleText := 'Disconnected';
end;procedure TForm1.nmMsgHostResolved(Sender: TComponent);
begin
StatusBar1.SimpleText := 'Host Resolved';
end;procedure TForm1.nmMsgStatus(Sender: TComponent; Status: String);
begin
If StatusBar1 <> nil then
StatusBar1.SimpleText := status;
end;procedure TForm1.nmMsgPacketSent(Sender: TObject);
begin
StatusBar1.SimpleText := IntToStr(NMMsg.BytesSent)+' of '+IntToStr(NMMsg.BytesTotal)+' sent';
end;procedure TForm1.nmMsgInvalidHost(var handled: Boolean);
var
TmpStr: String;
begin
If InputQuery('Invalid Host!', 'Specify a new host:', TmpStr) then
Begin
NMMsg.Host := TmpStr;
Handled := TRUE;
End;
end;procedure TForm1.nmMsgConnectionFailed(Sender: TObject);
begin
ShowMessage('Connection Failed');
end;
解决方案 »
- 高分求将一段VB代码转换为DELPHI代码
- 怎么用Delphi画方格图啊?大哥哥们帮忙啊,急死人了
- delphi 6 中关于dbgrid的数据导出到excel的问题,谢谢大家
- 怎么发送数据到指定的服务器?
- 控件高手请进:明明编译通过的控件,为什么使用的时候工程文件提示找不到DesignIntf.dcu
- 高分求救!!
- netwolfds(晓竹)请来拿分
- ImgEdit在ActiveForm中的创建问题,COM接口问题
- 如何用delphi2007做企业通讯web平台
- 找mmtools控件,找到后另有重谢
- 请问这是什么消息?一定给分
- luoweicaisd(笑三少)和 cysinsohu(大懒虫)请进来拿分!
begin
NMSMsg.ReportLevel := Status_Basic;
NMSMsg.TimeOut := 90000;
StatusBar1.SimpleText := 'Client connected';
end;procedure TForm1.nmsMsgStatus(Sender: TComponent; Status: String);
begin
If StatusBar1 <> nil then
StatusBar1.SimpleText := status;
end;procedure TForm1.FormCreate(Sender: TObject);
Var
sCn:String;
sDataBaseName:String;
sCommText:String;
begin
sDataBaseName:=ExtractFilePath(application.ExeName)+'NetUsers.lcw';
sCn:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
sCn:=sCn+sDataBaseName+';Persist Security Info=False';
cntNetUsers.ConnectionString:=sCn;
cntNetUsers.Connected:=true; sCommText:='Select * from Depts Order By AppearID';
dtDept.CommandText:=sCommText;
dtDept.Active:=true;
sCommText:='Select * from UserIp Order By DeptID,NodeOrder';
dtUsers.CommandText:=sCommText;
dtUsers.Active:=true;
NodeCount:=dtDept.RecordCount+dtUsers.RecordCount;
end;procedure TForm1.sbtnMsgSendClick(Sender: TObject);
var
MyStream: TMemoryStream;
i:Integer;
NodeData:TNodeData;
Begin
For i:=0 to tvwMember.Items.Count -1 do
Begin
if tvwMember.Items.Item[i].Selected then
Begin
NodeData:=tvwMember.Items.Item[i].Data;
if NodeData.Mark = 'u' then
Begin
NMMsg.FromName:=edit1.Text;
NMMsg.Host := NodeData.MachIP;
MyStream:=TMemoryStream.Create;
mmMsgSend.Lines.SaveToStream(MyStream);
try
nmMsg.PostIt(MyStream);
Finally
MyStream.Free;
end;
end;
end;
end;
end;
procedure TForm1.nmsFileWordMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
MyFStream: TFileStream;
NewName:String;
ExtName:String;
begin
NewName:=sFrom;
If FileExists(sFrom) then
Begin
ExtName:=RightStr(sFrom,4);
NewName:=ExtractFilePath(Application.ExeName) + ExtractFileName(sFrom) +FormatDateTime('mmdd',Date)+ExtName;
//MessageDlg('文件 '+ sFrom+ '已经存在,新到文件'+sFrom+'保存为'+NewName,mtConfirmation,[mbYes,mbNo],0);
//fSaveDlg.ShowModal; end;
fSaveDlg.ShowModal;
MyFStream := TFileStream.Create(NewName, fmCreate);
try
MyFStream.CopyFrom(strm, strm.size);
finally
MYFStream.Free;
//m.Free;
end;
if (ExtName='.bmp') or (ExtName='.ico') or (extName='emf') or (extName='wmf') then
Begin
Image1.Picture.LoadFromFile(NewName);
PageControl1.ActivePageIndex:=3;
end
else if (extName= '.rtf') or (ExtName='.txt') then
Begin
redtReceive.Lines.LoadFromFile(NewName);
pageControl1.ActivePageIndex:=2;
end
else
Begin
end;
end;procedure TForm1.mmMsgSendKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
sbtnMsgSend.Click;
end;
end;procedure TForm1.FormShow(Sender: TObject);
Var
nNode:TTreeNode;
ParentID,SelfID,SelfText:String;
ParentIndex:integer;
begin
ShowWindow(Application.Handle, SW_HIDE);
tvwMember.Items.Clear;
SetLength(NodeDatas,NodeCount);
dtDept.First;
NodeIndex:=-1;
While Not dtDept.Eof do
Begin
NodeIndex:=NodeIndex+1;
New(NodeDatas[NodeIndex]);
nNode:=tvwMember.Items.Add(nil,dtDept.fieldbyname('DeptName').AsString);
NodeDatas[NodeIndex].Mark:='d';
NodeDatas[NodeIndex].Key:=dtDept.fieldbyName('DeptID').AsString;
nNode.Data:=NodeDatas[NodeIndex];
dtDept.Next;
end;
dtUsers.First;
While Not dtUsers.Eof do
Begin
ParentID:=dtUsers.fieldbyName('DeptID').AsString;
selfID:=dtUsers.fieldbyname('UserID').AsString;
selfText:=dtUsers.fieldbyname('UserName').AsString;
ParentIndex:=FindParentID(ParentID);
nNode:=tvwMember.Items.AddChild(tvwMember.Items[ParentIndex],selfText);
NodeIndex:=NodeIndex+1;
New(NodeDatas[nodeIndex]);
NodeDatas[NodeIndex].Key:=dtUsers.fieldbyName('UserID').AsString;
Nodedatas[NodeIndex].Mark:='u';
NodeDatas[NodeIndex].MachIP:=dtUsers.fieldbyName('MachIP').AsString;
NodeDatas[NodeIndex].MachName:=dtUsers.fieldbyname('MachName').AsString;
NodeDatas[NodeIndex].ParentKey:=dtUsers.fieldbyName('DeptID').AsString;
nNode.Data:=NodeDatas[NodeIndex];
dtUsers.Next;
end;
end;procedure TForm1.munFileWordSendSendFromFileClick(Sender: TObject);
Var
MyFStream:TFileStream;
i:integer;
NodeData:TNodeData;
eFileName:String;
begin
If OpenDialog1.Execute then
Begin
eFileName:=ExtractFileName(OpenDialog1.FileName);
For i:=0 to tvwMember.Items.Count -1 do
Begin
if tvwMember.Items.Item[i].Selected then
Begin
NodeData:=tvwMember.Items.Item[i].Data;
NMFileWord.FromName:=eFileName;
if NodeData.Mark = 'u' then
Begin
NMFileWord.Host := NodeData.MachIP;
MyFStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
try
nmFileWord.PostIt(MyFStream);
Finally
MyFStream.Free;
end;
end;
end;
end;
end;
end;procedure TForm1.nmsFilePictureMSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
MyFStream: TFileStream;
NewName:String;
ExtName:String;
SaveDialog:TSaveDialog;
begin
NewName:=sFrom;
If FileExists(sFrom) then
Begin
ExtName:=RightStr(sFrom,4);
NewName:=ExtractFilePath(Application.ExeName) + ExtractFileName(sFrom) +FormatDateTime('mmdd',Date)+ExtName;
MessageDlg('文件 '+ sFrom+ '已经存在,新到文件'+sFrom+'保存为'+NewName,mtConfirmation,[mbYes,mbNo],0);
end;
MyFStream := TFileStream.Create(NewName, fmCreate);
try
MyFStream.CopyFrom(strm, strm.size);
finally
MYFStream.Free;
end;
Image1.Picture.LoadFromFile(NewName);
pageControl1.ActivePageIndex:=3;
end;
procedure TForm1.tvwMemberMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
TestHit:THitTests;
SelNode:TTreeNode;
i:integer;
begin
if ssCtrl in Shift then
Begin
TestHit:=tvwMember.GetHitTestInfoAt(x,y);
if (htOnItem in TestHit) or (htOnLabel in TestHit) then
Begin
SelNode:=tvwMember.Selected;
SynChronizationChild(tvwMember,SelNode);
end
else if (htNoWhere in TestHit) then
begin
For i:=0 to tvwMember.Items.Count -1 do
Begin
tvwMember.Items.Item[i].Selected:=false;
end;
end;
end;end;procedure TForm1.munFileWordSendSendClick(Sender: TObject);
Var
MyStream:TMemoryStream;
i:integer;
NodeData:TNodeData;
begin
For i:=0 to tvwMember.Items.Count -1 do
Begin
if tvwMember.Items.Item[i].Selected then
Begin
NodeData:=tvwMember.Items.Item[i].Data;
if NodeData.Mark = 'u' then
Begin
NMFileWord.FromName:=edit1.Text;
NMFileWord.Host := NodeData.MachIP;
MyStream:=TMemoryStream.Create;
redtFileWordSend.Lines.SaveToStream(MyStream);
try
nmFileWord.PostIt(MyStream);
Finally
MyStream.Free;
end;
end;
end;
end;end;
end.
fsavedlg.ShowModal;
试一下
fsavedlg.ShowModal;
试一下
fsavedlg.ShowModal;
试一下