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

Вниз

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

 
Глеб   (2012-05-05 16:58) [0]

Добрый день!

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

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;


 
Cobalt ©   (2012-05-05 17:02) [1]

Ты, мил человек, сначала опиши, что ты хочешь получить,
а то код активно скрывает смысл :-)


 
Глеб   (2012-05-05 17:23) [2]

Все предельно просто. Мой программный код делает редактирование в конце строки едита, а мне нужно везде. т.е. если ты написал 1245 в моем едите и вспомнил, что пропустил 3 ты не сможешь вставить 3 туда куда нужно так как едет запихнет в конец 12453.

Вот мне и нужна помощь, что бы высчитывать позицию под курсором и проводить редактирование там где и положенно


 
Медвежонок Пятачок ©   (2012-05-05 17:34) [3]

это, я так понимаю, программа для пользователей с ампутированными пальцами рук?


 
Юрий Зотов ©   (2012-05-05 17:37) [4]


> Глеб   (05.05.12 17:23) [2]

См. свойства SelStart, SelLength, SelText.

Но возникает вопрос - а зачем нужен такой компонент? Не лучше ли использовать стандартный? Он такими закидонами не страдает.


 
KilkennyCat ©   (2012-05-05 18:01) [5]


> 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;


достаточно
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;
end;
и тогда не будет только в конец строки


 
глеб   (2012-05-05 18:25) [6]

KilkennyCat так то понятно, что ты избавишь меня от проблемы частичного редактирования, но мне важна строка >  Edit1.Text:=Edit1.Text + " ,"; Поэтому если у тебя есть дополнительные идеи прошу их озвучить.


 
Медвежонок Пятачок ©   (2012-05-05 18:29) [7]

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


 
Медвежонок Пятачок ©   (2012-05-05 18:31) [8]

if not (Key in mask) then Key:=#0;

бакспейс, дел, стрелки .....


 
KilkennyCat ©   (2012-05-05 18:46) [9]


> важна строка >  Edit1.Text:=Edit1.Text + " ,";

в процессе ввода строки, или потом, при обработке строки?


 
Cobalt ©   (2012-05-05 19:01) [10]

Глеб, абсолютносовершенно непонятно, как именно ты хочешь обрабатывать строку в конмпоненте.

Т.е. Ты говоришь "Я делать хочу"
ответ - дык, делай, никто не мешает.
Ты: я не только тут делать хочу, но и там делать хочу.

А что именно ты хочешь - дом строить, руду плавить, тачать сапоги или печь хлеб - ты упорно скрываешь.

Исходно какая задача?


 
глеб   (2012-05-05 19:32) [11]

KilkennyCat и при вводе символов и при удалении.
Cobalt мне надо сделать так чтобы в эдит вводились только анг. буквы и цифры. При вводе буквы программу должна сама поставить пробел и запятую.

вот так с ,

При удалении  нужно чтобы удалилась буква пробел и запятая.

Я смог этого достичь, но нужно проводить редактирование в позиции под курсором, а у меня только последние элементы редактируются


 
Медвежонок Пятачок ©   (2012-05-05 19:35) [12]

тебе же уже сказали. позиция курсора - это селстарт


 
глеб   (2012-05-05 19:42) [13]

Медвежонок Пятачок так я не знаю, как его использовать чтобы он мне помог в решении проблемы


 
Юрий Зотов ©   (2012-05-05 20:08) [14]


> глеб   (05.05.12 19:42) [13]

А справки у Вас разве нет? Там по поводу SelStart все сказано.


 
Медвежонок Пятачок ©   (2012-05-05 20:15) [15]

кстати, позиция курсора ему в общем случае не поможет.

например введено:

a ,b ,23c ,

выделяем часть строки и  нажимаем букву d

получаем:
d ,23c ,

что здесь надо удалить?


 
Медвежонок Пятачок ©   (2012-05-05 20:21) [16]

второй хитрый вопрос:
как вообще в предыдущем сценарии понять, что я что-то удалил?
я не нажимал ни дел, ни бэкспейс. Если бы выделение было не столь удачным, то постобработка потребовалась бы.
а ни дела ни бекспейса не было


 
KilkennyCat ©   (2012-05-05 20:57) [17]

ну, пока четкой формулировки задачи не видно - решения нет.


 
Глеб   (2012-05-05 21:20) [18]

KilkennyCat я вам рассказал, что мне надо если что то не понятно давайте подробно объясню

Медвежонок Пятачок сожалею, но я не понял, что ты написал.

Давайте я вам повторю. Мне надо чтобы при вводе с клавиатуры анг. символа скажем "g" программа вела в эдит "g ," при удалении пользователь наживает один раз на бэкспейс ("key = 8" - код операции удаления), а программа удалит символ + пробел + запятую.

Я смог добиться этого, НО все эти действия происходят на конце записи эдита т.е. нельзя сфокусироваться на середине и удалить/добавить символ в центре. Весть процесс редактирования происходит на конце.

