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

Вниз

Перевод Ф.И.О. в верхний регистр   Найти похожие ветки 

 
zdm ©   (2008-09-29 14:35) [0]

Добрый день. Вот такая вот задачка, юзер вбивает фамилию, имя, отчество и после нажатия пробела между, соответсвенно фам, имени первые буквы должны переводиться в верхний регистр. Ни чего умнее как
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-глобальная и если очень быстро набирать, то косяк получается, как будто комп запаздывает за набиранием и переводятся не те символы которые нужны...


 
{RASkov} ©   (2008-09-29 14:40) [1]

Плохой алгоритм.... а если два пробела нажать?
Лучше по окончанию ввода сделать нужное...


 
Юрий Зотов ©   (2008-09-29 14:41) [2]

Будет гораздо проще переводить регистр не сразу, а в событии OnExit. То есть, после полного окончания ввода.


 
{RASkov} ©   (2008-09-29 14:42) [3]

В данном алгоритме кроме двух пробелов еще кучу косяков можно найти.... например нажатие Del перед первой загавной и впечатывании следом другой буквы.... Вообщем туфта идея :)


 
zdm ©   (2008-09-29 14:43) [4]

согласен, на счет двух пробелов и прочих ньюансов это потом.. в Word допустим, все в реальном времени отрабатывается....


 
{RASkov} ©   (2008-09-29 14:44) [5]

А если делать чтоб при вводе, то можно добится всего этого... т.е. лешить косяков алгоритм, но он будет ресурсоемким(времязатратным).... В общем - не оптимальным....


 
Anatoly Podgoretsky ©   (2008-09-29 14:44) [6]

Это еще пользователь не перемещался мышкой по органу, вот тут и кырдык придет.


 
{RASkov} ©   (2008-09-29 14:46) [7]

> [4] zdm ©   (29.09.08 14:43)
> в Word допустим, все в реальном времени отрабатывается....

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


 
zdm ©   (2008-09-29 14:47) [8]

хорошо,  при окончательной обработке тогда как лучше поступить? бежать посимвольно циклом на Pos(" ")? искать delemiter? .. направте в нужное русло. спасибо.


 
{RASkov} ©   (2008-09-29 14:49) [9]

> [4] zdm ©   (29.09.08 14:43)
> согласен, на счет двух пробелов и прочих ньюансов это потом..

На счет "потом".... если сразу не сделаешь "скелет" своего алгоритма, то потом просто придется заново все придумывать с нуля - поверь.


 
zdm ©   (2008-09-29 14:50) [10]

пусть и далеко, я ворд и не собираюсь переписывать я знаю что там в несколько потоков каждый как отдельная программа я образно сказал что первое пришло по аналогии на ум...чо юродствовать то? мне просто интересно уже стало
1. Как грамотнее, но это уже почти выяснили, такая мысль и была первой. но вот как лучше подскажите.
2. Как допустим в этих же условиях при вводе просто отработать перевод в верхний регистр следующего символа после пробела


 
{RASkov} ©   (2008-09-29 14:53) [11]

> [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;


 
Юрий Зотов ©   (2008-09-29 14:56) [12]

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;


 
zdm ©   (2008-09-29 15:03) [13]

Спасибо приогромнейшее


 
Ega23 ©   (2008-09-29 15:05) [14]

Хочу заметить, что:
1. Бывают составные фамилии: Бонч-Бруевич, Салтыков-Щедрин.
2. Бывают составные имена: Магомед-Гаджи
3. Бывают составные отчества: ...-Оглы.


 
Поросенок Винни-Пух ©   (2008-09-29 15:08) [15]

А еще есть "Джордж Буш младший"

так что маета все это.


 
zdm ©   (2008-09-29 15:08) [16]


> Ega23 ©   (29.09.08 15:05) [14]

Спасибо за наводку.


 
zdm ©   (2008-09-29 15:10) [17]


> Поросенок Винни-Пух ©   (29.09.08 15:08) [15]

Тоже верно, но подрозумевается ввод по большей части, классики... Иванов Иван Иванович, а где "хитрые", они не так часто, то тут уже юзеру повнимательнее надо... ну хоть както хотелось облегчить задачку им..


 
zdm ©   (2008-09-29 15:13) [18]

не совсем сюда, но все таки... вопрос-то в принципе больше состоял в чувствительности к регистру FireBird, тоже пытался разные извращения делать на LIKE, понимаю что уже почти офтоп, но всетаки, может кто находил какие пути? слышал, что в настройке самой СУБД это можно сделать.. но как не могу найти.


 
Ega23 ©   (2008-09-29 15:18) [19]

upper(text) like ()   + ANSIUpperCase на клиенте.


 
zdm ©   (2008-09-29 15:30) [20]

но он же весь текст переведет вверх? или я не прав?

> Ega23 ©  

Если Вам не сложно, можно текст запроса... я делал раньше на Like - where текст Like AnsiLowerUperCase .. or AnsiUpperCase // но он берет либо все вверхнем либо все в нижнем.. можно поподробней пожалуйста


 
Anatoly Podgoretsky ©   (2008-09-29 15:31) [21]

> Поросенок Винни-Пух  (29.09.2008 15:08:15)  [15]

При том в английском будет заглавная


 
Anatoly Podgoretsky ©   (2008-09-29 15:33) [22]

> zdm  (29.09.2008 15:10:17)  [17]

При автоматическом обязательным переводом, ты им задачу сделаешь невыполнимой.


 
Правильный$Вася   (2008-09-29 15:34) [23]


> Ega23 ©   (29.09.08 15:05) [14]

мало того
некоторые отдельные части их могут писаться с маленькой
со строчной могут писаться и отдельные элементы типа д"Артаньян
только не говорите, что в русском языке нет таких фамилий
я лично знаю некоторых


 
Anatoly Podgoretsky ©   (2008-09-29 15:36) [24]

> zdm  (29.09.2008 15:30:20)  [20]

Важно, что бы справа и слева было одинаково!


 
zdm ©   (2008-09-29 15:38) [25]

ну я и хочу ..найди где Like %а% пусть ищет все где а большие или маленькие... Like %"% пусть найдет д"АрТАНьяна


 
Anatoly Podgoretsky ©   (2008-09-29 15:39) [26]

> Правильный$Вася  (29.09.2008 15:34:23)  [23]

Вы его все больше и больше расстраиваете его сердечную мышцу


 
zdm ©   (2008-09-29 15:40) [27]

с д"артаньяном кстати проще.. он найдет по " не важно тут регистр :)


 
Правильный$Вася   (2008-09-29 15:54) [28]


> с д"артаньяном кстати проще

неужто
Луи де Клермон, сеньор д"Амбуаз граф де Бюсси


 
Smile   (2008-09-29 15:56) [29]

Мне кажется, что вопрос какой-то не совсем корректный.
Ведь когда речь идет об Edit1, то это всего лишь отображение (к чему-то еще приплели и Word), а затем автор упомянул FireBird, который никакого отношения к EDit1 не имеет.
Ну, и, соответственно, ответы на пост...


 
Ega23 ©   (2008-09-29 15:58) [30]


> ну я и хочу ..найди где Like %а% пусть ищет все где а большие
> или маленькие... Like %"% пусть найдет д"АрТАНьяна


Приведи и левую и правую часть к одному и тому же регистру.
Код дать не могу, бо не шибко с FB работал. Но сам принцип везде одинаковый.

Select * from table where Upper(Field)="ИВАНОВ".

Может быть Upper, может быть UpperCase - смотри в документации.
Ну а ИВАНОВ - это ты уже на клиенте, с которого ищешь, подставляй через ANSIUpperCase.


> только не говорите, что в русском языке нет таких фамилий


Да есть, я не спорю. Более того, есть и такие, где фамилии как таковой нет. Иностранцы, например. В частности - монголы. У них только имя и отчество.


 
Anatoly Podgoretsky ©   (2008-09-29 16:02) [31]

> Smile  (29.09.2008 15:56:29)  [29]

Так бардак автор устраивает.


 
zdm ©   (2008-09-29 16:04) [32]

аааааааааааааааааа. все, понял. спасибище.. я думал Анатолий в очередной раз издевается :) на счет левой и правой части...


 
zdm ©   (2008-09-29 16:05) [33]


> Smile   (29.09.08 15:56) [29]

прочти [18] я сказал что офтоп немного ухожу..я извинился за это. Всем спасибо за участие, снимаю вопрос


 
Leonid Troyanovsky ©   (2008-09-29 16:11) [34]


> Ega23 ©   (29.09.08 15:58) [30]

> как таковой нет. Иностранцы, например. В частности - монголы.
>  У них только имя и отчество.

Чингизхановичи?

--
Regards, LVT.


 
Ega23 ©   (2008-09-29 16:14) [35]


> Чингизхановичи?


У меня одноклассник был монгол. Полное имя - Дамбдинсурэн Зузаан.


 
Ega23 ©   (2008-09-29 16:17) [36]

Кстати. У чехов, вроде, отчества нет.
Приезжал парень на диссер в институт в Дубне (их там много из Чехии приезжает). Ну мы с ним спелись (и спились.. .:) ). Он нас упросил взять его с собой на дроп-зону (когда я ещё прыгал). Ну а там бумаги оформлять. Типа, как отчество? А он и говорит, что, мол, нету. Да и не знает, что это такое.
Ну там все просто решили. "Как отца зовут?" "Ян". Ну и записали Вацлав Янович Новотны.  :)


 
Anatoly Podgoretsky ©   (2008-09-29 16:26) [37]

> Ega23  (29.09.2008 16:17:36)  [36]

Ну у нас тоже отчеств в государстве нет, пострадали все национальности, у которых есть.
Вот так и живу без отчества и отечества.


 
Поросенок Винни-Пух ©   (2008-09-29 16:28) [38]

У меня одноклассник был монгол. Полное имя - Дамбдинсурэн Зузаан.

А уменя был знакомый Цигра Александр Гуго-Вальдемарович.


 
zdm ©   (2008-09-29 16:39) [39]

и это значит я в офтоп вошел ? :)


 
zdm ©   (2008-09-29 16:45) [40]

забавная но предсказуемологичная вещь происходит теперь... в базе порядка 150-200 записей по которой идет поиск и поэтому сделал Edit для быстрого поиска.. и когда говорю Upper все забавненько так переводится в верхний регистр.. в принципе ни чего страшного, но смотрится не очень.. единственная мысль это изначально для отображения переводить в верхний , либо делать окно для ввода параметров поиска



Страницы: 1 2 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.012 c
2-1222699729
<Evil>
2008-09-29 18:48
2008.11.09
Как скрыть колонку в DBGrid ?


2-1222780319
Alexei
2008-09-30 17:11
2008.11.09
Использование TADOTable


15-1221473784
wayfarer
2008-09-15 14:16
2008.11.09
почему в mainmenu delphi for php 2.0 не выводятся русские символы


15-1221537289
Slider007
2008-09-16 07:54
2008.11.09
С днем рождения ! 16 сентября 2008 вторник


4-1199729300
kichrot
2008-01-07 21:08
2008.11.09
Как скрыть окно проги при использование ShellExecute для печати?