Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

запретить два пробела подряд


chubb ©   (2009-03-17 17:06:00) 

Приветствую!

Как при вводе в Edit запретить вводить два пробела подряд?


Медвежонок Пятачок   (2009-03-19 11:12:00) [1]

И ни одного пробела? Конечно проще.


Cobalt   (2009-03-19 11:10:00) [2]

По моему, проще на этапе нажатия кнопок сделать

Use the OnKeyPress event handler to make something happen as a result of a single character key press.  

The Key parameter in the OnKeyPress event handler is of type Char; therefore, the OnKeyPress event registers the ASCII character of the key pressed. Keys that don't correspond to an ASCII Char value (Shift or F1, for example) don't generate an OnKeyPress event. Key combinations (such as Shift+A), generate only one OnKeyPress event (for this example, Shift+A results in a Key value of "A" if Caps Lock is off). To respond to non-ASCII keys or key combinations, use the OnKeyDown or OnKeyUp event handlers.

An application gets Windows WM_KEYDOWN messages for all keys when the user presses a key. These messages indirectly fire the OnKeyDown event. If you set the Key to 0 there you prevent only any further processing of this message. But for keys that generate characters Windows also produces WM_CHAR. At the time your OnKeyDown event fires, the WM_CHAR message for the key will already be in the message queue. Setting Key to 0 does not stop it from being delivered, so it fires the OnKeyPress event. You must set the Key to #0 to prevent the control from intercepting the WM_CHAR message.  

This method of organizing key processing has advantages. Code that only deals with characters, including control characters like #13 for carriage return, #3 for Ctrl-C and so on, should go into the OnKeyPress event. Code that deals with keys that do not generate characters should be put into the OnKeyDown event.

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if Key = ' ' then
   Key := #0
end;


MsGuns   (2009-03-18 09:26:00) [3]

>Amoeba ©   (18.03.09 00:21) [15]
>Готовые ф-ии есть в RxLib и QStrings.

А еще в Тегусегальпе можно отведать русских пельменей


Amoeba   (2009-03-18 00:21:00) [4]


> можно, конечно, обрабатывать и после

Не только можно, но и нужно.
Готовые ф-ии есть в RxLib и QStrings.


Anatoly Podgoretsky   (2009-03-17 19:16:00) [5]

> chubb  (17.03.2009 19:02:12)  [12]

Ну так и удаляй при сохранение.


chubb   (2009-03-17 19:05:00) [6]

грубо говоря - это легкая защита от невнимательности, забывчивости...


chubb   (2009-03-17 19:02:00) [7]


> через свойства и методы.


> TCustomEdit(edit1).SelStart:=length(edit1.Text);


спасибо, уже разобрался.


> Еще бы озвучить, как используется введенное.


лишний пробел - это (в моей задаче) символ, иногда не сразу заметный, дающий фразе дополнительную (иногда невидимую) уникальность..

можно, конечно, обрабатывать и после, но хочется сделать кое-какую наглядность, более того крайние (если такие будут) будут таки удаляться после...

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


немо2   (2009-03-17 18:34:00) [8]

TCustomEdit(edit1).SelStart:=length(edit1.Text);


Jeer   (2009-03-17 18:18:00) [9]

Ничего не "запрещать" в TEdit
Пробелы заменять на один по факту использования введенного.
P.S.
Еще бы озвучить, как используется введенное.


Медвежонок Пятачок   (2009-03-17 18:07:00) [10]

через свойства и методы.


chubb   (2009-03-17 18:06:00) [11]

подскажи как  :), и спасибо заранее!


Медвежонок Пятачок   (2009-03-17 18:04:00) [12]

а ты как программист волен управлять ее положением


chubb   (2009-03-17 18:03:00) [13]

все равно каретка в начало перемещается при присвоении измененной строки..


Медвежонок Пятачок   (2009-03-17 18:00:00) [14]

какая разница сколько пробелов подряд ввели в какой-то там едит.
кого это может по настоящему напрячь?
никого.


Ega23   (2009-03-17 17:42:00) [15]


> и далее trim? и результат присвоить edit.text?
> но тогда каретка переместится в начало...


procedure OnChange()
var
 ev : TNotifyEvent
begin
 ev := Edit1.OnChange;
 Edit1.OnChange := nil;
 try
   Проверяем, что там в Edit1.Text, если надо - меняем.
 finally
   Edit1.OnChange := ev;
 end;
end;


немо2   (2009-03-17 17:28:00) [16]

запрететь реакцию OnChange
replacнуть 2 пробела на 1
отпрететь реакцию OnChange


chubb   (2009-03-17 17:14:00) [17]


> Ega23 ©   (17.03.09 17:10) [1]
>
> TEdit.OnChange


и далее trim? и результат присвоить edit.text?
но тогда каретка переместится в начало...


Ega23   (2009-03-17 17:10:00) [18]

TEdit.OnChange

З.Ы. Строку могут и из буфера вставить, не забывай.


Наверх

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