下面这段代码导致windows无法正常关机,看是我怎么也找不出原因
哪位高手帮忙看看
谢谢了
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TFlatEditUnit, TFlatButtonUnit, ExtCtrls,
TFlatPanelUnit, TFlatTitlebarUnit, TFlatSpinEditUnit, ComCtrls,
TFlatMemoUnit, TFlatListBoxUnit,winsock, NMUDP, TFlatCheckListBoxUnit,
AVLabelPack, CoolTrayIcon, Menus, MPlayer,Registry;
type
TNetResourceArray=^TNetResource;
TForm1 = class(TForm)
FlatTitlebar1: TFlatTitlebar;
FlatPanel1: TFlatPanel;
FlatButton1: TFlatButton;
UserList: TFlatListBox;
Flatmemo1: TFlatMemo;
StatusBar1: TStatusBar;
udp1: TNMUDP;
FlatButton2: TFlatButton;
TextBox: TFlatEdit;
FlatButton3: TFlatButton;
FlatButton4: TFlatButton;
FlatPanel2: TFlatPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Up: TLabel;
Down: TLabel;
Trayicon: TCoolTrayIcon;
PopupMenu1: TPopupMenu;
About2: TMenuItem;
Exit1: TMenuItem;
Sound: TAVLedLabel;
Sound1: TMenuItem;
StayOnTop1: TMenuItem;
NoTrouble1: TMenuItem;
player: TMediaPlayer;
procedure FlatButton1Click(Sender: TObject);
procedure AddCumputer(Name:String;IP:string);
procedure FlatButton2Click(Sender: TObject);
procedure udp1DataReceived(Sender: TComponent; NumberBytes: Integer;FromIP: String; Port: Integer);
procedure sendMsg(msgbody:string;ip:string);
procedure readMsg(msgbody:string;ip:string);
function newMate(ip:string;name:string):boolean;
procedure FormCreate(Sender: TObject);
procedure freshComList();
procedure FlatButton3Click(Sender: TObject);
procedure FlatButton4Click(Sender: TObject);
procedure showpm(name:string;ip:string;msg:string);
procedure Flatmemo1Change(Sender: TObject);
procedure TextBoxKeyPress(Sender: TObject; var Key: Char);
procedure UpClick(Sender: TObject);
procedure DownClick(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure About2Click(Sender: TObject);
procedure playit(kind:string);
procedure StayOnTop1Click(Sender: TObject);
procedure Sound1Click(Sender: TObject);
procedure NoTrouble1Click(Sender: TObject);
procedure TrayiconClick(Sender: TObject);
procedure addtoregedit();
procedure SoundChangeState(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
AllCom:array of array of string;
AllComNum,NewComCoun,TempTextNum:integer;
newcomlist:array of string;
myname:string;
TempText:array of string;
runup: boolean=true;
implementation
uses unit2,unit3,unit4;
{$R *.dfm}procedure TForm1.FlatButton1Click(Sender: TObject);
begin
hide;
end;procedure TForm1.FlatButton2Click(Sender: TObject);
var
refresh:TLoading;i:integer;
begin
SetLength(AllCom,0,0);
AllComNum:=0;
FlatMemo1.Clear;
UserList.Items.Clear;
refresh:=Tloading.Create(self);
refresh.Top :=screen.Height - refresh.Height-32;
refresh.Left :=screen.Width-refresh.Width-3 ;
refresh.Show;
for i:=0 to 255 do
begin
refresh.Flatgauge1.Progress:=i*100 div 255;
refresh.label1.Caption:='192.168.0.'+inttostr(i);
sendmsg('^_^!^o^<m>cheers+'+myname,'192.168.0.'+inttostr(i));
end;
refresh.Close;
end;procedure Tform1.AddCumputer(Name:String;IP:string);
begin
NewComCoun:=NewComCoun+1;
setlength(newcomlist,NewComCoun);
newcomlist[NewComCoun-1]:=IP;
end;procedure TForm1.udp1DataReceived(Sender: TComponent;NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
TmpStr: String;
begin
statusbar1.Panels[2].Text :='Receive Data From '+fromip+ ' ('+inttostr(NumberBytes)+' Bytes)';
if numberbytes>-1 then
begin
MyStream := TMemoryStream.Create;
try
UDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
readmsg(TmpStr,FromIp);
finally
MyStream.Free;
end;
end;
end;procedure TForm1.readMsg(msgbody:string;ip:string);
var msg,todo:string;i,j:integer;
begin
if copy(msgbody,0,7)='^_^!^o^' then
begin
msg:=copy(msgbody,8,length(msgbody));
case msg[2] of
'm': //message
begin
todo:=copy(msgbody,11,length(msgbody));
todo:=copy(todo,0,pos('+',todo)-1);
if todo='cheers' then
if newmate(ip,copy(msgbody,pos('+',msgbody)+1,length(msgbody))) then
sendmsg('^_^!^o^<m>cheers+' + myname,ip)
else
sendmsg('^_^!^o^<m>cheers:)+'+myname,ip);
if todo='cheers:)' then newmate(ip,copy(msgbody,pos('+',msgbody)+1,length(msgbody)));
end;
't': //speaking
begin
if NOT form1.Showing then playIT('speak');
flatmemo1.Lines.Insert(0,(copy(msg,4,pos('+',msg)-4)+' : '+copy(msg,pos('+',msg)+1,length(msg))));
end;
'p': //Special Message
begin
playIT('SM');
if notrouble1.Checked then flatmemo1.Lines.Insert(0,'* user '+copy(msg,4,pos('+',msg)-4)+' sent you a Special Message to you : '+ copy(msg,pos('+',msg)+1,length(msg)))
else showPM(copy(msg,4,pos('+',msg)-4),ip,copy(msg,pos('+',msg)+1,length(msg)));
end;
'q': //someone quit
begin
for i:=0 to AllComNum-1 do
if AllCom[i,1]=ip then
begin
for j:=i to AllComNum-2 do
begin
AllCom[j,0]:=AllCom[j+1,0];
AllCom[j,1]:=AllCom[j+1,1];
end;
AllComNum:=AllComNum-1;
SetLength(AllCom,AllComNum,2);
Flatmemo1.Lines.Insert(0,'* User '+copy(msg,4,length(msg))+' ['+ip+']'+' has quit *');
playit('quit');
end;
freshComList;
end;
end;
end;
end;(未完,看下贴)
哪位高手帮忙看看
谢谢了
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TFlatEditUnit, TFlatButtonUnit, ExtCtrls,
TFlatPanelUnit, TFlatTitlebarUnit, TFlatSpinEditUnit, ComCtrls,
TFlatMemoUnit, TFlatListBoxUnit,winsock, NMUDP, TFlatCheckListBoxUnit,
AVLabelPack, CoolTrayIcon, Menus, MPlayer,Registry;
type
TNetResourceArray=^TNetResource;
TForm1 = class(TForm)
FlatTitlebar1: TFlatTitlebar;
FlatPanel1: TFlatPanel;
FlatButton1: TFlatButton;
UserList: TFlatListBox;
Flatmemo1: TFlatMemo;
StatusBar1: TStatusBar;
udp1: TNMUDP;
FlatButton2: TFlatButton;
TextBox: TFlatEdit;
FlatButton3: TFlatButton;
FlatButton4: TFlatButton;
FlatPanel2: TFlatPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Up: TLabel;
Down: TLabel;
Trayicon: TCoolTrayIcon;
PopupMenu1: TPopupMenu;
About2: TMenuItem;
Exit1: TMenuItem;
Sound: TAVLedLabel;
Sound1: TMenuItem;
StayOnTop1: TMenuItem;
NoTrouble1: TMenuItem;
player: TMediaPlayer;
procedure FlatButton1Click(Sender: TObject);
procedure AddCumputer(Name:String;IP:string);
procedure FlatButton2Click(Sender: TObject);
procedure udp1DataReceived(Sender: TComponent; NumberBytes: Integer;FromIP: String; Port: Integer);
procedure sendMsg(msgbody:string;ip:string);
procedure readMsg(msgbody:string;ip:string);
function newMate(ip:string;name:string):boolean;
procedure FormCreate(Sender: TObject);
procedure freshComList();
procedure FlatButton3Click(Sender: TObject);
procedure FlatButton4Click(Sender: TObject);
procedure showpm(name:string;ip:string;msg:string);
procedure Flatmemo1Change(Sender: TObject);
procedure TextBoxKeyPress(Sender: TObject; var Key: Char);
procedure UpClick(Sender: TObject);
procedure DownClick(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure About2Click(Sender: TObject);
procedure playit(kind:string);
procedure StayOnTop1Click(Sender: TObject);
procedure Sound1Click(Sender: TObject);
procedure NoTrouble1Click(Sender: TObject);
procedure TrayiconClick(Sender: TObject);
procedure addtoregedit();
procedure SoundChangeState(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
AllCom:array of array of string;
AllComNum,NewComCoun,TempTextNum:integer;
newcomlist:array of string;
myname:string;
TempText:array of string;
runup: boolean=true;
implementation
uses unit2,unit3,unit4;
{$R *.dfm}procedure TForm1.FlatButton1Click(Sender: TObject);
begin
hide;
end;procedure TForm1.FlatButton2Click(Sender: TObject);
var
refresh:TLoading;i:integer;
begin
SetLength(AllCom,0,0);
AllComNum:=0;
FlatMemo1.Clear;
UserList.Items.Clear;
refresh:=Tloading.Create(self);
refresh.Top :=screen.Height - refresh.Height-32;
refresh.Left :=screen.Width-refresh.Width-3 ;
refresh.Show;
for i:=0 to 255 do
begin
refresh.Flatgauge1.Progress:=i*100 div 255;
refresh.label1.Caption:='192.168.0.'+inttostr(i);
sendmsg('^_^!^o^<m>cheers+'+myname,'192.168.0.'+inttostr(i));
end;
refresh.Close;
end;procedure Tform1.AddCumputer(Name:String;IP:string);
begin
NewComCoun:=NewComCoun+1;
setlength(newcomlist,NewComCoun);
newcomlist[NewComCoun-1]:=IP;
end;procedure TForm1.udp1DataReceived(Sender: TComponent;NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
TmpStr: String;
begin
statusbar1.Panels[2].Text :='Receive Data From '+fromip+ ' ('+inttostr(NumberBytes)+' Bytes)';
if numberbytes>-1 then
begin
MyStream := TMemoryStream.Create;
try
UDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
readmsg(TmpStr,FromIp);
finally
MyStream.Free;
end;
end;
end;procedure TForm1.readMsg(msgbody:string;ip:string);
var msg,todo:string;i,j:integer;
begin
if copy(msgbody,0,7)='^_^!^o^' then
begin
msg:=copy(msgbody,8,length(msgbody));
case msg[2] of
'm': //message
begin
todo:=copy(msgbody,11,length(msgbody));
todo:=copy(todo,0,pos('+',todo)-1);
if todo='cheers' then
if newmate(ip,copy(msgbody,pos('+',msgbody)+1,length(msgbody))) then
sendmsg('^_^!^o^<m>cheers+' + myname,ip)
else
sendmsg('^_^!^o^<m>cheers:)+'+myname,ip);
if todo='cheers:)' then newmate(ip,copy(msgbody,pos('+',msgbody)+1,length(msgbody)));
end;
't': //speaking
begin
if NOT form1.Showing then playIT('speak');
flatmemo1.Lines.Insert(0,(copy(msg,4,pos('+',msg)-4)+' : '+copy(msg,pos('+',msg)+1,length(msg))));
end;
'p': //Special Message
begin
playIT('SM');
if notrouble1.Checked then flatmemo1.Lines.Insert(0,'* user '+copy(msg,4,pos('+',msg)-4)+' sent you a Special Message to you : '+ copy(msg,pos('+',msg)+1,length(msg)))
else showPM(copy(msg,4,pos('+',msg)-4),ip,copy(msg,pos('+',msg)+1,length(msg)));
end;
'q': //someone quit
begin
for i:=0 to AllComNum-1 do
if AllCom[i,1]=ip then
begin
for j:=i to AllComNum-2 do
begin
AllCom[j,0]:=AllCom[j+1,0];
AllCom[j,1]:=AllCom[j+1,1];
end;
AllComNum:=AllComNum-1;
SetLength(AllCom,AllComNum,2);
Flatmemo1.Lines.Insert(0,'* User '+copy(msg,4,length(msg))+' ['+ip+']'+' has quit *');
playit('quit');
end;
freshComList;
end;
end;
end;
end;(未完,看下贴)
解决方案 »
- 如何实现同一个应用程序只能打开一次
- delphi2010 启动时总是报 '''' is not a valid integer value
- 请问哪个打包工具可以检测提示用户关闭正在运行的软件?
- [超级难题]XP更改计算机名_别说SetComputerName,那个改的是NETBIOS的名字
- powerpoint 中定位
- 客户端如何判断一个服务已经运行
- 求购类似于联众的网络棋牌游戏
- 求‘点数字’游戏源代码=^_^=
- 为什么服务器ADODataSet的表已改变,可是客户ClientDataSet还是没变?
- 求一行C代码翻译成delphi代码!!谢谢!!
- TinyDB是个好冬冬,不过要是能支持SQL就更好了(满分)
- 在线等高手帮忙 VB\VC转DELPHI
var i:integer;
begin
result:=true;
for i:=0 to AllComNum-1 do
if AllCom[i,1]=ip then
begin
AllCom[i,0]:=name;
result:=false;
end;
if result then
begin
AllComNum:=AllComNum+1;
setlength(AllCom,AllComNum,2);
AllCom[AllComNum-1,0]:=name;
AllCom[AllComNum-1,1]:=ip;
flatmemo1.Lines.Insert(0,'* '+name+' ['+ip+'] enterd ^o^');
end;
freshComList();
end;procedure Tform1.sendMsg(msgbody:string;ip:string);
var
MyStream: TMemoryStream;
begin
UDP1.ReportLevel := Status_Basic;
UDP1.RemotePort:= 9933;
MyStream := TMemoryStream.Create;
try
MyStream.Write(msgbody[1],length(msgbody));
UDP1.RemoteHost := ip;
UDP1.SendStream(MyStream);
finally
end;
MyStream.Free;
end;procedure Tform1.freshComList ();
var i:integer;
begin
UserList.Items.Clear;
UserList.Items.Append('-= All Users =-');
for i:=0 to AllComNum-1 do
UserList.Items.Append(AllCom[i,0]);
UserList.Selected[0]:=true;
UserList.ItemIndex:=0;
end;procedure TForm1.FormCreate(Sender: TObject);
var
ComputerName: PChar;
size: DWord;
begin
addtoregedit;
TrayIcon.HideTaskbarIcon;
TempTextNum:=0;
TrayIcon.IconVisible:=true;
GetMem(ComputerName,255) ;
size:=255;
if GetComputerName(ComputerName,size)=False then
begin
FreeMem(ComputerName);
Exit;
end;
Myname:=ComputerName;
statusbar1.Panels[0].Text:=Myname;
FreeMem(ComputerName);
flatbutton2.OnClick(nil);
end;procedure TForm1.FlatButton3Click(Sender: TObject);
var i:integer;
begin
if (textbox.Text <>'') then
for i:=0 to AllComNum-1 do
sendmsg('^_^!^o^<t>'+myname+'+'+ textbox.Text ,AllCom[i,1]);
textbox.Text :='';
end;procedure TForm1.FlatButton4Click(Sender: TObject);
var msg:string;i:integer;
begin
if userlist.ItemIndex > userlist.Items.Count then
begin
userlist.Selected[0]:=true;
userlist.itemindex:=0;
exit;
end;
if inputquery('A Special Message to '+ userlist.Items.Strings[userlist.ItemIndex] ,'Please enter your Special Message below',msg) and (msg<>'') then
for i:=0 to AllComNum-1 do
if AllCom[i,0]=userlist.Items.Strings[userlist.ItemIndex] then sendmsg('^_^!^o^<p>'+myname+'+'+msg,AllCom[i,1])
else if UserList.ItemIndex=0 then sendmsg('^_^!^o^<p>'+myname+'+'+msg,AllCom[i,1]);
playit('send');
end;procedure Tform1.showpm(name:string;ip:string;msg:string);
var newPM:TPM;
begin
newPM:=TPM.Create(self);
newPM.addmessage(name,ip,msg);
newPM.Show;
end;procedure TForm1.Flatmemo1Change(Sender: TObject);
begin
label2.Caption :=flatmemo1.Text;
end;procedure TForm1.TextBoxKeyPress(Sender: TObject; var Key: Char);
begin
if key =#13 then
begin
flatbutton3.OnClick(nil);
key:=#0;
end;
end;procedure TForm1.UpClick(Sender: TObject);
begin
if (TempTextNum<>0) then
begin
Flatmemo1.Lines.Insert(0,TempText[TempTextNum-1]);
TempTextNum:=TempTextNum-1;
SetLength(TempText,TempTextNum);
end;
end;procedure TForm1.DownClick(Sender: TObject);
begin
if (Flatmemo1.Lines[0]<>'') then
begin
TempTextNum:=TempTextNum+1;
SetLength(TempText,TempTextNum);
TempText[TempTextNum-1]:=Flatmemo1.Lines[0];
Flatmemo1.Lines.Delete(0);
end;
end;procedure TForm1.Exit1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to AllComNum-1 do
sendmsg('^_^!^o^<q>'+myname,AllCom[i,1]);
close;
end;procedure TForm1.About2Click(Sender: TObject);
begin
about.Show;
end;procedure tform1.playit(kind:string);
begin
if sound.Lit then
begin
try
player.FileName:=kind+'.wav';
player.Open;
player.Play;
except
end;
end;
end;procedure TForm1.StayOnTop1Click(Sender: TObject);
begin
stayontop1.Checked:= not stayontop1.Checked;
if stayontop1.Checked then
form1.FormStyle:=fsStayOnTop
else
form1.FormStyle:=fsNormal;
end;procedure TForm1.Sound1Click(Sender: TObject);
begin
sound1.Checked:=not sound1.Checked;
sound.Lit:=sound1.Checked;
end;procedure TForm1.NoTrouble1Click(Sender: TObject);
begin
notrouble1.Checked:=not notrouble1.Checked;
end;procedure TForm1.TrayiconClick(Sender: TObject);
begin
if form1.Showing then form1.Hide else form1.Show;
end;procedure tform1.addtoregedit();
var
Reg: TRegistry;
Workgroup,ComputerName:string;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run',true);
Reg.WriteString('LAN Chatting',application.ExeName);
finally
Reg.CloseKey;
Reg.Free;
end;
end;procedure TForm1.SoundChangeState(Sender: TObject);
begin
Sound1.Checked :=sound.Lit;
end;procedure TForm1.FormPaint(Sender: TObject);
begin
if runup then
begin
hide;
runup:=false;
end;end;end.