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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.08.2024, 21:38
Filen Filen вне форума
Прохожий
 
Регистрация: 23.05.2024
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Телефон по маске

Уважаемые гуру, посоветуйте как?

переменная tel:='9109884668';

на форме EditMask с маской в формате +7(___)___-__-__ ,

как правильно вставить в EditMask переменную tel ,что то вроде
EditMask.Text:=tel;
направьте на путь истинный ..
Ответить с цитированием
  #2  
Старый 07.08.2024, 21:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да, что-то не работает компонент как ожидаешь.
Вариант - самому применить маску и вставлять уже в маскированном виде.

Простой вариант:
Код:
function FormatPhoneNumber(Phone : String) : String;
var
  I: Integer;
begin
  if Length(Phone) <> 10 then
    raise Exception.Create('Actual length is not equal to 10.');
  for I := 1 to 10 do
    if Not (Phone[i] in ['0'..'9']) then
      raise Exception.CreateFmt('Character %d is not a number.',[i]);
  Result := '+7(' + Copy(Phone,1,3) + ')'+Copy(Phone,4,3) + '-' + Copy(Phone,7,4);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  tel : String;
begin
  tel:='9109884668';
  MaskEdit1.Text :=  FormatPhoneNumber(tel);
end;

Последний раз редактировалось lmikle, 07.08.2024 в 23:35.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Filen (07.08.2024)
  #3  
Старый 07.08.2024, 21:41
Filen Filen вне форума
Прохожий
 
Регистрация: 23.05.2024
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Да, что-то не работает компонент как ожидаешь.
Вариант - самому применить маску и вставлять уже в маскированном виде.

Простой вариант:
Код:
function FormatPhoneNumber(Phone : String) : String;
var
  I: Integer;
begin
  if Length(Phone) <> 10 then
    raise Exception.Create('Actual length is not equal to 10.');
  for I := 1 to 10 do
    if Not (Phone[i] in ['0'..'9']) then
      raise Exception.CreateFmt('Character %d is not a number.',[i]);
  Result := '+7(' + Copy(Phone,1,3) + ')'+Copy(Phone,4,3) + '-' + Copy(Phone,7,4);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  tel : String;
begin
  tel:='9109884668';
  MaskEdit1.Text :=  FormatPhoneNumber(tel);
end;


Спсибо дорогой, очень помог ..


строку:
Result := '+7(' + Copy(Phone,1,3) + ')'+Copy(Phone,4,3) + '-' + Copy(Phone,7,4);
изменить на
Result := '+7(' + Copy(Phone,1,3) + ')'+Copy(Phone,4,3) + '-' + Copy(Phone,5,4)+ '-' +Copy(Phone,8,4);
все работает без проблем.

Последний раз редактировалось Filen, 08.08.2024 в 07:59.
Ответить с цитированием
  #4  
Старый 08.08.2024, 12:56
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А что это за номер у вас такой из 14 цифр? У вас же в первоначальном коде десятизначный номер, а в финале он вдруг вырос. Для форматирования телефона лучше использовать функцию, которая позволяет менять формат представления номера, без изменения кода:
Код:
function PhoneFormat(Phone: String; Mask: String): String;
begin
  Result := '';
  var n := 0;
  for var i := 1 to Length(Mask)
  do if Mask[i] = 'd'
     then begin
          Inc(n);
          if n > Length(Phone) then Exit;
          Result := Result + Phone[n]
          end
     else Result := Result + Mask[i];
end;
...
Caption := PhoneFormat('9109884668', '+7(ddd)ddd-dd-dd')
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Filen (12.08.2024)
  #5  
Старый 08.08.2024, 23:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Страдалец, да, наверное, доп. код добавил.
В принципе, тогда надо вообще городить огород с несколькими масками или вообще "умную" функцию писать, которая и код страны будет правильно подставлять в зависимости от переданного номера.
Я просто пример дал как можно сделать...
Ответить с цитированием
  #6  
Старый 12.08.2024, 02:03
Filen Filen вне форума
Прохожий
 
Регистрация: 23.05.2024
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

И снова здравствуйте.
Такая вот закавыка с запросом:

Код:
imT:='9108408844'

DataModule2.ADOQueryZapisTime.Close;
DataModule2.ADOQueryZapisTime.SQL.Clear;
 DataModule2.ADOQueryZapisTime.SQL.Add('SELECT * FROM Tf24_ZapisPriemaTime WHERE tel=:imT');
DataModule2.ADOQueryZapisTime.Active:=True;

lmikle: Пользуемся тегами для оформлеия кода

результат пустая таблица, хотя данных номеров в базе с десяток, никак не въеду, что не так делаю. Поможите люди добрые кто чем может..

Последний раз редактировалось lmikle, 12.08.2024 в 07:33.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter