![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]прошу прощения, "кириллица" везде с одной "л" написал