Конференция "KOL" » UNICODE_CTRLS Bug? [Delphi]
 
  • halftime (31.12.12 09:54) [0]
    when use UNICODE_CTRLS, editbox 's option eoNumber, osReadOnly work very strange!!! eoNumber can still input abc, osReadOnly can still input abc
  • Thaddy © (08.01.13 16:50) [1]
    Try using PAS_ONLY
  • halftime (15.01.13 09:39) [2]
    using PAS_ONLY is same :(
  • Thaddy © (15.01.13 14:33) [3]
    Confirmed.
    I will check it out.
  • halftime (16.01.13 05:15) [4]
    thanks a lot
  • AndreyRus © (22.01.13 23:31) [5]
    Where Master - Vladimir Kladov?
  • AndreyRus © (22.01.13 23:33) [6]
    May be dead...? Тьфу... Тьфу... Тьфу...
  • Владимир Кладов (05.02.13 16:50) [7]
    Проблема в том, что для NewEditbox при включенном UNICODE_CTRLS подключается процедура WndProcUnicodeChars. Цель ее - правильно вводить символы unicode, о контроле самого ввода в тот момент никто и не думал. Самый простой способ (на данный момент и вообще - см. ниже) поставить свой обработчик OnKeyChar и глушить все нежелательные символы, заменяя из на #0 (или все глушить).

    Судя по тому, что проблема всплыла только сейчас, никого она сильно и не колыхала, то есть - если соблюдать чистый идеологический принцип "никакого лишнего кода", - такое решение будет в разы лучше, чем поправить процедуру WndProcUnicodeChars (хотя бы даже правка была и из двух строк). Кроме того, до win7 в любом случае eoNumber например - это очень грязное решение, т.к. можно было вставить не цифры через буфер обмена или программно, и все равно правильнее было контролировать ввод через OnKeyChar.

    Для случая readonly еще корректнее никогда не использовать этот стиль и не вводить юзера в заблуждение. Эдит, в который нельзя вводить, должен выглядеть как задизэйбленный, и соответственно, быть not Enabled. Любые оговорки, типа "плохо видно" в задизейбленном режиме - не принимаются, надо настраивать темы так, чтобы было видно.
  • Владимир Кладов (05.02.13 17:03) [8]
    Sorry. En English. Problem is in procedure WndProcUnicodeChars which is attached to Editbox in UNICODE_CTRLS mode. It is providing correct input of unicode characters (fixing MS) but it is not filtering the input for case when it is restricted by ES_NUMER or ES_READONLY styles, so all characters are accepted. This was may be a bug but anyway it is better to avoid using esNumber and esReadOnly styles but to add an event OnKeyChar and filter undesired characters there (changing it to #0).

    If edit control has ES_NUMBERS style it is therefore allows (in XP and earlier) to input any chars via clipboard.

    If edit control has ES_READONLY style it is looking as enabled but it is does not enable enter chars and this is bad behavior for users. Just disable it and this is much better.
  • halftime (07.02.13 10:34) [9]
    I checked WndProcUnicodeChars, you are right, i change code in OnKeyChar
 
Конференция "KOL" » UNICODE_CTRLS Bug? [Delphi]
Есть новые Нет новых   [134427   +34][b:0][p:0.001]