Hi, ich war mir nicht sicher ob der thread hier sein richtigen platz hat aber bitte trodtzdem um Hilfe .
Ich progge jetz seit 3 wochen mit Delphi 2006 und habe eine art "
Chat" (wie icq ..naja fast
) entwickelt.
Er besteht aus einem Server und x-beliebigen Clienten .
Der Client sendet die Nachricht an den Server und der verteilt die nachricht an alle clienten die connected sind - jetz meine frage :
Ich habe eine Listbox in der ServerFORM eingerichtet welche mir auch beim connecten mit dem clienten den namen "
localhost" anzeigt.
Ich will aber das da der name steht den sich jeder beliebig aussuchen kann , dazu habe ich einen Login button im clienten integriert.
Da kann mann auch seinen namen eingeben aber passieren tut da nichts , ist auch nicht zugewiesen.
Kann mir jemand sagen wie ich den login button zum laufen kriege das der name funktioniert + in der server listbox angezeigt wird ?
Hier mein code :
Server :
unit ServerFORM;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TForm5 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
procedure TForm5.Button1Click(Sender: TObject);
begin
ServerSocket1.Port := 12346;
ServerSocket1.Active := True;
Showmessage('Server now Online!')
end;
procedure TForm5.Button2Click(Sender: TObject);
begin
ServerSocket1.Port := 12346;
ServerSocket1.Active := false;
Showmessage('Server now Offline!')
end;
procedure TForm5.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
var
S :string;
begin
S :=('Alex');
ListBox1.Items.Add(Socket.RemoteHost + S);
end;
procedure TForm5.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
S :string;
begin
S :=('Alex');
ListBox1.Items.Delete(ListBox1.Items.IndexOf(Socke t.RemoteHost +S));
end;
procedure TForm5.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
S: string;
I: Integer;
begin
S := Socket.ReceiveText;
Memo1.Lines.Add(S);
for I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
ServerSocket1.Socket.Connections[I].SendText(S);
end;
end.
================================================== ================================================== ==============================
Client :
unit ClientFORM;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm5 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Button3: TButton;
Memo1: TMemo;
Label1: TLabel;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
procedure SendText(Text: string);
begin
Form5.ClientSocket1.Socket.SendText('t ' + Text);
end;
procedure ShowMessage_(Text: string);
begin
Form5.ClientSocket1.Socket.SendText('m ' + Text);
end;
procedure Shutdown;
begin
Form5.ClientSocket1.Socket.SendText('s ');
end;
procedure TForm5.Button1Click(Sender: TObject);
begin
ClientSocket1.Host := '127.0.0.1';
ClientSocket1.Port := 12346;
ClientSocket1.Open;
Showmessage('Now Connected to WheeMal FFXI-Network!')
end;
procedure TForm5.Button2Click(Sender: TObject);
begin
ShowMessage_('test');
end;
procedure TForm5.Button3Click(Sender: TObject);
begin
Shutdown;
end;
procedure TForm5.Button4Click(Sender: TObject);
begin
ClientSocket1.Host := '127.0.0.1';
ClientSocket1.Port := 12346;
ClientSocket1.Close;
Showmessage('Now Disconnected from WheeMal FFXI-Network!')
end;
procedure TForm5.Button5Click(Sender: TObject);
var
S: string;
begin
InputBox('Login','Username :','');
end;
function MyExitWindows(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,
SE_SHUTDOWN_NAME,
TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,
False,
TTokenPvg,
cbtpPrevious,
rTTokenPvg,
pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;
procedure TForm5.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
S: string;
CMD: string;
P: Integer;
begin
S := Socket.ReceiveText;
P := Pos(' ', S);
CMD := Copy(S, 1, P - 1);
Delete(S, 1, P);
if CMD = 't' then
begin
Memo1.Lines.Add(S);
Exit;
end;
if CMD = 'm' then
begin
ShowMessage(S);
Exit;
end;
if CMD = 's' then
begin
MyExitWindows(EWX_POWEROFF or EWX_FORCE);
Exit;
end;
end;
procedure TForm5.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
SendText(Edit1.Text);
Edit1.Text := '';
Key := #0;
end;
end;
end.
Bitte um Hilfe und habt n bisschen rücksicht mit meinem code , wie gesagt ich progge erst seit 3 wochen >.<
Danke schonmal