Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Edit программный и клавиатурный в вод текста


Автор: ivan219 17.3.2007, 15:49
В Edit текст можно в водить при помощи клавиатуры, через буфер обмена, и программно Edit.Text:='d';

Вопрос: как определить каким из способов в водится текст в Edit???

Автор: skyboy 17.3.2007, 16:00
Цитата(ivan219 @  17.3.2007,  14:49 Найти цитируемый пост)
через буфер обмена

насколько мне известно, в этом случае не генерятся сообщения WM_KEYUP, WM_KEYDOWN потому события TEDit onkeypress, onkeydown, onkeyup для каждого символа не генерируется. только для самой комбинации CTRL+V/Shift+Insert, если вставка из буфера была вызвана при помощи клавиатуры
если тебе надо различать - забабахай свой класс-компонент, у которого реакция на буфер обмена(сообщение WM_PASTE), изменения свойства text(на уровне процедуры-setter'a) и "ручной набор"(сообщение WM_KEYDOWN/WM_KEYUP) будут вызывать разные события.

Добавлено @ 16:01 
а зачем это всё?

Автор: Alexeis 17.3.2007, 16:03
ivan219, сделать перехват сообщений окна. WM_PASTE, WM_KEYUP, WM_SETTEXT, WM_SYSKEYUP, WM_SYSKEYDOWN, WM_SYSCOMMAND... вообще всяких методов много. 
  Или нужно определять только для себя, т.е. для тех методов, которыми сам пользуешся?

Автор: ivan219 17.3.2007, 16:31
Суть в том что в вод текста с клаввиатуры и через буфер должны обрабатыватся в отдельной процедуре а потом  выводится в Edit, программный т.е. Edit.Text:=''; не должен обрабатыватся этой процедурой.
Alexeis, можеш расписать эти сообщения WM_PASTE, WM_SETTEXT, WM_SYSKEYUP, WM_SYSKEYDOWN, WM_SYSCOMMAND

Автор: Alexeis 17.3.2007, 16:44
WM_PASTE - событие вставки из буфера обмена

WM_SETTEXT - установка стандартного текста окну. (вроде это событие возникает при присваивании)

WM_SYSKEYUP, WM_SYSKEYDOWN
Цитата

The WM_SYSKEYUP message is posted to the window with the keyboard focus when the user releases a key that was pressed while the ALT key was held down.


WM_SYSCOMMAND - вообще передает кучу служебных событий, оно полезно для перехвата управляющих сообщений. Вот полный список того что оно делает
Код

Specifies the type of system command requested. This parameter can be one of the following values. 
SC_CLOSE
Closes the window.
SC_CONTEXTHELP
Changes the cursor to a question mark with a pointer. If the user then clicks a control in the dialog box, the control receives a WM_HELP message.
SC_DEFAULT
Selects the default item; the user double-clicked the window menu.
SC_HOTKEY
Activates the window associated with the application-specified hot key. The lParam parameter identifies the window to activate.
SC_HSCROLL
Scrolls horizontally.
SC_KEYMENU
Retrieves the window menu as a result of a keystroke. For more information, see the Remarks section.
SC_MAXIMIZE
Maximizes the window.
SC_MINIMIZE
Minimizes the window.
SC_MONITORPOWER
Sets the state of the display. This command supports devices that have power-saving features, such as a battery-powered personal computer. 
The lParam parameter can have the following values:

1 - the display is going to low power

2 - the display is being shut off

SC_MOUSEMENU
Retrieves the window menu as a result of a mouse click.
SC_MOVE
Moves the window.
SC_NEXTWINDOW
Moves to the next window.
SC_PREVWINDOW
Moves to the previous window.
SC_RESTORE
Restores the window to its normal position and size.
SC_SCREENSAVE
Executes the screen saver application specified in the [boot] section of the System.ini file.
SC_SIZE
Sizes the window.
SC_TASKLIST
Activates the Start menu.
SC_VSCROLL
Scrolls vertically

Автор: ivan219 17.3.2007, 16:51
Alexeis, спасибо.

Автор: ivan219 17.3.2007, 17:30
Всё вопрос решон smile 
Код

procedure TMyLabeledEdit.WndProc(var Message: TMessage);
begin
 case Message.Msg of
      WM_PASTE,WM_KEYDOWN: if RealStr then FRealStr:=True;
      WM_SETTEXT: FRealStr:=False;
 end;
 inherited;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)