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;


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

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


KilkennyCat   (2012-05-05 21:53:00) [62]

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

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


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

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


KilkennyCat   (2012-05-05 21:48:00) [64]

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


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

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


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

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


KilkennyCat   (2012-05-05 21:39:00) [67]

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


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

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 20:57:00) [69]

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


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

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


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

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

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

a ,b ,23c ,

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

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

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


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


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

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


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

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


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

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


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

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

вот так с ,

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

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


Cobalt   (2012-05-05 19:01:00) [76]

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

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

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

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


KilkennyCat   (2012-05-05 18:46:00) [77]


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

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


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

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

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


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

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


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

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


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

Наверх

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