Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.073 c
2-1337757624
well
2012-05-23 11:20
2013.03.22
Как вывести сообщение об ожидании выполнения операции?


15-1333744203
Юрий
2012-04-07 00:30
2013.03.22
С днем рождения ! 7 апреля 2012 суббота


2-1339054794
Pcrepair
2012-06-07 11:39
2013.03.22
Видимость переменных в разных модулях


2-1335937740
Александр_12
2012-05-02 09:49
2013.03.22
Возможно ли управлять PowerPoint


2-1337504907
Глеб
2012-05-20 13:08
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский