![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Редактирование надписей в компоненте едит [D7]
Глеб © (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
Поэтому если кто знает решение, прошу помочь