Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Редактирование надписей в компоненте едит   Найти похожие ветки 

 
Глеб   (2012-05-05 16:58) [0]

Добрый день!

Почти разобрался со своей проблемой, но есть одна просьба. Сейчас мой программный код добавляет/удаляет символы, но эти действия происходят в конце компонента, как сделать так что бы можно было в любой позиции это делать? Вот код

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
 var n : integer;
 s : string;
 begin
 if Key=8 then begin
 Edit1.Text:=copy(Edit1.Text,1, Length(Edit1.Text)-3);
 Edit1.SelStart:=Length(Edit1.Text);
 end;
 end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
 const
 mask : set of char =["0".."9" , "a".."z" , "A".."Z"];
 begin
 if not (Key in mask) then Key:=#0
 else begin
 Edit1.Text:=Edit1.Text + " ,";
 Edit1.SelStart:=Length(Edit1.Text) - 2;
 end;
 end;


 
Cobalt ©   (2012-05-05 17:02) [1]

Ты, мил человек, сначала опиши, что ты хочешь получить,
а то код активно скрывает смысл :-)


 
Глеб   (2012-05-05 17:23) [2]

Все предельно просто. Мой программный код делает редактирование в конце строки едита, а мне нужно везде. т.е. если ты написал 1245 в моем едите и вспомнил, что пропустил 3 ты не сможешь вставить 3 туда куда нужно так как едет запихнет в конец 12453.

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


 
Медвежонок Пятачок ©   (2012-05-05 17:34) [3]

это, я так понимаю, программа для пользователей с ампутированными пальцами рук?


 
Юрий Зотов ©   (2012-05-05 17:37) [4]


> Глеб   (05.05.12 17:23) [2]

См. свойства SelStart, SelLength, SelText.

Но возникает вопрос - а зачем нужен такой компонент? Не лучше ли использовать стандартный? Он такими закидонами не страдает.


 
KilkennyCat ©   (2012-05-05 18:01) [5]


> procedure TForm1.Edit1KeyPress(Sender: TObject; var Key:
>  Char);
>  const
>  mask : set of char =["0".."9" , "a".."z" , "A".."Z"];
>  begin
>  if not (Key in mask) then Key:=#0
>  else begin
>  Edit1.Text:=Edit1.Text + " ,";
>  Edit1.SelStart:=Length(Edit1.Text) - 2;
>  end;
>  end;


достаточно
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
 mask : set of char =["0".."9" , "a".."z" , "A".."Z"];
begin
 if not (Key in mask) then Key:=#0;
end;
и тогда не будет только в конец строки


 
глеб   (2012-05-05 18:25) [6]

KilkennyCat так то понятно, что ты избавишь меня от проблемы частичного редактирования, но мне важна строка >  Edit1.Text:=Edit1.Text + " ,"; Поэтому если у тебя есть дополнительные идеи прошу их озвучить.


 
Медвежонок Пятачок ©   (2012-05-05 18:29) [7]

лучше сосредоточится на обработке введенного, а не на введении символов за юзера. полезнее будет в сто раз.


 
Медвежонок Пятачок ©   (2012-05-05 18:31) [8]

if not (Key in mask) then Key:=#0;

бакспейс, дел, стрелки .....


 
KilkennyCat ©   (2012-05-05 18:46) [9]


> важна строка >  Edit1.Text:=Edit1.Text + " ,";

в процессе ввода строки, или потом, при обработке строки?


 
Cobalt ©   (2012-05-05 19:01) [10]

Глеб, абсолютносовершенно непонятно, как именно ты хочешь обрабатывать строку в конмпоненте.

Т.е. Ты говоришь "Я делать хочу"
ответ - дык, делай, никто не мешает.
Ты: я не только тут делать хочу, но и там делать хочу.

А что именно ты хочешь - дом строить, руду плавить, тачать сапоги или печь хлеб - ты упорно скрываешь.

Исходно какая задача?


 
глеб   (2012-05-05 19:32) [11]

KilkennyCat и при вводе символов и при удалении.
Cobalt мне надо сделать так чтобы в эдит вводились только анг. буквы и цифры. При вводе буквы программу должна сама поставить пробел и запятую.

вот так с ,

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

Я смог этого достичь, но нужно проводить редактирование в позиции под курсором, а у меня только последние элементы редактируются


 
Медвежонок Пятачок ©   (2012-05-05 19:35) [12]

тебе же уже сказали. позиция курсора - это селстарт


 
глеб   (2012-05-05 19:42) [13]

Медвежонок Пятачок так я не знаю, как его использовать чтобы он мне помог в решении проблемы


 
Юрий Зотов ©   (2012-05-05 20:08) [14]


> глеб   (05.05.12 19:42) [13]

А справки у Вас разве нет? Там по поводу SelStart все сказано.


 
Медвежонок Пятачок ©   (2012-05-05 20:15) [15]

кстати, позиция курсора ему в общем случае не поможет.

например введено:

a ,b ,23c ,

выделяем часть строки и  нажимаем букву d

получаем:
d ,23c ,

что здесь надо удалить?


 
Медвежонок Пятачок ©   (2012-05-05 20:21) [16]

второй хитрый вопрос:
как вообще в предыдущем сценарии понять, что я что-то удалил?
я не нажимал ни дел, ни бэкспейс. Если бы выделение было не столь удачным, то постобработка потребовалась бы.
а ни дела ни бекспейса не было


 
KilkennyCat ©   (2012-05-05 20:57) [17]

ну, пока четкой формулировки задачи не видно - решения нет.


 
Глеб   (2012-05-05 21:20) [18]

KilkennyCat я вам рассказал, что мне надо если что то не понятно давайте подробно объясню

Медвежонок Пятачок сожалею, но я не понял, что ты написал.

Давайте я вам повторю. Мне надо чтобы при вводе с клавиатуры анг. символа скажем "g" программа вела в эдит "g ," при удалении пользователь наживает один раз на бэкспейс ("key = 8" - код операции удаления), а программа удалит символ + пробел + запятую.

Я смог добиться этого, НО все эти действия происходят на конце записи эдита т.е. нельзя сфокусироваться на середине и удалить/добавить символ в центре. Весть процесс редактирования происходит на конце.

Поэтому я прошу мне помочь с редактором записи, что бы можно было
проводить  операции под курсором мыши, а не в самой правой части.
вод код удаления:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var n : integer;
s : string;
begin
if Key=8 then begin
Edit1.Text:=copy(Edit1.Text,1, Length(Edit1.Text)-3);
Edit1.SelStart:=Length(Edit1.Text);
end;
end;

вот код добавления
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
mask : set of char =["0".."9" , "a".."z" , "A".."Z"];
begin
if not (Key in mask) then Key:=#0
else begin
Edit1.Text:=Edit1.Text + " ,";
Edit1.SelStart:=Length(Edit1.Text) - 2;
end;
end;


 
KilkennyCat ©   (2012-05-05 21:39) [19]

то есть у тебя любой алфавитно-цифровой символ должен заменяться комбинацией этот символ-пробел-запятая? и вся обработка таким макаром?
отследить все перемещения курсора, разрешая попадать лишь в места x * 3. удаление, выделение так же тройное.


 
Глеб   (2012-05-05 21:42) [20]

если я тебе правильно понял, Константин, то ДА


 
Глеб   (2012-05-05 21:45) [21]

KilkennyCat ты лучше в дельфи скопирую мой код, поставь эдит и два события
KeyPress и KeyDown все сразу станет понятнее.


 
KilkennyCat ©   (2012-05-05 21:48) [22]

ну дык напиши проверку selstart и sellength чтобы всегда выполнялось условие позиционирования. от стрелок и от мыши. и на удаление чтоб три символа сразу. и проверку буфера, если вставка разрешена.


 
Глеб   (2012-05-05 21:52) [23]

KilkennyCat ох ёё я на дельфи 5 день работаю еще не очень грамотный в этом плане если мог бы сделать сам на форум не писал бы. Мне желательно получить переделанный код


 
KilkennyCat ©   (2012-05-05 21:53) [24]

в примитивном варианте ввод клавиши:

edit1.text := Insert(key + " ,", edit1.text, edit1.selstart);


 
Глеб   (2012-05-05 21:55) [25]

KilkennyCat это на ввод клавиши, сейчас посмотрю в проекте, как оно работает


 
Глеб   (2012-05-05 22:01) [26]

[Hint] Unit3NactroikaCkanera.pas(276): Variable "s" is declared but never used in "TForm3.Edit1KeyDown"
[Hint] Unit3NactroikaCkanera.pas(275): Variable "n" is declared but never used in "TForm3.Edit1KeyDown"

теперь выводит такую ошибку, но понять не могу, как эта надпись edit1.text := Insert(key + " ,", edit1.text, edit1.selstart); притащила эти ошибки. Переменные n и s из другой процедуры и они локальные


 
KilkennyCat ©   (2012-05-05 22:03) [27]

а... ошибся я, подводит память.
примерно так надо:
var
 s : string;
begin
 s := edit1.text;
 insert(key + " ,", s, edit1.text);
 edit1.text := s;
 key := #0;
end;

и скорее всего понадобится возвращать selstart в новую позицию.


 
KilkennyCat ©   (2012-05-05 22:04) [28]

тьфу, опять ошибся.
insert(key + " ,", s, edit1.selstart);


 
Глеб   (2012-05-05 22:09) [29]

попытался ввести 1234567890, а вышло 0 , 9 , 8 , 7 , и т.д. все наоборот, но есть редактирование, а можно сделать так чтобы было как у меня только + редактирование)


 
Глеб   (2012-05-05 22:16) [30]

KilkennyCat insert(key + " ,", s, edit1.selstart -  Length(Edit1.Text)+ 1); так работает более корректно, но опять если с позиционироваться на центе записи 1 , 3, 4, и поставить 2 то получиться 1 , 3 , 4 , 2 , то уходит в право(

Как же еня это уже достало


 
KilkennyCat ©   (2012-05-05 22:16) [31]

можно, надо только разобраться, когда вообще изменяется selstart... и возможно, на onKeyUp придется вешать обработку. экспериментируй, и вообще, insert - это лишь вариант, возможны и другие решения. я бы, скорее всего, послал бы вдогонку эмуляцию нажатия клавиш пробела и запятую.


 
Глеб   (2012-05-05 22:17) [32]

KilkennyCat да и я хочу послать, но мне нужно это условия заказа


 
KilkennyCat ©   (2012-05-05 22:29) [33]

частичное решение:

procedure TForm1.edit1KeyPress(Sender: TObject; var Key: Char);
begin
 edit1.Tag := edit1.SelStart;
end;

procedure TForm1.edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
 s : string;
begin
 s := edit1.Text;
 Insert(" ,", s, edit1.Tag + 2);
 edit1.Text := s;
 edit1.selstart := edit1.Tag + 3;
 edit1.SelLength := 0;
end;



 
Глеб   (2012-05-05 22:39) [34]

procedure TForm3.Edit1KeyDown(Sender: TObject; var Key: Word;                  
Shift: TShiftState);
 var n : integer;                                                              
     s : string;                                                                
 begin
  if Key=8 or 46 then begin                                                    
                              S:=Edit1.Text;                                          
                              n:=Edit1.SelStart;                                      
                              Edit1.Text:=copy(S, 1, n-3)+copy(S, n+1, Length(S)-n);  
                              Edit1.SetFocus;                                        
                              Edit1.SelStart:=n-1;
                           end;
end;
end.

процедура удаления символа + пробел + запятая из любой позиции под курсором мыши

Фух с этим справился


 
Глеб   (2012-05-05 22:40) [35]

KilkennyCat сейчас посмотрю твой код на добавление


 
Глеб   (2012-05-05 22:52) [36]

KilkennyCat хм твой код действительно помогает, но есть нюанс. если скажем набрать 1245, то программа ответит 1 ,2 ,4 ,5 , вроде хорошо и даже можно вставить 3 между 2 и 4 программа ответит 1 ,2 ,3 ,4 ,5 , редактирование есть в любой позиции, НО если поставить курсор мыши в компоненте эдит сразу после цифры 2 то получиться  1 , 22, ,3 ,4 ,5 , надо сделать проверку на область добавления

Сам не знаю как


 
MBo ©   (2012-05-05 23:01) [37]

Простой способ не подойдет?
В едит вводишь только нужные символы, а обработанный текст отображается отдельно


 
KilkennyCat ©   (2012-05-05 23:04) [38]

я же говорил, необходим контроль selstart. как только он захочет поменяться, проверяй и разрешай изменение если только в правильное место хочет.

и еще есть проблема мультиповтора при долгом нажатии.


 
Глеб   (2012-05-05 23:06) [39]

MBo нет, мне надо именно так как я описывал выше. Хорошо, что сделал удаление работает классно, сам доволен. Посмотри, как работает может, где ошибся и не вижу.

procedure TForm3.Edit1KeyDown(Sender: TObject; var Key: Word;                  
Shift: TShiftState);
var n : integer;                                                              
    s : string;                                                                
begin
 if (Key=8) or (Key=46) then begin                                                    
                                        S:=Edit1.Text;                                          
                                        n:=Edit1.SelStart;                                      
                                        Edit1.Text:=copy(S, 1, n-3)+copy(S, n+1, Length(S)-n);  
                                        Edit1.SetFocus;                                        
                                        Edit1.SelStart:=n-1;
                                      end;
end;
end.  

А вот с добавлением пока косяки идут


 
Глеб   (2012-05-05 23:12) [40]

KilkennyCat спасибо за совет буду думать, если сам не додумаю, можно к тебе обратиться


 
Медвежонок Пятачок ©   (2012-05-05 23:36) [41]

if Key=8 or 46 then begin    

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


 
Глеб   (2012-05-05 23:42) [42]

Медвежонок Пятачок не совсем понял что ты хотел сказать в этом сообщении и в сообщении на которые ссылаешь,но удаление работает у меня корректно, происходит только по дел и бэкспей. Если ты смог удалить символ в моей программе как то иначе прошу сказать. Код программы есть (39сообщение) - прошу протестирую


 
Медвежонок Пятачок ©   (2012-05-05 23:48) [43]

выдели кусок текста в своем эдите.
затем не снимая выделения нажми букву  "x"


 
Глеб   (2012-05-05 23:51) [44]

Медвежонок Пятачок Все отлично, рекомендую протестировать самому


 
Inovet ©   (2012-05-06 08:24) [45]

> [29] Глеб   (05.05.12 22:09)
> попытался ввести 1234567890, а вышло 0 , 9 , 8 , 7 ,

Ты это и просил, после уточнения ещё и подтвердил.


 
Глеб   (2012-05-06 17:05) [46]

Inovet значит мы друг друга не поняли. Мне надо: если нажать на клавиши от 0 до 9, A до Z, a до z. То программа должна отвечать в эдите (символ ввода + пробел + запятая). Ввод символа должен быть везде и в начале записи, и в середине, и в конце. При этом нужна проверка куда идет запись чтобы не было ситуации когда (22  ,, - это описано в сообщении №36)

Я смог добиться полного редактирование, но идет проблема, описанная в сообщении №36

Поэтому если кто знает решение, прошу помочь


 
turbouser ©   (2012-05-06 17:33) [47]


> Глеб   (06.05.12 17:05) [46]

Это решается не так уж и сложно. У тебя есть позиция каретки в едите, есть код символа, есть имеющийся текст в едите. Остальное дело техники.
Исходя из этих данных попробуй на листочке нарисовать последовательность действий.


 
Глеб   (2012-05-06 17:42) [48]

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


 
brother ©   (2012-05-06 17:58) [49]

> у меня уже голова болит от этого эдита

это только начало...

> напиши мне кодом

...

> Я уже несколько дней чернила извожу на алгоритмы

красивое словцо?


 
Глеб   (2012-05-06 18:09) [50]

brother мне не понятно твоё сообщение


 
turbouser ©   (2012-05-06 18:09) [51]


> Глеб   (06.05.12 17:42) [48]

вот смотри:
есть текст в едите. есть позиция, куда юзер вставляет символ. есть правила, которым текст должен соответствовать - "цифра_пробел_запятая" так?
вот как пример. незнаю, неоптимально скорее всего, но
const EditText = "%s ,";
var Apos,i:integer;
LeftStr, RightStr:string;
begin
if (key in (символы тут) begin
Apos:= Edit.SelStart;
if APos>0 {не помню, с 0 там начинается или с 1 ? допустим что с 0}
begin
 LeftStr := Copy(Edit.Text, Apos-3,3);
 if Length(LeftStr)>2
begin
If LeftStr[1] in (символы тут) {или CharInSet - зависит от версии. в прочем, идея должна быть понятна}
Edit.Text := Edit.Text+Format(EditText ,[key]) else
if LeftStr[1] = " "
Edit.Text := Edit.Text+","+Format(EditText ,[key]) else
Edit.Text := Edit.Text+" ,"+Key;
end
end
else
edit.text := Format(EditText ,[key]);
end;

не проверял. пейсал от руки :) наверняка есть ошибки.


 
Глеб   (2012-05-06 18:19) [52]

turbouser спасибо за помощь, меня сроки поджимают, программа использует asm вставки - ими занимаюсь, уже на этот эдит забил - сейчас поковыряюсь в твоем коде


 
Глеб   (2012-05-06 18:21) [53]

turbouser ты каком событии писал keypress?


 
Глеб   (2012-05-06 18:46) [54]

turbouser я отредактировал твой код и избавил его от ошибок, но рез. не тот, что мне нужен. Посмотри, может я напортачил в нем, но думаю все важное сохранил. Результат получается след:

Если набрать "123" то программа отвечает "3211 ,2 ,3 ," она показывает твои нажатия + то что должно быть. Если попытаться вставить доп символ в строку то получается вообще каша(описать сложно).

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

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
 const
  EditText = "%s ,";
  mask : set of char =["0".."9" , "a".."z" , "A".."Z"];
 var
  Apos, i: integer;
  LeftStr, RightStr: string;
 begin
  if (key in mask) then begin
                         Apos:= Edit1.SelStart;
                         if APos>0 then
                         begin
                          LeftStr := Copy(Edit1.Text, Apos-3,3);
                          if Length(LeftStr)>2 then
                          begin
                           If LeftStr[1] in (mask) then
                           Edit1.Text := Edit1.Text+Format(EditText ,[key]) else
                           if LeftStr[1] = " "  then
                           Edit1.Text := Edit1.Text+","+Format(EditText ,[key]) else
                           Edit1.Text := Edit1.Text+" ,"+Key;
                          end
                         end
                         else
                         edit1.text := Format(EditText ,[key]);
                        end;
 end;


 
turbouser ©   (2012-05-06 18:57) [55]

Key:=#0; {надо добавить.}
end;
end;
я думал, ты попытаешься разобраться.


 
KilkennyCat ©   (2012-05-06 19:01) [56]

он же написал, что некогда разбираться, asm отвлекает.


 
Inovet ©   (2012-05-06 19:14) [57]

> [46] Глеб   (06.05.12 17:05)
> Inovet значит мы друг друга не поняли.

Возможно, но только формально.:)


 
Inovet ©   (2012-05-06 19:22) [58]

> [56] KilkennyCat ©   (06.05.12 19:01)
> asm отвлекает

Есть подозрение на суть притчи о XYZ (у кого есть ссылка - киньте). Подозрение уже было озвучено

> [37] MBo ©   (05.05.12 23:01)
> Простой способ не подойдет?
> В едит вводишь только нужные символы, а обработанный текст отображается отдельно


 
Глеб   (2012-05-06 20:07) [59]

turbouser вот теперь я тебя не понял, куда надо добавить "Key:=#0;". Когда пишешь программы на ассемблере, а потом на дельфях невозможно соображать корректно, поэтому я и не стал досконально разбираться в твоем коде, а только посмотрел поверхностно - без обид, просто действительно ситуация у меня трудная, но очень нужна помощь с этим эдитом.

Я переделал код, на своё усмотрение. Так надо было? Если да, то плохо - он не добавляет новые символы, а только изменяет те, что на первых позициях.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
 EditText = "%s ,";
 mask : set of char =["0".."9" , "a".."z" , "A".."Z"];
var
 Apos, i: integer;
 LeftStr, RightStr: string;
begin
 if (key in mask) then begin
                        Apos:= Edit1.SelStart;
                        if APos>0 then
                        begin
                         LeftStr := Copy(Edit1.Text, Apos-3,3);
                         if Length(LeftStr)>2 then
                         begin
                          If LeftStr[1] in (mask) then
                          Edit1.Text := Edit1.Text+Format(EditText ,[key]) else
                          if LeftStr[1] = " "  then
                          Edit1.Text := Edit1.Text+","+Format(EditText ,[key]) else
                          Edit1.Text := Edit1.Text+" ,"+Key;
                         end
                        end
                        else
                        edit1.text := Format(EditText ,[key]);
                        Key:=#0;
                       end;
