27.03.2003, 09:17 | #1 |
Участник
|
Форматирование связанного текстового поля в форме
Attain 3.60.
Господа! Подскажите, как задать не стандартное форматирование связанного текстового поля в форме, например, телефон: 8-(3832)-22-33-44 или страховой номер 000-000-000 00. В Help о свойстве Format для этого типа поля невнятно написано. Или это можно сделать в триггере OnFormat, то как? Заранее благодарен. |
|
28.03.2003, 11:06 | #2 |
Участник
|
По-моему, установить такие сложные форматы через свойство format не получится. Потому что в твоем случае нужно разбивать текстовую строку на части (поля) и оперировать уже ими. А для типа Text это сделать невозможно. Если я неправ пусть меня поправят.
Сделать же форматирование через триггер OnFormat не сложно. Например, для твоего телефонного номера это будет так. Объявить переменную целочисленную переменную i. В теле триггера ввести: Text:= <Значение поля>; // Удалить установленные раннее символы форматирования i:= STRLEN(Text); WHILE i > 0 DO BEGIN IF NOT (Text[i] IN ['0','1','2','3','4','5','6','7','8','9']) THEN Text:= DELSTR(Text, i, 1); i:= i-1; END; // Вставка символов форматирования IF STRLEN(Text) > 1 THEN Text:= INSSTR(Text, '-(', 2); IF STRLEN(Text) >= 7 THEN Text:= INSSTR(Text, ')-', 8); IF STRLEN(Text) >= 11 THEN Text:= INSSTR(Text, '-', 12); IF STRLEN(Text) >= 14 THEN Text:= INSSTR(Text, '-', 15); // Удалить ненужны символы в конце строки IF STRLEN(Text) > 17 THEN Text:= COPYSTR(Text, 1, 17); |
|
28.03.2003, 12:10 | #3 |
Участник
|
Большое спасибо Gryzzli за помощь. Выводит данные правильно по заданной маске, а вот при редактировании получается билеберда. Изменение любого символа приводит к сохранению в таблице и символов форматирования. Получается что после редактирования данных нужно в триггере (видимо OnBeforeInput) выкусить все символы форматирования и только потом сохранить. Неужели нет более простых средств?
Заранее благодарен. |
|
28.03.2003, 12:24 | #4 |
Участник
|
> Большое спасибо Gryzzli за помощь. Только, как далее использовать
> эту переменную? Переменная Text передается в триггер OnFormat по ссылке. С ней ничего делать не надо. Система сама отобразит ее в текстовом поле. > Мне нужна маска на текстовую зону. Т.е. ты хочешь не отформатировать значение, а контроллировать его ввод? > Как эту сформированную переменную Text > использовать для этой цели? И как будут редактироватся данные? |
|
28.03.2003, 12:33 | #5 |
Участник
|
Да поле используется как для чтения, так и для ввода информации
|
|
28.03.2003, 13:07 | #6 |
Участник
|
Попробуй так.
В OnAfterInput(VAR Text : Text[1024] перенеси i:= STRLEN(Text); WHILE i > 0 DO BEGIN IF NOT (Text[i] IN ['0','1','2','3','4','5','6','7','8','9']) THEN Text:= DELSTR(Text, i, 1); i:= i-1; END; В OnFormat(VAR Text : Text[1024] оставь IF STRLEN(Text) > 1 THEN Text:= INSSTR(Text, '-(', 2); IF STRLEN(Text) >= 7 THEN Text:= INSSTR(Text, ')-', 8); IF STRLEN(Text) >= 11 THEN Text:= INSSTR(Text, '-', 12); IF STRLEN(Text) >= 14 THEN Text:= INSSTR(Text, '-', 15); |
|
28.03.2003, 13:31 | #7 |
Участник
|
Спасибо Grizzli, все работает.
|
|