Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2011, 17:34   #1
estargon
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 6
По умолчанию Создал чат. Нужен анти спам

Вообщем у меня в чате отправляются сообщения без задержек, и даже без амого сообщения, тоесть нажимаю отправить и он пишет ник отправителя итд, вообщем нужно что то сделать что бы была задержка между сообщениями, или лучше всего сделать так что бы кикало человека когда он отправляет сообщения слишком быстро.. Подскажите что можно сделать!
estargon вне форума Ответить с цитированием
Старый 24.06.2011, 18:04   #2
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

думаю можно поставить таймер...
Pein95 вне форума Ответить с цитированием
Старый 24.06.2011, 18:24   #3
estargon
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 6
По умолчанию

пробовал, получается что останавливается все окно программы.
вот код клиента, может я что то не так делал.
Цитата:
}

var
Form1: TForm1;
nick:string;
implementation

{$R *.dfm}

function GetCompName:string;
var Len:Cardinal; pStr:PChar;
begin pStr:=nil; Len:=256;
try pStr:=StrAlloc(Len);
if GetComputerName(pStr,Len) then
Result:=pStr; finally
if pStr<>nil then StrDispose(pStr); end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
//ListBox2.Items.Add(TimeToStr(now)+' Подключилось. '+Socket.ReceiveText+' '+Socket.RemoteHost+' '+Socket.RemoteAddress);
Image1.Visible:=true;
//Button1.Enabled:=true;
Socket.SendText('Ne>'+nick);
sleep(100);
Socket.SendText('>G<');
end;

procedure TForm1.ClientSocket1Connecting(Send er: TObject;
Socket: TCustomWinSocket);
begin
//ListBox2.Items.Add(TimeToStr(now)+' Connect... '+Socket.ReceiveText+' '+Socket.RemoteHost+' '+Socket.RemoteAddress);
end;

procedure TForm1.ClientSocket1Disconnect(Send er: TObject;
Socket: TCustomWinSocket);
begin
//ListBox2.Items.Add(TimeToStr(now)+' Disconnect '+Socket.ReceiveText+' '+Socket.RemoteHost+' '+Socket.RemoteAddress);
Image1.Visible:=false;
//Button1.Enabled:=false;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
//ListBox2.Items.Add(TimeToStr(now)+' - Ошибка --для тех кто не понял-ОШИБКА');
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var mes,names,n,mmm:string; i:integer;
begin
mes:=Socket.ReceiveText;
if (mes[1]='m')and(mes[2]='m')and(mes[3]='m') then begin
mmm:=copy(mes,4,length(mes));
ShowMessage(mmm);
end;
if (mes[1]='(')and(mes[2]=')')and(mes[3]='=') then begin
names:=copy(mes,4,length(mes));
names:=names+'= =';
i:=-1; ListBox1.Items.Clear;
while n<>' ' do begin
i:=i+1;
n:=''; while names[i+1]<>'='do begin i:=i+1;
n:=n+names[i] end;
if n<>' ' then ListBox1.Items.Add(n);
end;
end else
if (mes[1]='<')and(mes[2]='S')and(mes[3]='>') then
Socket.SendText('Ne>'+nick)
else begin i:=ListBox2.Items.Add(mes);
SendMessage(ListBox2.Handle,
LB_SETCURSEL,
ListBox2.Items.Count-1,0);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if (ListBox1.itemindex>=0) then begin
ClientSocket1.Socket.SendText(Nick+ '>'+
ListBox1.Items[ListBox1.itemindex]+'>'+Edit2.Text); end else
ClientSocket1.Socket.SendText(Nick+ '>All>'+Edit2.Text);
Edit2.Text:='';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ClientSocket1.Close;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
ClientSocket1.Port:=StrToInt(Edit3. Text); //2541;
ClientSocket1.Address:=Edit4.Text;
ClientSocket1.Open;
end;

procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then Button1.Click;
end;

procedure TForm1.FormActivate(Sender: TObject);
label beg; begin
beg:nick:=InputBox('connect','Введи свой ник',nick);
if length(nick)<4 then begin
ShowMessage('Вы ввели всего '+inttostr(length(nick))+' символ,'+#10+
'Должно быть не менее 4. '#10+'Попробуйте ещё раз'); goto beg end;
ListBox2.Items.Clear;
ListBox2.Items.add('Computer''s name - '+getcompname);
ListBox2.Items.Add('Добро пожаловать, твой ник - "'+nick+'", сервер estargon connect (c)');
SendMessage(ListBox2.Handle,LB_SETC URSEL,ListBox2.Items.Capacity,0);
end;

procedure TForm1.ListBox2Click(Sender: TObject);
var s:string;
begin
try
s:=ListBox2.Items[ListBox2.itemindex];
ListBox2.Canvas.Font:=ListBox2.Font ;
if Canvas.TextWidth(s)>=ListBox2.Width then begin
ListBox2.Hint:=s; ListBox2.ShowHint:=true; end else begin
ListBox2.ShowHint:=false; ListBox2.hint:=''; end;
except end;
end;


procedure TForm1.ListBox2DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var k,f,al:string; x:integer;
begin
k:=copy(ListBox2.Items[index],1,length(nick));
if k=nick then
ListBox2.Canvas.Brush.Color:=$00FDD 6A6 else begin
k:=ListBox2.Items[index]+'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >';
f:='dima'; x:=0;
while F[1]<>'>'do begin x:=x+1; F[1]:=k[x] end;
f:=copy(k,x+1,length(nick)); al:=copy(k,x+1,3);
if f=nick then ListBox2.Canvas.Brush.Color:=$00FAC EFF else
if al='All'then ListBox2.Canvas.Brush.Color:=$00C1E 4FF else
ListBox2.Canvas.Brush.Color:=$00FFF FFF;
end;
ListBox2.Canvas.Font.Color:=$000000 ;
ListBox2.Canvas.FillRect(rect);
ListBox2.Canvas.TextOut(Rect.Left+1 ,Rect.Top+2,ListBox2.Items[index]);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.ItemIndex:=-1;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
ListBox2.Items.SaveToFile(SaveDialo g1.FileName+'.txt');
end;


end.
estargon вне форума Ответить с цитированием
Старый 24.06.2011, 18:25   #4
estargon
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 6
По умолчанию

поставь пожалуйсто таймер в нужное место.
estargon вне форума Ответить с цитированием
Старый 24.06.2011, 19:08   #5
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

сори нет времени чтоб разбиратса в коде.
думаю можно сделать так: когда отправил сообщение активизируем таймер:
Timer1.enabled:=true;
дальше допустим таймер 2 сек. после того как он достигает 2 сек делаем:
timer.enabled.false;
когда enabled=false тогда можно отправлять сообщение
Pein95 вне форума Ответить с цитированием
Старый 24.06.2011, 19:13   #6
estargon
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 6
По умолчанию

вот действие отправки сообщения
Цитата:
procedure TForm1.Button1Click(Sender: TObject);
begin
if (ListBox1.itemindex>=0) then begin
ClientSocket1.Socket.SendText(Nick+ '>'+
ListBox1.Items[ListBox1.itemindex]+'>'+Edit2.Text); end else
ClientSocket1.Socket.SendText(Nick+ '>All>'+Edit2.Text);
Edit2.Text:='';
end;
estargon вне форума Ответить с цитированием
Старый 24.06.2011, 19:21   #7
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

допишыте
Код:
timer1.Enabled:=true;
button1.Enabled:=false;

//процедура таймера
procedure TForm3.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
button1.Enabled:=true;
end;
Pein95 вне форума Ответить с цитированием
Старый 24.06.2011, 19:45   #8
estargon
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 6
По умолчанию

а можно к примеру сделать так что бы вот, если человек оправил выстро допустим 3 сообщения, и еще сразу же кикнуло с сервера?
estargon вне форума Ответить с цитированием
Старый 24.06.2011, 19:55   #9
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

думаю можно тода нужен ещо 1 таймер и если человек отправил много сообщений за кораткое время его можно отключить...
Pein95 вне форума Ответить с цитированием
Старый 24.06.2011, 19:58   #10
estargon
Новичок
Джуниор
 
Регистрация: 24.06.2011
Сообщений: 6
По умолчанию

вот, именно это и нужно, поможете?
estargon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен чат на php + ajax. Abuhamed Фриланс 3 24.01.2011 22:11
Нужен чат под wordpress (переделать ваш готовый или с нуля) U-uh Фриланс 6 04.10.2010 17:14
Нужен анти strcat Hichigo Общие вопросы C/C++ 1 04.08.2010 15:08