Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.03.2018, 10:02
Vidoc3000 Vidoc3000 вне форума
Прохожий
 
Регистрация: 27.03.2018
Адрес: AD
Сообщения: 3
Версия Delphi: Delphi XE8
Репутация: 10
Восклицание Подскажите где ошибка

Помогите разобраться где я ошибся. Пытаюсь сделать бан лист для чата. Делал через процедуру работал через раз, а перешел на функцию вообще не работает. Если по имени то находит, а по 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  
Старый 28.03.2018, 05:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Строка 30. Должно быть:
Код:
j:= AnsiPos(Host, Form4.ListBox1.Items[i]);
Ответить с цитированием
  #3  
Старый 28.03.2018, 05:36
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А вообще, все можно переписать так:
Код:
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  
Старый 29.03.2018, 05:30
Vidoc3000 Vidoc3000 вне форума
Прохожий
 
Регистрация: 27.03.2018
Адрес: AD
Сообщения: 3
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию

Спасибо, буду пробовать. А про 30 строку я вообще молчу, как я мог не заметить...
__________________

Последний раз редактировалось Vidoc3000, 29.03.2018 в 05:38.
Ответить с цитированием
  #5  
Старый 29.03.2018, 06:02
Vidoc3000 Vidoc3000 вне форума
Прохожий
 
Регистрация: 27.03.2018
Адрес: AD
Сообщения: 3
Версия Delphi: Delphi XE8
Репутация: 10
По умолчанию

Немного изменил и все заработало!
Код:
function CheckBan(AStr : String; AList : TStrings) : Boolean; overload;
__________________
Ответить с цитированием
  #6  
Старый 29.03.2018, 21:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А, ну да, там же TStrings задекларирован, хотя на самом деле лежит TStringList. Можно было просто при вызове сделать каст, но так, наверное, даже лучше...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025