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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2013, 18:55   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Аватар, не вариант. В IP байты а не целые.
Еще как вариант. Для ввода.
Насчет сравнения байтов с целыми, я как-то недопонял...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2013, 19:38   #12
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
вводится ip адрес например 255.255.255.233

допустимо только три точки, остальные не будут прописываться, вот этого и хочу добиться
Тогда Человек_Борща прав, и это Вам не нужно, т.к. позволяет ввести строку типа "654..83.2190".
Надо проверять и ограничивать по сложным алгоритмам все позиции. Например, не позволять вводить подряд 4-ю цифру, а если первые две больше 25, то и третью. А если ровно 25, то цифра должна быть не более 5 и т.п.
s-andriano вне форума Ответить с цитированием
Старый 21.04.2013, 19:56   #13
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
function Cut(var aStr: string; aFrom, aTo: Integer;
  const aToLen: Integer = 0): string;
begin
  if aToLen = 0 then
    Result := Copy(aStr, aFrom, aTo)
  else
    Result := Copy(aStr, aFrom, aTo - aToLen);
  Delete(aStr, aFrom, aTo);
end;
а что делает эта функция?
from dark to light)

Последний раз редактировалось Алексей_2012; 21.04.2013 в 20:32.
Алексей_2012 вне форума Ответить с цитированием
Старый 21.04.2013, 21:17   #14
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Вырезает(передает в результат и удаляет из aStr) буквы с позиции aFrom до позиции aTo из строки aStr.

Цитата:
Надо проверять и ограничивать по сложным алгоритмам все позиции. Например, не позволять вводить подряд 4-ю цифру, а если первые две больше 25, то и третью. А если ровно 25, то цифра должна быть не более 5 и т.п.
Наличие 3-х точек так же проверяется.
незачем эти длинны байтов в качестве строки выверять. На 1 странице я привел функцию, где под конец, строки переводятся в числа, и если число больше 255(3 знаков, как строка) то IP будет не правильным.
Цитата:
Насчет сравнения байтов с целыми, я как-то недопонял...
В IP адресе идут байты, т.е. число от 0 до 255(включительно).
В MaskEdit можно напихать 454.454.453.567 и капец.

Проверять по ходу ввода тоже не имеет никакого смысла.
Что из этого получается можно посмотреть в свойствах подключения по кабелю.

Последний раз редактировалось Человек_Борща; 21.04.2013 в 21:20.
Человек_Борща вне форума Ответить с цитированием
Старый 21.04.2013, 23:19   #15
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 if IsValidIPv4(Edit1.Text) then
 ShowMessage('IP-адрес введен корректно!')
 else
 ShowMessage('IP-адрес введен не корректно!');
end;
а вот что записать в функцию сut? туда же не запишется все автоматом

Код:
function Cut(var aStr: string; aFrom, aTo: Integer;
  const aToLen: Integer = 0): string;
begin
  if aToLen = 0 then
    Result := Copy(aStr, aFrom, aTo)
  else
    Result := Copy(aStr, aFrom, aTo - aToLen);
  Delete(aStr, aFrom, aTo);
end;


function IsValidIPv4(const aStr: string): Boolean;
var
  Bytes: array [1 .. 4] of string;
  ByteCheck: array [1 .. 4] of Boolean;
  s: string;
  p, i: Integer;
begin
  Result := False;
  s := Trim(aStr);
  if (Length(s) > 15) then  Exit; 
  p := Pos('.', s);
  if (p = 0) then Exit; 
  Bytes[1] := Trim(Cut(s, 1, p, 1));
  p := Pos('.', s);
  if (p = 0) then  Exit;
  Bytes[2] := Trim(Cut(s, 1, p, 1));
  p := Pos('.', s);
  if (p = 0) then Exit; 
  Bytes[3] := Trim(Cut(s, 1, p, 1));
  Bytes[4] := Trim(s);
  for i := 1 to 4 do
  begin
    if TryStrToInt(Bytes[i], p) then
      ByteCheck[i] := (p <= 255) and (p >= 0);
  end;
  Result := (ByteCheck[1] and ByteCheck[2] and ByteCheck[3] and ByteCheck[4]);
end;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 22.04.2013, 01:52   #16
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
а вот что записать в функцию сut? туда же не запишется все автоматом
Она используется в IsValidIPv4. Вам туда ничего не надо писать, если не работаете со строками.
Человек_Борща вне форума Ответить с цитированием
Старый 22.04.2013, 19:09   #17
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Проверять по ходу ввода тоже не имеет никакого смысла.
Откуда информация?
s-andriano вне форума Ответить с цитированием
Старый 22.04.2013, 20:04   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно и покороче если без MaskEdit
Код:
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    lEditIP: HWND;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  InitCommonControl(ICC_INTERNET_CLASSES);
  lEditIP:=CreateWindow(WC_IPADDRESS,nil,WS_TABSTOP or WS_CHILD or WS_VISIBLE,Label1.Left,Label1.Top+Label1.Height+5,120,21,Handle,0,hInstance,nil);
  Windows.SetFocus(lEditIP);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DestroyWindow(lEditIP);
end;

procedure TForm1.Button1Click(Sender: TObject);
var lIP: Longint;
begin
  SendMessage(lEditIP,IPM_GETADDRESS,0,Longint(@lIP));
  ShowMessage(IntToStr(lIP));
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C] Удаление одинаковых символов со строки decantnik Помощь студентам 6 01.09.2013 00:37
строки ,замена одинаковых символ , что расположены рядом Olga1991_1 Общие вопросы C/C++ 9 02.12.2012 01:16
Ошибка при вводе лаинских и русских символов Sarumjan Общие вопросы по Java, Java SE, Kotlin 0 26.10.2012 14:57
Не срабатывание русской кодировки при вводе символов с клавиатуры Syltan Общие вопросы C/C++ 5 24.05.2010 19:16
Автозаполнение при вводе пару символов Syltan Операционные системы общие вопросы 2 20.05.2010 16:51