![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите разобраться где я ошибся. Пытаюсь сделать бан лист для чата. Делал через процедуру работал через раз, а перешел на функцию вообще не работает. Если по имени то находит, а по Host`у уже не ищет. Или может какой пример есть по интересней чем моё "творчество"...
Код:
Function CheckBan (Status: Integer; Host, Name: String):boolean;
var
i, j: integer;
begin
if Status = 2 then
begin
if Name<>'' then
begin
for I := 0 to Form4.ListBox2.Count-1 do
begin
j:= AnsiPos(Name, Form4.ListBox2.Items[i]);
if j>0 then
begin
//отладка
Form1.ChatMemo.Lines.Add(Form4.ListBox2.Items[i]+ ' : ' +Name);
UserMas[i].ban:=True;
//Form1.ServerSocket.Socket.Connections[i].Close;
//Form1.ServerSocket.Socket.Connections[i].SendText('7');
//UpdDo:=True;
Result:=True;
end;
end;
end
else
begin
if Host<>'' then
begin
for I := 0 to Form4.ListBox1.Count-1 do
begin
j:= AnsiPos(Name, Form4.ListBox1.Items[i]);
if j>0 then
begin
//отладка
Form1.ChatMemo.Lines.Add(Form4.ListBox1.Items[i]+ ' : ' +Host);
UserMas[i].ban:=True;
//Form1.ServerSocket.Socket.Connections[i].Close;
//Form1.ServerSocket.Socket.Connections[i].SendText('7');
//UpdDo:=True;
Result:=True;
end;
end;
end
Else
Result:=False;
Form1.ChatMemo.Lines.Add('WTF?!');
end;
end;
end; |
|
#2
|
|||
|
|||
|
Строка 30. Должно быть:
Код:
j:= AnsiPos(Host, Form4.ListBox1.Items[i]); |
|
#3
|
|||
|
|||
|
А вообще, все можно переписать так:
Код:
function CheckBan(Status : Integer; AStr : String; AList : TStringList) : Boolean;
var
I : Integer;
begin
Result := False;
If Status <> 2 Then Exit; // не знаю зачем тубе этот статус...
For I := 0 to AList.Count-1 Do
If AnsiPos(AStr,AList[i]) > 0 Then
Begin
Result := True;
UserMas[i].ban := True;
Form1.ChatMemo.Lines.Add(AList[i]+ ' : ' +AStr);
Break;
End;
end;Код:
// Не проверяем результат... CheckBan(2,Name,Form4.ListBox2.Items); // По имени CheckBan(2,Host,Form4.ListBox1.Items); // По хосту Код:
if CheckBan(2,Name,Form4.ListBox2.Items) Or CheckBan(2,Host,Form4.ListBox1.Items)
Then Form1.ChatMemo.Lines.Add('User by name ' + Name + ' or by host ' + Host + ' banned.')
Else Form1.ChatMemo.Lines.Add('User by name' + Name + ' or by host ' + Host + ' not found.'); |
|
#4
|
|||
|
|||
|
Спасибо, буду пробовать. А про 30 строку я вообще молчу, как я мог не заметить...
Последний раз редактировалось Vidoc3000, 29.03.2018 в 05:38. |
|
#5
|
|||
|
|||
|
Немного изменил и все заработало!
Код:
function CheckBan(AStr : String; AList : TStrings) : Boolean; overload; |
|
#6
|
|||
|
|||
|
А, ну да, там же TStrings задекларирован, хотя на самом деле лежит TStringList. Можно было просто при вызове сделать каст, но так, наверное, даже лучше...
|