Главная страница
    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.021 c
3-23939
NDR
2002-07-17 15:36
2002.08.08
Table1 Режим чтобы нельзя было добавлять новые записи


3-23925
Sam
2002-07-17 18:55
2002.08.08
ADOQuery.Locate дает ошибку Record not found?


6-24159
gsa
2002-05-29 17:43
2002.08.08
NMFTP - докачка файлов


4-24278
KeVRter
2002-06-03 14:10
2002.08.08
Движения мыши....Как отключить в XP CTRL+ALT+DEL...


3-23886
Rustik
2002-07-17 11:05
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский