![]() |
| ||
|
|
Новости |
Поиск |
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;
Глеб (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 + ' ,'; Поэтому если у тебя есть дополнительные идеи прошу их озвучить.