Форум: "Основная";
Текущий архив: 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