Поэтому я прошу мне помочь с редактором записи, что бы можно было
проводить  операции под курсором мыши, а не в самой правой части.
вод код удаления:
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;


 
KilkennyCat ©   (2012-05-05 21:39) [19]

то есть у тебя любой алфавитно-цифровой символ должен заменяться комбинацией этот символ-пробел-запятая? и вся обработка таким макаром?
отследить все перемещения курсора, разрешая попадать лишь в места x * 3. удаление, выделение так же тройное.


 
Глеб   (2012-05-05 21:42) [20]

если я тебе правильно понял, Константин, то ДА


 
Глеб   (2012-05-05 21:45) [21]

KilkennyCat ты лучше в дельфи скопирую мой код, поставь эдит и два события
KeyPress и KeyDown все сразу станет понятнее.


 
KilkennyCat ©   (2012-05-05 21:48) [22]

ну дык напиши проверку selstart и sellength чтобы всегда выполнялось условие позиционирования. от стрелок и от мыши. и на удаление чтоб три символа сразу. и проверку буфера, если вставка разрешена.


 
Глеб   (2012-05-05 21:52) [23]

KilkennyCat ох ёё я на дельфи 5 день работаю еще не очень грамотный в этом плане если мог бы сделать сам на форум не писал бы. Мне желательно получить переделанный код


 
KilkennyCat ©   (2012-05-05 21:53) [24]

в примитивном варианте ввод клавиши:

edit1.text := Insert(key + " ,", edit1.text, edit1.selstart);


 
Глеб   (2012-05-05 21:55) [25]

KilkennyCat это на ввод клавиши, сейчас посмотрю в проекте, как оно работает


 
Глеб   (2012-05-05 22:01) [26]

[Hint] Unit3NactroikaCkanera.pas(276): Variable "s" is declared but never used in "TForm3.Edit1KeyDown"
[Hint] Unit3NactroikaCkanera.pas(275): Variable "n" is declared but never used in "TForm3.Edit1KeyDown"

теперь выводит такую ошибку, но понять не могу, как эта надпись edit1.text := Insert(key + " ,", edit1.text, edit1.selstart); притащила эти ошибки. Переменные n и s из другой процедуры и они локальные


 
KilkennyCat ©   (2012-05-05 22:03) [27]

а... ошибся я, подводит память.
примерно так надо:
var
 s : string;
begin
 s := edit1.text;
 insert(key + " ,", s, edit1.text);
 edit1.text := s;
 key := #0;
end;

и скорее всего понадобится возвращать selstart в новую позицию.


 
KilkennyCat ©   (2012-05-05 22:04) [28]

тьфу, опять ошибся.
insert(key + " ,", s, edit1.selstart);


 
Глеб   (2012-05-05 22:09) [29]

попытался ввести 1234567890, а вышло 0 , 9 , 8 , 7 , и т.д. все наоборот, но есть редактирование, а можно сделать так чтобы было как у меня только + редактирование)


 
Глеб   (2012-05-05 22:16) [30]

