У меня проблема с динамическим уничтожением компонентов. Я хочу создать образ ПК при подключении, что я и сделал, но я не могу уничтожить выбранный компонент изображения при отключении клиента.
Я пытался использовать объект sender
, но это не такработать со мнойМожете ли вы предоставить лучший код, пожалуйста.
сервер
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ScktComp;
type
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
Button2: TButton;
Edit1: TEdit;
ClientSocket1: TClientSocket;
Memo1: TMemo;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
procedure getname(sender:Tobject);
{ Public declarations }
end;
var
Form1: TForm1;
pcname:string;
j,k:integer;
IP11:TImage;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
j:=0;
k:=0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
lab:Tlabel;
begin
if (j <800) then
begin
IP11:=TImage.Create(panel1);
IP11.Parent:=panel1;
IP11.Picture.Bitmap.LoadFromFile('PPoste.Bmp');
IP11.Top:=20+k; IP11.Left:=(48+j);
IP11.Name:=pcname;
lab:=Tlabel.Create(IP11);
lab.Parent:=panel1;
lab.Caption:=pcname;
lab.Font.Size:=18;
lab.Font.Color:=clred;
lab.Color:=clwhite;
lab.Transparent:=true;
lab.Top:=100+k; lab.Left:=(48+j);
lab.Name:=pcname;
j:=j+120;
end else
begin
k:=k+120;
j:=0;
Button1.Click;
end ;
IP11.OnClick:=getname;
end;
procedure TForm1.getname(sender: Tobject);
begin
form1.Caption:=((sender as Timage).Name);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
clientsocket1.Address:=edit1.Text;
clientsocket1.Active:=true;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.Add(socket.RemoteAddress);
memo1.Lines.Add(socket.RemoteHost);
memo1.Lines.Add(socket.LocalHost);
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
a:integer;
pc : string;
begin
edit2.Text:=socket.ReceiveText;
sleep(20);
a:=pos ( '/', edit2.Text );
pcname:=copy(edit2.Text,0,a-1);
pc:=copy(edit2.Text,a+1,a+1);
if (pc='c') then
button1.Click;
if (pc='d') then
begin
if IP11.Name=pcname then
IP11.Free;
j:=j-120;
end;
end;
end.
клиент
Я использую кнопки 3 & 4 & 5 & 6 для имитации соединенияи отключиться от других клиентов
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Edit1: TEdit;
ServerSocket1: TServerSocket;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormDestroy(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ip:string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if not (edit1.Text = '') then
begin
ip:=edit1.Text;
form1.Hide;
memo1.Text:=edit1.Text;
memo1.Lines.SaveToFile('d:/key.txt');
end
else
showmessage('enter ip');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
serversocket1.Active:=true;
if fileexists('d:/key.txt') then
begin
form1.Hide;
end;
end;
procedure TForm1.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
begin
form1.Caption:='listen';
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
form1.Caption:='conected';
edit1.Text:=socket.LocalHost;
serversocket1.Socket.Connections[0].SendText(edit1.text+'/c');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
edit1.Text:=serversocket1.socket.LocalHost;
serversocket1.Socket.Connections[0].SendText(edit1.text+'/d');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
serversocket1.Socket.Connections[0].SendText('hakim/c');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
serversocket1.Socket.Connections[0].SendText('hakim/d');
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
serversocket1.Socket.Connections[0].SendText('taha/c');
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
serversocket1.Socket.Connections[0].SendText('taha/d');
end;
end.