Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.08;
Скачать: CL | DM;

Вниз

Грабли по имени 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-23892
Ильдар
2002-07-17 12:53
2002.08.08
надо обновить отображение БД


1-24068
Dmitry Toropov
2002-07-25 18:22
2002.08.08
И снова удаление файлов :((


14-24204
Billy
2002-07-14 05:01
2002.08.08
Потомки TObject


1-23969
Arhangel
2002-07-25 15:47
2002.08.08
Иконки


3-23927
maxon
2002-07-18 14:36
2002.08.08
по поводу Excel