KilkennyCat insert(key + " ,", s, edit1.selstart -  Length(Edit1.Text)+ 1); так работает более корректно, но опять если с позиционироваться на центе записи 1 , 3, 4, и поставить 2 то получиться 1 , 3 , 4 , 2 , то уходит в право(

Как же еня это уже достало


 
KilkennyCat ©   (2012-05-05 22:16) [31]

можно, надо только разобраться, когда вообще изменяется selstart... и возможно, на onKeyUp придется вешать обработку. экспериментируй, и вообще, insert - это лишь вариант, возможны и другие решения. я бы, скорее всего, послал бы вдогонку эмуляцию нажатия клавиш пробела и запятую.


 
Глеб   (2012-05-05 22:17) [32]

KilkennyCat да и я хочу послать, но мне нужно это условия заказа


 
KilkennyCat ©   (2012-05-05 22:29) [33]

частичное решение:

procedure TForm1.edit1KeyPress(Sender: TObject; var Key: Char);
begin
 edit1.Tag := edit1.SelStart;
end;

procedure TForm1.edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
 s : string;
begin
 s := edit1.Text;
 Insert(" ,", s, edit1.Tag + 2);
 edit1.Text := s;
 edit1.selstart := edit1.Tag + 3;
 edit1.SelLength := 0;
end;



 
Глеб   (2012-05-05 22:39) [34]

procedure TForm3.Edit1KeyDown(Sender: TObject; var Key: Word;                  
Shift: TShiftState);
 var n : integer;                                                              
     s : string;                                                                
 begin
  if Key=8 or 46 then begin                                                    
                              S:=Edit1.Text;                                          
                              n:=Edit1.SelStart;                                      
                              Edit1.Text:=copy(S, 1, n-3)+copy(S, n+1, Length(S)-n);  
                              Edit1.SetFocus;                                        
                              Edit1.SelStart:=n-1;
                           end;
end;
end.

процедура удаления символа + пробел + запятая из любой позиции под курсором мыши

Фух с этим справился


 
Глеб   (2012-05-05 22:40) [35]

KilkennyCat сейчас посмотрю твой код на добавление


 
Глеб   (2012-05-05 22:52) [36]

KilkennyCat хм твой код действительно помогает, но есть нюанс. если скажем набрать 1245, то программа ответит 1 ,2 ,4 ,5 , вроде хорошо и даже можно вставить 3 между 2 и 4 программа ответит 1 ,2 ,3 ,4 ,5 , редактирование есть в любой позиции, НО если поставить курсор мыши в компоненте эдит сразу после цифры 2 то получиться  1 , 22, ,3 ,4 ,5 , надо сделать проверку на область добавления

Сам не знаю как


 
MBo ©   (2012-05-05 23:01) [37]

Простой способ не подойдет?
В едит вводишь только нужные символы, а обработанный текст отображается отдельно


 
KilkennyCat ©   (2012-05-05 23:04) [38]

я же говорил, необходим контроль selstart. как только он захочет поменяться, проверяй и разрешай изменение если только в правильное место хочет.

и еще есть проблема мультиповтора при долгом нажатии.


 
Глеб   (2012-05-05 23:06) [39]

MBo нет, мне надо именно так как я описывал выше. Хорошо, что сделал удаление работает классно, сам доволен. Посмотри, как работает может, где ошибся и не вижу.

procedure TForm3.Edit1KeyDown(Sender: TObject; var Key: Word;                  
Shift: TShiftState);
var n : integer;                                                              
    s : string;                                                                
begin
 if (Key=8) or (Key=46) then begin                                                    
                                        S:=Edit1.Text;                                          
                                        n:=Edit1.SelStart;                                      
                                        Edit1.Text:=copy(S, 1, n-3)+copy(S, n+1, Length(S)-n);  
                                        Edit1.SetFocus;                                        
                                        Edit1.SelStart:=n-1;
                                      end;
end;
end.  

А вот с добавлением пока косяки идут


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

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


 
Глеб   (2012-05-08 16:25) [81]

MsGuns я не говорил, что это мой код и я не хвастаюсь, здесь я его выложил для того, чтобы если такая проблема повториться у другого человека он мог его у меня посмотреть и доделать под себя. Очень жаль, что у тебя в голове такие пошлые мысли - это только тебя характеризует
KilkennyCat я тебя не чем не обязан след. нет не одного мотива на обман, причину выкладки кода читай выше


 
KilkennyCat ©   (2012-05-08 16:39) [82]


> причину выкладки кода читай выше

у меня нет такой травы, чтоб понять твое описание причины.

Глеб, у тебя с русским языком проблемы: после обращения к кому-либо ставится запятая, "я тебе ничем не обязан, след. нет ни одного мотива для  обмана"


 
KilkennyCat ©   (2012-05-08 16:41) [83]

И логика классная: если мне кто-то чем-то обязан, значит, он может обманывать... Добро пожаловать в этот удивительный мир, полный любви и милосердия!


 
Inovet ©   (2012-05-08 17:40) [84]

> [82] KilkennyCat ©   (08.05.12 16:39)
> Глеб, у тебя с русским языком проблемы

Автору повторить "не" и "ни":
http://www.orfo.ru/Tutorial/Html/Test_NeNi1.htm


 
MsGuns ©   (2012-05-09 16:58) [85]

>Глеб   (08.05.12 16:25) [81]
>MsGuns я не говорил, что это мой код и я не хвастаюсь, здесь я его выложил для того, чтобы если такая проблема повториться у другого человека он мог его у меня посмотреть и доделать под себя.

Даже если какашка не твоя, давать ее гордо другим понюхать - действо не менее пошлое :)

>Очень жаль, что у тебя в голове такие пошлые мысли - это только тебя характеризует

Какие мысли у меня в голове - это мне одному известно, и то не всегда :)
В посте нет ни одного слова против кого-то конкретного, а просто констатация очевидного факта в тему.
Если эта самая констатация вызывает у них такую реакцию, то это их уже определенно характеризует :)

ЗЫ. На обиженных воду возят (древняя руспословица)



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

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

Наверх




Память: 0.72 MB
Время: 0.158 c
15-1348950602
Юрий
2012-09-30 00:30
2013.03.22
С днем рождения ! 30 сентября 2012 воскресенье


15-1327399943
Vulko
2012-01-24 14:12
2013.03.22
ищу complementary filter на java/c/c++/c#/delphi


2-1340259923
vasa777
2012-06-21 10:25
2013.03.22
компилятор


2-1338620541
novichek
2012-06-02 11:02
2013.03.22
FireMonkey - Binding


15-1339180052
asail
2012-06-08 22:27
2013.03.22
Могло ли это быть "оно" или просто померещилось?