Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];

Вниз

ввод числа форматированный, извращённый. как??   Найти похожие ветки 

 
Алексей   (2004-02-25 12:50) [0]

Мне нужно сделать ввод числа в виде ЧЧЧ ЧЧЧ ЧЧЧ ЧЧЧ.ЧЧЧ, причём число должно быть всё время прижато к правому краю edit"а, куда я ввожу (независимо от длины числа). Не подскажите, можно ли это реализовать стандартными средствами delphi?


 
Sandman25+1   (2004-02-25 12:53) [1]

Стандартный TEdit с обработчиками OnKeyPress(для запрещения набора нецифр, непробелов и прочего) и OnChange для нужного форматирования. Только внутри OnChange Не забудьте временно убрать обработчик OnChange перед изменением Text, а то зациклится.


 
Алексей   (2004-02-25 12:55) [2]

" Не забудьте временно убрать обработчик OnChange перед изменением Text, а то зациклится."
как?


 
SPIRIT   (2004-02-25 12:57) [3]


> Sandman25+1 (25.02.04 12:53) [1]

согласен


> Алексей (25.02.04 12:50)

месяц где то назад в форуме подобныю задачу решали на обычном эдите...
ща попробую поискать ....


 
Defunct   (2004-02-25 12:57) [4]

Используйте MaskEdit.


 
Sandman25+1   (2004-02-25 12:58) [5]

[2] Алексей (25.02.04 12:55)

Edit1.OnChange := nil;
try
Edit1.Text := ...
finally
Edit1.OnChange := Edit1OnChange;
end;


 
Алексей   (2004-02-25 13:01) [6]

2 Defunct ©
"Используйте MaskEdit."
тогда вводимое число будет прижато к левому краю. Надо будет всё равно обработчик делать - пробелы добавлять.. ух..

2 Sandman25+1:
Спасибо, сейчас пообедаю и попробую. У меня если честно, пока всё на флагах - по 10 раз OnChange вызывался. В этом то скорее всего и кроются обидные глюки.

Одна из главных проблем - удаление запятой. Т.е. если выделить несколько символов (вместе с запятой) и удалить.. то начинаются вещи непредсказуемые. Как этот случай обработать - не знаю.


 
Алексей   (2004-02-25 13:02) [7]

2 SPIRIT ©
"месяц где то назад в форуме подобныю задачу решали на обычном эдите...
ща попробую поискать ...."
Буду весьма признателен.


 
Sandman25+1   (2004-02-25 13:07) [8]

[6] Алексей (25.02.04 13:01)

Честно говоря, я не представляю себе, почему так важно именно правое выравнивание и пробелы. Я обычно вообще только OnExit обрабатываю, а в OnKeyPress все "левые" сиволы заменяю на DecimalSeparator (если его еще нет в строке) либо вообще гашу (Key := #0).


 
Алексей   (2004-02-25 13:22) [9]

[8] Sandman25+1 (25.02.04 13:07)
"Честно говоря, я не представляю себе, почему так важно именно правое выравнивание и пробелы."
Такое уж требование (в проге конкуренте - так же.. начальство сказало сделать "не хуже", а пока получается хуже:)).


 
Sandman25+1   (2004-02-25 13:28) [10]

Понятно. Надеюсь, пользователи не удивляются, почему у них курсор перемещается на одну позицию влево, когда он стоит перед 123.000 и они набирают 4, делая 4 123.000. Главное - сделать удобнее, чем у конкурентов, чтобы заказчику понравилось.


 
Алексей   (2004-02-25 13:33) [11]

а курсор никуда не перемещается :). Стоит как вкопанный (с этим немало пострадал), так что ввод достаточно удобный. Послее ввода 4 (при этом курсор стоял перед 123.000) становится число 4 123.000, причём курсор остаётся перед 1 (но после 4).


 
Алексей   (2004-02-25 13:35) [12]

уже получилось гораздо удобнее чем у конкурента, но и гораздо глючнее... Та же "проблема с запятой": допустим, число 123.000, выделяем начиная с 2-ки и кончая вторым 0-м и жмём del - будет билеберда (выражающаяся тем, что постобработчик скажет, что ошибка и сотрёт всё число, оставив дефолтное 0.000).


 
Sandman25+1   (2004-02-25 13:36) [13]

>Послее ввода 4 (при этом курсор стоял перед 123.000) становится число 4 123.000, причём курсор остаётся перед 1 (но после 4).

И если теперь пользователь наберет 5, то получится:
1) 5 123.000
2) 4 523.000
3) 45 123.000
4) 4 123.000

И самое главное: пользователь заранее может уверенно предположить, что получится? При включенном Insert и выключенном.


 
Алексей   (2004-02-25 13:45) [14]

" пользователь заранее может уверенно предположить, что получится? При включенном Insert и выключенном."
Конечно! Ибо как с включенным Insert так и с выключенным - результат один (как с выключенным, т.е. вставка, а не overwrite). Слишком большой свободы пользователю предпочитаю не давать. По крайней мере пока.


 
Алексей   (2004-02-25 13:46) [15]

"И если теперь пользователь наберет 5, то получится:"
конечно же вариант 3.


 
Алексей   (2004-02-25 14:15) [16]

2 Sandman25+1
"Edit1.OnChange := nil;
try
Edit1.Text := ...
finally
Edit1.OnChange := Edit1OnChange;
end;"

В случае с Edit1 - всё понятно. А если я использую конструкцию:
with TEdit(Sender) do
begin
OnChange := nil;
try
.....
.....
finally
OnChange := XXXX;
end;
end;

Что вместо ХХХХ? Извиняюсь - просто сейчас нет времени лезть в хелпы/книги.


 
Sandman25+1   (2004-02-25 16:19) [17]

var
P: TNotifyEvent; // или Pointer

...
P := OnChange;
OnChange := nil;
try
...
finally
OnChange := P;
end;

Дело не в книгах :)
Если нужно вернуть старое значение, то это старое значение нужно где-то запомнить.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
14-12524
kentavr
2004-01-23 13:38
2004.03.05
Проблема с Bitmap


3-12281
Мыш
2004-02-06 20:41
2004.03.05
удаление? записей из запроса


3-12265
Iscandersam
2004-02-09 09:36
2004.03.05
Передача данных из одной базы в другую.


3-12241
АМБ
2004-02-09 16:35
2004.03.05
Индексация по Calculated Field


1-12404
Rentgen
2004-02-24 17:31
2004.03.05
ASM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский