Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CharCase в буквах кирилицы. [D7, WinME, WinXP]


M_Untitled ©   (2004-11-17 10:57:00) 

Привет всем!
Решил я как-то использовать одну старую базу улиц города, она в DBF, а улицы написаны в верхнем регистре. А мне надо в нижнем, и чтоб первая буква заглавная была. В ручную переписать более 600 записей мне лень, думаю, функции UpperCase и LowerCase мне помогут. Но в кирилице не проходит такое дело - типа, Edit1.Text := LowerCase(string), если, конечно, Edit1.CharCase уже не установлен в LowerCase. Но тогда все буквы будут маленькими. Не стал пока ничего искать по этому вопросу, а тупо накидал на форму 3 эдита:
Edit1.CharCase=UpperCase, Edit2.CharCase=LowerCase, Edit3.CharCase=Normal, и стал эксперементировать. В первом Edit ввожу слово, копирую в пременную первую букву, остальную часть слова во второй Edit, и уже в третьем Edit склеиваю пременную и текст второго Edit. Выходит чудесно - слово с заглавной буквы,
остальные в нижнем регистре.
А теперь вопрос: поскольку второй Edit мне нужен только для промежуточного значения, я делаю ему Visible=False. И тогда, происходит интересная вещь: буквы остаются в верхнем регистре. Но если сделать второму Edit Visible=True, даже после присваивания "обрезанного" текста, то все проходит oк. Какая связь между
видимостью объекта Edit и регистром букв? И, уж, раз я все равно на форум вышел - как программно преводить регистр букв слов на кирилице? Спасибо всем, кто поделится информацией или кинет ссылку.


M_Untitled   (2004-11-17 13:10:00) [1]

>ЮЮ [7]
Уважаемый, Вы применили функцию AnsiUpperCase, с ней все работает и без эдитов, в отличии от свойства Edit CharCase. Но, все равно, спасибо


TUser   (2004-11-17 12:55:00) [2]


> ЮЮ ©   (17.11.04 12:01) [7]

Тут CharCase действительно не работает у невидимого эдита.

  Edit2.Text:=copy(Edit1.Text,2,length(Edit1.Text)-1);
  EDit3.Text:=Edit1.Text[1]+Edit2.Text;

Почему - я вот думаю.


KilkennyCat   (2004-11-17 12:04:00) [3]


> ЮЮ ©   (17.11.04 12:01) [7]


не совсем то. автор использует свойство эдита CharCase, как я понял. Вероятно, его изменение у невидимого эдита не вызывает требуемого.


ЮЮ   (2004-11-17 12:01:00) [4]

Хоть бы "неработающий" код с невидимым Edit-oм привел.
У меня, например, все работает:

procedure TForm1.Button1Click(Sender: TObject);
var
 txt: string;
begin
 Edit2.Visible := false;
 txt := Edit1.Text;
 Edit2.Text :=
   AnsiUpperCase(Copy(txt, 1, 1)) + AnsiLowerCase(Copy(txt, 2, length(txt)));
 Edit1.Text := Edit2.Text;
end;  


KilkennyCat   (2004-11-17 12:01:00) [5]

не знаю. Предполагаю, что невидимому объекту не требуется перерисовка. Непонятно, зачем использовать Edit как буфер... для этого есть string


M_Untitled   (2004-11-17 11:44:00) [6]

Я, конечно, не настаиваю, но все же какая связь между видимостью Edit и регистром букв? Спасибо.


M_Untitled   (2004-11-17 11:21:00) [7]

Прекрасно! Несколько вариантов ответов на последнюю часть вопроса: какая связь между видимостью Edit и регистром букв?


KilkennyCat   (2004-11-17 11:06:00) [8]

AnsiLowerCase AnsiUpperCase без  всяких RxLib


TUser   (2004-11-17 11:05:00) [9]

Не нужны тебе эдиты

if S[1] in ['а'..'я'] then
S[1]:=char(ord(S[1])+(ord('А')-ord('а')));
for i:=2 to length(S) do
if S[i] in ['А'..'Я'] then
S[i]:=char(ord(S[i])-(ord('А')-ord('а')));


Ega23   (2004-11-17 11:01:00) [10]

RXLib, unit StrUtils, function ANSIProperCase


M_Untitled   (2004-11-17 10:59:00) [11]

прошу прощения, "кириллица" везде с одной "л" написал


Наверх

Титульная страница Поиск, карта сайта Написать письмо