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

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

Редактирование надписей в компоненте едит [D7]


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

Глеб ©   (2012-05-05 16:58:00) 

Добрый день!

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

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;


MsGuns   (2012-05-07 10:39:00) [21]

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


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


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

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


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

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


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


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

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


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

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


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


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

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


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

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;


Inovet   (2012-05-06 19:22:00) [28]

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

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

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


Inovet   (2012-05-06 19:14:00) [29]

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

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


KilkennyCat   (2012-05-06 19:01:00) [30]

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


turbouser   (2012-05-06 18:57:00) [31]

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


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

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;


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

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


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

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


turbouser   (2012-05-06 18:09:00) [35]


> Глеб   (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:09:00) [36]

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


brother   (2012-05-06 17:58:00) [37]

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

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

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

...

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

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


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

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


turbouser   (2012-05-06 17:33:00) [39]


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

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


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

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

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

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


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

Наверх

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