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

Вниз

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

 
Глеб   (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]

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



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

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

Наверх




Память: 0.65 MB
Время: 0.08 c
11-1243667969
Dy1
2009-05-30 11:19
2013.03.22
потоки


6-1265664456
olevacho
2010-02-09 00:27
2013.03.22
выполнение route из под ограниченого пользователя


15-1338131036
ProgRAMmer Dimonych
2012-05-27 19:03
2013.03.22
HP Photosmart B110b и чёрный картридж


2-1337444696
SKIPtr
2012-05-19 20:24
2013.03.22
проверка на наличие дочерних окон


2-1337605535
TStas
2012-05-21 17:05
2013.03.22
Плохо ловится WM_DRAWCLIPBOARD ричедитом