end;


 
Amoeba_   (2012-05-06 22:25) [60]


> Есть подозрение на суть притчи о XYZ (у кого есть ссылка
> - киньте)
>

Здесь: http://www.gunsmoker.ru/2008/10/x-y-z.html


 
Глеб   (2012-05-06 22:37) [61]

Amoeba_  только зря потратил время на это произведение. Лучше подсказал, как улучшить код до нужного результата. Удаление уже сделано мною отлично, а вот с вводом беда


 
turbouser ©   (2012-05-07 00:02) [62]


> Глеб   (06.05.12 20:07) [59]

Глеб, я намекнул в какую сторону копать. У меня нет дома дельфей, так что проверить и ты пы - не могу. В голове тоже не все так гладко :)
Если тебе очень надо - стоит подогнать то что тебе предлагали. Напильником обработать и все. Врятли кто-то готовое решение в выходные тебе подгонит. Хотя весьма вероятно. Вести себя надо только адекватно ;)


 
Глеб   (2012-05-07 00:22) [63]

turbouser ладно, я пока другими вещами занимаюсь . Адекватно - то намекнул на мой бзик с вводом?


 
Германн ©   (2012-05-07 01:32) [64]


> но мне нужно это условия заказа

"Условия заказа" в студию. А то пока действительно очень похоже на XYZ.


 
MsGuns ©   (2012-05-07 10:39) [65]

Нифига у Глеба не получится потому что никто из "мастеров" не умеет свечку держать :)


 
Глеб   (2012-05-07 13:05) [66]

MsGuns все шутим?) эх до 9 мая мне надо этот эдит сделать


 
Amoeba_   (2012-05-07 13:39) [67]

Может автору вопроса все же стоит последовать этим разумным советам

> Медвежонок Пятачок ©   (05.05.12 18:29) [7]
>
> лучше сосредоточится на обработке введенного, а не на введении
> символов за юзера. полезнее будет в сто раз.
>
> MBo ©   (05.05.12 23:01) [37]
>
> Простой способ не подойдет?
> В едит вводишь только нужные символы, а обработанный текст
> отображается отдельно

и прекратить грызть кактус?


 
Глеб   (2012-05-07 14:59) [68]

Amoeba_ эх если всегда отступать от намеченных целей, то не чего хорошего не будет. Я  сделаю так как мне нужно с помощью этого форума или другого.


 
Inovet ©   (2012-05-07 15:13) [69]

> [68] Глеб   (07.05.12 14:59)

Цели бывают пустые - обман, иллюзия в собственном сознании, а сил и времени для их достижени можно много потратить, спрашивая на этом и других форумах о Y, когда надо X, которое легко и естественно решается через Z, а не через Ж.


 
Глеб   (2012-05-07 15:18) [70]

Inovet ты знаешь команду, которая переводит символы из малого реестра в большой?


 
Inovet ©   (2012-05-07 15:26) [71]

> [70] Глеб   (07.05.12 15:18)

Команды разные бывают, которые переводят и разводят, но чаще из большого в малое. В Делфи такой команды не знаю, но знаю несколько функций для работы со строками и символами, которые могут помочь в этом вопросе.


 
Глеб   (2012-05-07 15:27) [72]

Inovet мне надо символы вводимые в эдит переводить в заглавный реестр


 
Глеб   (2012-05-07 15:43) [73]

функция AnsiUpperCase(const S: String): String
Возвращает строку S, преобразованную к верхнему регистру. - сам нашел


 
Inovet ©   (2012-05-07 15:47) [74]

> [73] Глеб   (07.05.12 15:43)
> сам нашел

Прогресс, однако! "Кто ищет, тот всегда найдёт."


 
MsGuns ©   (2012-05-07 16:15) [75]

>MsGuns все шутим?)

А что еще делать если человек копает держа лопату черенком вниз, а когда все ему советуют взять ее как надо, говорит: "Я  сделаю так как мне нужно с помощью этого форума или другого".


 
Глеб   (2012-05-08 13:41) [76]

Вот господа, решение проблем с добавлением и удалением записи. По секрету, эту притчу придумал человек, которые иногда сам не знает ответов на вопросы, но признаться в этом ударит по его Супер-Эго поэтому на помощь приходи творческая фантазия. Надо не сказки писать и код

 function Position: Integer;
 begin
  Result:=(Form3.Edit1.SelStart div 3);
 end;

procedure Adding(Key: Char);
 var
  i, n: Integer;
 begin
  n:=Position;
  List.Insert(n, Key+" ,");
  Form3.Edit1.Text:="";
  with Form3.Edit1 do for i:=0 to List.Count-1 do Text:=Text+List[i];
  Form3.Edit1.SelStart:=(n+1)*3;
 end;

procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);
 const
  Legal=["0".."9", "A".."Z", "a".."z"];
 begin
  if Key in Legal then Adding(Key);
  Key:=#0;
 end;

procedure Removing;
 var
  i, n: Integer;
begin
 n:=Position;
 List.Delete(n-1);
 Form3.Edit1.Text:="";
 with Form3.Edit1 do for i:=0 to List.Count-1 do Text:=Text+List[i];
 Form3.Edit1.SelStart:=(n-1)*3;
end;

procedure TForm3.Edit1KeyUp(Sender: TObject; var Key: Word ;
Shift: TShiftState);
 const
  BackSpace=8;
  Del=46;
 begin
  if Key=37 then Edit1.SelStart:=Edit1.SelStart-2;
  if Key=39 then Edit1.SelStart:=Edit1.SelStart+2;
  if ((Key=BackSpace)or(Key=Del)) then Removing;
 end;

если найдете изъян в коде прошу сделать коменты


 
Inovet ©   (2012-05-08 13:49) [77]

> [76] Глеб   (08.05.12 13:41)
> Надо не сказки писать и код

Со временем, надеюсь, ты поймёшь о чём там речь.


 
MsGuns ©   (2012-05-08 14:34) [78]

Приведенный код - яркий пример как надо чесать за левым ухом правой пяткой.
Просто совет - пока не научитесь элементарному, не стОит выкладывать его где-либо в Сети и уж тем более пытаться хвастаться им.
Просто это очень напоминает малыша-годовалка, наделавшего в люлю и торжественно показывающего свое "произведение" всем окружающим. Мамашка (особенно впервые которая), конечно, в восторге, а вот гостей слегка подташнивает :)


 
KilkennyCat ©   (2012-05-08 14:40) [79]

как минимум, некрасивый код.
> procedure Removing;
>  var
>   i, n: Integer;
> begin
>  n:=Position;
>  List.Delete(n-1);
>  Form3.Edit1.Text:="";
>  with Form3.Edit1 do for i:=0 to List.Count-1 do Text:=Text+List[i];
>
>  Form3.Edit1.SelStart:=(n-1)*3;
> end;


procedure Removing;
var
  i, n: Integer;
begin
 n:=Position;
 List.Delete(n-1);
 with Form3.Edit1 do begin
    Text:="";
    for i:=0 to List.Count-1 do Text:=Text+List[i];
    SelStart:=(n-1)*3;
 end;
end;

кроме того, он просто не полностью рабочий, еще один вариант, требующий доработки.
Так что, бегом на другой форум, напиши это.

а про притчу я не понял.


 
KilkennyCat ©   (2012-05-08 14:42) [80]


> MsGuns ©   (08.05.12 14:34) [78]

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


 
Глеб   (2012-05-08 16:25) [81]

MsGuns я не говорил, что это мой код и я не хвастаюсь, здесь я его выложил для того, чтобы если такая проблема повториться у другого человека он мог его у меня посмотреть и доделать под себя. Очень жаль, что у тебя в голове такие пошлые мысли - это только тебя характеризует
KilkennyCat я тебя не чем не обязан след. нет не одного мотива на обман, причину выкладки кода читай выше


 
KilkennyCat ©   (2012-05-08 16:39) [82]


> причину выкладки кода читай выше

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

Глеб, у тебя с русским языком проблемы: после обращения к кому-либо ставится запятая, "я тебе ничем не обязан, след. нет ни одного мотива для  обмана"


 
KilkennyCat ©   (2012-05-08 16:41) [83]

И логика классная: если мне кто-то чем-то обязан, значит, он может обманывать... Добро пожаловать в этот удивительный мир, полный любви и милосердия!


 
Inovet ©   (2012-05-08 17:40) [84]

> [82] KilkennyCat ©   (08.05.12 16:39)
> Глеб, у тебя с русским языком проблемы

Автору повторить "не" и "ни":
http://www.orfo.ru/Tutorial/Html/Test_NeNi1.htm


 
MsGuns ©   (2012-05-09 16:58) [85]

>Глеб   (08.05.12 16:25) [81]
>MsGuns я не говорил, что это мой код и я не хвастаюсь, здесь я его выложил для того, чтобы если такая проблема повториться у другого человека он мог его у меня посмотреть и доделать под себя.

Даже если какашка не твоя, давать ее гордо другим понюхать - действо не менее пошлое :)

>Очень жаль, что у тебя в голове такие пошлые мысли - это только тебя характеризует

Какие мысли у меня в голове - это мне одному известно, и то не всегда :)
В посте нет ни одного слова против кого-то конкретного, а просто констатация очевидного факта в тему.
Если эта самая констатация вызывает у них такую реакцию, то это их уже определенно характеризует :)

ЗЫ. На обиженных воду возят (древняя руспословица)



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

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.7 MB
Время: 0.097 c
2-1346143882
FIL-23
2012-08-28 12:51
2013.03.22
ehlib


2-1340359780
простофан
2012-06-22 14:09
2013.03.22
передача данных из дельфи в др. программы


15-1330423503
Loginov Dmitry
2012-02-28 14:05
2013.03.22
Парадоксы с фокусом (D2007)


15-1331411403
Юрий
2012-03-11 00:30
2013.03.22
С днем рождения ! 11 марта 2012 воскресенье


2-1345111451
Дмитрий Белькевич
2012-08-16 14:04
2013.03.22
Найти вернее окно (форму) среди нескольких одинаковых





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский