Главная страница
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.013 c
3-23947
Afreet
2002-07-19 07:36
2002.08.08
Есть ли ограничения у TTable на количество принимаемых записей?


8-24130
Mixan
2002-03-30 13:52
2002.08.08
Как сделать бегущий вверх текст (титры) на фоне картинки?


3-23926
Ag2002
2002-07-18 14:55
2002.08.08
Grid


3-23872
Alexandrda
2002-07-17 10:06
2002.08.08
Смена кодовой страницы у существующей базы программным способом


3-23898
vich
2002-07-12 23:13
2002.08.08
Как отобразить в TDBGrid результат поиска?