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;


Inovet   (2012-05-06 08:24:00) [41]

> [29] Глеб   (05.05.12 22:09)
> попытался ввести 1234567890, а вышло 0 , 9 , 8 , 7 ,

Ты это и просил, после уточнения ещё и подтвердил.


Глеб   (2012-05-05 23:51:00) [42]

Медвежонок Пятачок Все отлично, рекомендую протестировать самому


Медвежонок Пятачок   (2012-05-05 23:48:00) [43]

выдели кусок текста в своем эдите.
затем не снимая выделения нажми букву  "x"


Глеб   (2012-05-05 23:42:00) [44]

Медвежонок Пятачок не совсем понял что ты хотел сказать в этом сообщении и в сообщении на которые ссылаешь,но удаление работает у меня корректно, происходит только по дел и бэкспей. Если ты смог удалить символ в моей программе как то иначе прошу сказать. Код программы есть (39сообщение) - прошу протестирую


Медвежонок Пятачок   (2012-05-05 23:36:00) [45]

if Key=8 or 46 then begin    

а теперь снова:
будут случаи, когда кей не равен ни тому ни другому, но символы из едита будут удаляться. Как в моем примере выше.


Глеб   (2012-05-05 23:12:00) [46]

KilkennyCat спасибо за совет буду думать, если сам не додумаю, можно к тебе обратиться


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

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.  

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


KilkennyCat   (2012-05-05 23:04:00) [48]

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

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


MBo   (2012-05-05 23:01:00) [49]

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


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

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

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


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

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


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

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.

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

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


KilkennyCat   (2012-05-05 22:29:00) [53]

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

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:17:00) [54]

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


KilkennyCat   (2012-05-05 22:16:00) [55]

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


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

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

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


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

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


KilkennyCat   (2012-05-05 22:04:00) [58]

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


KilkennyCat   (2012-05-05 22:03:00) [59]

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

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


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

[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 из другой процедуры и они локальные


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

Наверх

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