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

Вниз

Грабли по имени UpCase   Найти похожие ветки 

 
Иван61   (2002-07-28 20:02) [0]

Необходимо при вводе текста в TEdit получить первый символ заглавным. Делаю так:
procedure TForm1.Edit1Change(Sender: TObject);
Function UpString (stInp:String):String;
var k:integer;
begin
Result:=StInp;
for k:=1 to 1 do
begin
Result[k]:=UpCase(Result[k]);
if Result[k]>="а" then
Result[k]:=Chr(ord("А")+ord(Result[k])-ord("а"));
if Result[k]="ё" then
Result[k]:="Ё";
end;
end;
begin
try
Edit1.Text:=UpString(Edit1.Text);
Edit1.SelStart := Length(Edit1.Text); // Перевод курсора в конец слова
except
end;
end;

Пока всё нормально. Но как только попытаться редактировать слово, то курсор сразу стаёт в конец слова (выполняется Edit1.SelStart := Length(Edit1.Text); ), а без него курсор после преобразования становится в начало строки. Как быть, чтобы при редактировании курсор оставался на месте и не переводился в конец? Может есть более простой вариант?
Заранее спасибо.


 
Юрий Зотов   (2002-07-28 20:15) [1]

Угу, есть более простой вариант.

procedure TForm1.Edit1Change(Sender: TObject);
var
S: string;
begin
Edit1.OnChange := nil;
try
S := Edit1.Text;
S[1] := AnsiUpperCase(S)[1];
Edit1.Text := S
finally
Edit1.OnChange := Edit1Change
end
end;


 
object pascal   (2002-07-28 20:21) [2]

Только лучше
if S<>"" then S[1] := AnsiUpperCase(S[1])[1];


 
Юрий Зотов   (2002-07-28 20:24) [3]

Стоп... сюда нужно сделать добавление:

procedure TForm1.Edit1Change(Sender: TObject);
var
S: string;
P, L: integer;
begin
Edit1.OnChange := nil;
try
P := Edit1.SelStart;
L := Edit1.SelLength;
S := Edit1.Text;
S[1] := AnsiUpperCase(S[1])[1];
Edit1.Text := S;
Edit1.SelStart := P;
Edit1.SelLength := L
finally
Edit1.OnChange := Edit1Change
end
end;

А еще лучше менять регистр в Edit1.OnKeyPress:
if Edit1.Text = "" then ... // Меняем регистр Key


 
Иван61   (2002-07-28 20:25) [4]

Юрий Зотов © (28.07.02 20:15)

В Вашем варианте все символы вводятся заглавными и курсор всегда в начале. Заглавным должен быть только первый символ.
Как быть?


 
Иван61   (2002-07-28 20:30) [5]

Юрий Зотов © (28.07.02 20:24)

Юрий, спасибо Вам большое. Второй Ваш вариант как раз то, что надо!!!


 
Юрий Зотов   (2002-07-28 20:36) [6]

В первом варианте Вы забыли поставить [1].

А второй вариант тоже плохой. Он ОЧЕНЬ плохой, поверьте. Там целое море лишних операций. Выкиньте обработчик OnChange совсем и обрабатывайте OnKeyPress - это НАМНОГО лучше.



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

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

Наверх





Память: 0.56 MB
Время: 0.029 c
6-24147
Jeck
2002-05-27 17:48
2002.08.08
Простой вопросик


3-23887
AFROLOV
2002-07-16 15:22
2002.08.08
Как изменить порядок отображения записей в DBGRID


1-23995
ed_209
2002-07-28 02:16
2002.08.08
2 FileStreams on 1 file...


4-24274
ДимкаН
2002-06-03 11:19
2002.08.08
Как получить иконку для заданного приложения?


3-23934
Loco
2002-07-14 16:18
2002.08.08
Исключения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский