Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перевод Ф.И.О. в верхний регистр


Страницы:   1 2 3

zdm ©   (2008-09-29 14:35:00) 

Добрый день. Вот такая вот задачка, юзер вбивает фамилию, имя, отчество и после нажатия пробела между, соответсвенно фам, имени первые буквы должны переводиться в верхний регистр. Ни чего умнее как
procedure TForm4.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

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;
 я не придумал... но почемуто срабатывает когда переменная q-глобальная и если очень быстро набирать, то косяк получается, как будто комп запаздывает за набиранием и переводятся не те символы которые нужны...


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 допустим, все в реальном времени отрабатывается....

Не совсем так.... Там очень по умному сделано.... тебе долеко до этого, поверь :)
Т.е. там не две строчки кода и даже не десять и не..... вобщем там целая программа...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо