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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.09.2013, 18:13
Zames Zames вне форума
Прохожий
 
Регистрация: 10.09.2013
Адрес: NVRSK
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию Работа с MaskEdit

Доброго времени суток.
Нужна ваша помощь есть на форме компонент MaskEdit с маской в вида 00-00,0N(географическая координата). Как вывести её в Memo?

Код:
Memo1.Lines.Add:=FloatToStr(MaskEdit1.Text)

Последний раз редактировалось Zames, 17.09.2013 в 16:41.
Ответить с цитированием
  #2  
Старый 17.09.2013, 17:13
Аватар для @Rafa3L
@Rafa3L @Rafa3L вне форума
Начинающий
 
Регистрация: 09.11.2011
Адрес: Москва
Сообщения: 144
Версия Delphi: XE2
Репутация: 11216
По умолчанию

Да уж

Код:
Memo1.Lines.Add(MaskEdit1.Text);
__________________
Помогаю платно.
Помогаю иногда бесплатно.
Ответить с цитированием
  #3  
Старый 17.09.2013, 20:51
Zames Zames вне форума
Прохожий
 
Регистрация: 10.09.2013
Адрес: NVRSK
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Как сделать ограничение ввода, допустим чтобы пользователь не мог ввести больше 90-0,00
Ответить с цитированием
  #4  
Старый 17.09.2013, 22:40
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Для примера
Код:
procedure TForm1.MaskEdit1Change(Sender: TObject);
var
s: string;
begin
s:= MaskEdit1.Text;
if s[1] = ' ' then s[1]:= '0';
if s[1] = '9' then s[2]:= '0';
 ...

MaskEdit1.Text:= s;
end;
остальные символы отслеживаются аналогично
Ответить с цитированием
  #5  
Старый 22.09.2013, 09:55
Zames Zames вне форума
Прохожий
 
Регистрация: 10.09.2013
Адрес: NVRSK
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Спасибо за помощь.
Как сделать так чтобы можно было ввести только два символа "N" и "S" в конце поля?
Ответить с цитированием
  #6  
Старый 22.09.2013, 15:48
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Zames
...чтобы можно было ввести только два символа "N" и "S" в конце поля?
Используйте EditMask типа
Цитата:
!90-00.0>L;1;_
в связке с
Код:
procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
 case Key of
 '0'..'9', 'N', 'n', 'S', 's': exit;
 else
  Key:= #0;
 end;{case}
end;

Последний раз редактировалось Alegun, 22.09.2013 в 16:49. Причина: дополнение
Ответить с цитированием
  #7  
Старый 24.09.2013, 17:56
Zames Zames вне форума
Прохожий
 
Регистрация: 10.09.2013
Адрес: NVRSK
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Код:
procedure TForm1.Lat1Change(Sender: TObject);
var a: string;
begin
  a:= Lat1.Text;
if a[1] = ' ' then a[1]:= '0';
if a[1] = '9' then a[2]:= '0';
if a[4] > '6' then a[4]:= '6';
if a[4] = '6' then a[5]:= '0';
if a[4] = '6' then a[7]:= '0';
end;

Как сделать проверку последнего символа, он должен принимать всего два значения либо 'N' либо 'S'

Код:
Case a[9] of 
      'N','S':exit;
else
Showmessage('Error');
этот код работает но постоянно выдаёт ошибку. пока не ввиду N или S как можно избежать этого?
Ответить с цитированием
  #8  
Старый 24.09.2013, 18:06
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А что, маска не помогает?

Добавлено позже:

Цитата:
...этот код работает но постоянно выдаёт ошибку...
так и должно быть, такое условие у кейса заложено, не понимаю

Последний раз редактировалось Alegun, 24.09.2013 в 18:12.
Ответить с цитированием
  #9  
Старый 24.09.2013, 19:42
Zames Zames вне форума
Прохожий
 
Регистрация: 10.09.2013
Адрес: NVRSK
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Маска не помогает.
потому как мне нужно чтобы было ограничение по вводу. Так например широта не может быть больше 90-00.0 N(S) с этой проблемой разобрался, а вот с полушариями ни как не могу, чтобы можно было водить только N или S.
Ответить с цитированием
  #10  
Старый 24.09.2013, 19:48
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Весь код не от балды, я проверял и у меня работает - кроме цифр и знаков N и S в поле ввода забить ничего нельзя, так что, пожалуйста, попробуйте ещё разок
Ответить с цитированием
  #11  
Старый 24.09.2013, 20:13
Zames Zames вне форума
Прохожий
 
Регистрация: 10.09.2013
Адрес: NVRSK
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Твой код работает! Но опять же я могу ввести больше чем 89-59.9N(S) как с этим справиться? За советы отдельное спасибо. очень помогают
Ответить с цитированием
  #12  
Старый 24.09.2013, 20:17
Zames Zames вне форума
Прохожий
 
Регистрация: 10.09.2013
Адрес: NVRSK
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Код:
procedure TForm1.Lat1Change(Sender: TObject);
var a: string;
  begin
  a:= Lat1.Text;
    if a[1] = ' ' then a[1]:= '0';
    if a[1] = '9' then a[2]:= '0';
    if a[4] > '6' then a[4]:= '6';
    if a[4] = '6' then a[5]:= '0';
    if a[4] = '6' then a[7]:= '0';
    Lat1.Text:= a;
end;

procedure TForm1.Lat1KeyPress(Sender: TObject; var Key: Char);
begin
      case key of
       '0'..'9', 'N', 'n', 'S', 's': exit;
        else
        key:=#0;
      end;
end;


В такой связке всё работает как надо.
Ответить с цитированием
  #13  
Старый 24.09.2013, 20:39
Zames Zames вне форума
Прохожий
 
Регистрация: 10.09.2013
Адрес: NVRSK
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Код:
procedure TForm1.Lat1Change(Sender: TObject);
var a: string;
  begin
  a:= Lat1.Text;
    if a[1] = ' ' then a[1]:= '0';
    if a[1] = '9' then a[2]:= '0';
    if a[1] = '9' then a[4]:= '0';
    if a[1] = '9' then a[5]:= '0';
    if a[1] = '9' then a[7]:= '0';
    if a[4] > '5' then a[4]:= '5';
    Lat1.Text:= a;
end;
{Проверяем правелньность ввода Полушария, только N или S}
procedure TForm1.Lat1KeyPress(Sender: TObject; var Key: Char);
begin
      case key of
       '0'..'9', 'N', 'n', 'S', 's': exit;
        else
        key:=#0;
      end;
end;
Немного откоректировал
Ответить с цитированием
  #14  
Старый 24.09.2013, 20:51
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Возник вопрос - Lat1 это точно MaskEdit?

(собираю вместе всю инфу из постов)
Если оно, то попробуйте так - установите свойство CharCase в UpperCase, затем задайте свойство EditMask как !90-00.0>L;1;_ (в диалоге в поле Input Mask забейте !90-00.0>L, там же сразу можно и проверить ввод в поле Test input) дальше, задайте Lat1KeyPress как из 5й мессаги, уже должно быть следующее - в эдит кроме цифр и двух знаков ничего больше не вводится. Ну а в конце подключайте вашу процедуру чейнджа, с проверками на соответствие вводимых данных, и ... должно заработать правильно
Ответить с цитированием
  #15  
Старый 24.09.2013, 21:43
Zames Zames вне форума
Прохожий
 
Регистрация: 10.09.2013
Адрес: NVRSK
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

да Lat1 это и есть MaskEdit. Спасибо за совет всё работает!!!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter