![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевод Ф.И.О. в верхний регистр
zdm © (2008-09-29 14:35:00)Добрый день. Вот такая вот задачка, юзер вбивает фамилию, имя, отчество и после нажатия пробела между, соответсвенно фам, имени первые буквы должны переводиться в верхний регистр. Ни чего умнее как
procedure TForm4.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);я не придумал... но почемуто срабатывает когда переменная q-глобальная и если очень быстро набирать, то косяк получается, как будто комп запаздывает за набиранием и переводятся не те символы которые нужны...
begin
if q=1 then //был пробел, следующий символ переводим в верхний регистр
begin
Edit1.Text:=Copy(edit1.Text,1,Length(Edit1.Text)-1)+AnsiUpperCase(copy(Edit1.Text,Length(Edit1.Text),1));
end;
//ловим нажатие пробела
if key = VK_SPACE then q:=1 else q:=0;
end;
Anatoly Podgoretsky (2008-09-29 15:39:00) [21]> Правильный$Вася (29.09.2008 15:34:23) [23]
Вы его все больше и больше расстраиваете его сердечную мышцу
zdm (2008-09-29 15:38:00) [22]ну я и хочу ..найди где Like %а% пусть ищет все где а большие или маленькие... Like %'% пусть найдет д'АрТАНьяна
Anatoly Podgoretsky (2008-09-29 15:36:00) [23]> zdm (29.09.2008 15:30:20) [20]
Важно, что бы справа и слева было одинаково!
Правильный$Вася (2008-09-29 15:34:00) [24]
> Ega23 © (29.09.08 15:05) [14]
мало того
некоторые отдельные части их могут писаться с маленькой
со строчной могут писаться и отдельные элементы типа д'Артаньян
только не говорите, что в русском языке нет таких фамилий
я лично знаю некоторых
Anatoly Podgoretsky (2008-09-29 15:33:00) [25]> zdm (29.09.2008 15:10:17) [17]
При автоматическом обязательным переводом, ты им задачу сделаешь невыполнимой.
Anatoly Podgoretsky (2008-09-29 15:31:00) [26]> Поросенок Винни-Пух (29.09.2008 15:08:15) [15]
При том в английском будет заглавная
zdm (2008-09-29 15:30:00) [27]но он же весь текст переведет вверх? или я не прав?
> Ega23 ©
Если Вам не сложно, можно текст запроса... я делал раньше на Like - where текст Like AnsiLowerUperCase .. or AnsiUpperCase // но он берет либо все вверхнем либо все в нижнем.. можно поподробней пожалуйста
Ega23 (2008-09-29 15:18:00) [28]upper(text) like () + ANSIUpperCase на клиенте.
zdm (2008-09-29 15:13:00) [29]не совсем сюда, но все таки... вопрос-то в принципе больше состоял в чувствительности к регистру FireBird, тоже пытался разные извращения делать на LIKE, понимаю что уже почти офтоп, но всетаки, может кто находил какие пути? слышал, что в настройке самой СУБД это можно сделать.. но как не могу найти.
zdm (2008-09-29 15:10:00) [30]
> Поросенок Винни-Пух © (29.09.08 15:08) [15]
Тоже верно, но подрозумевается ввод по большей части, классики... Иванов Иван Иванович, а где "хитрые", они не так часто, то тут уже юзеру повнимательнее надо... ну хоть както хотелось облегчить задачку им..
zdm (2008-09-29 15:08:00) [31]
> Ega23 © (29.09.08 15:05) [14]
Спасибо за наводку.
Поросенок Винни-Пух (2008-09-29 15:08:00) [32]А еще есть "Джордж Буш младший"
так что маета все это.
Ega23 (2008-09-29 15:05:00) [33]Хочу заметить, что:
1. Бывают составные фамилии: Бонч-Бруевич, Салтыков-Щедрин.
2. Бывают составные имена: Магомед-Гаджи
3. Бывают составные отчества: ...-Оглы.
zdm (2008-09-29 15:03:00) [34]Спасибо приогромнейшее
Юрий Зотов (2008-09-29 14:56:00) [35]procedure TForm1.Edit1Exit(Sender: TObject);
begin
S := Trim(Edit.Text);
if S = '' then
Exit;
S[1] := AnsiUpperCase(S[1]);
i := 2;
n := 1;
while (i <= Length(S)) and (n < 3) do
begin
if (S[i - 1] = ' ') and (S[i] <> ' ') then
begin
S[i] := AnsiUpperCase(S[i]);
Inc(n);
end;
Inc(i);
end;
Edit.Text := S;
end;
{RASkov} (2008-09-29 14:53:00) [36]> [8] zdm © (29.09.08 14:47)
function UpperFirstCharWords(const S: String): String;
var N: Integer; Space, OldSpace: Boolean;
begin
Result:=S; Space:=True;
for N:= 1 to Length(Result) do begin
OldSpace:=Space; Space:=Result[N]=#32;
if (not Space and (OldSpace<>Space)) then
Result[N]:=AnsiUpperCase(Result[N])[1];
end;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
Edit1.Text:=UpperFirstCharWords(Edit1.Text);
end;
zdm (2008-09-29 14:50:00) [37]пусть и далеко, я ворд и не собираюсь переписывать я знаю что там в несколько потоков каждый как отдельная программа я образно сказал что первое пришло по аналогии на ум...чо юродствовать то? мне просто интересно уже стало
1. Как грамотнее, но это уже почти выяснили, такая мысль и была первой. но вот как лучше подскажите.
2. Как допустим в этих же условиях при вводе просто отработать перевод в верхний регистр следующего символа после пробела
{RASkov} (2008-09-29 14:49:00) [38]> [4] zdm © (29.09.08 14:43)
> согласен, на счет двух пробелов и прочих ньюансов это потом..
На счет "потом".... если сразу не сделаешь "скелет" своего алгоритма, то потом просто придется заново все придумывать с нуля - поверь.
zdm (2008-09-29 14:47:00) [39]хорошо, при окончательной обработке тогда как лучше поступить? бежать посимвольно циклом на Pos(' ')? искать delemiter? .. направте в нужное русло. спасибо.
{RASkov} (2008-09-29 14:46:00) [40]> [4] zdm © (29.09.08 14:43)
> в Word допустим, все в реальном времени отрабатывается....
Не совсем так.... Там очень по умному сделано.... тебе долеко до этого, поверь :)
Т.е. там не две строчки кода и даже не десять и не..... вобщем там целая программа...