Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизРедактирование надписей в компоненте едит Найти похожие ветки
← →
Глеб (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;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.083 c