Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

создание компонент   Найти похожие ветки 

 
_hunter_   (2003-12-25 11:03) [0]

Создал компонент от TCustomControl. Он должен выполнять определенные действия при нажатии на клавиши перехода (влево, вправо, вверх, вниз). Но при нажатии на эти клавиши после выполнения требуемых действий происходит переход к следующему компоненту. Как можно это исправить?


 
Amoeba ©   (2003-12-25 11:06) [1]

Телепатов здесь нет! Что за компонент, что он делает, как обрабатываются нажетия клавиш? Не видя кода ничего конкретного сказать нельзя.


 
_hunter_ ©   (2003-12-25 11:08) [2]

Компонент должен менять свой размер и перемещаться по форме (это впринципе не так важно). А нажатия клавиш обрабатываются в WndProc примерно так:

case Message.Msg of
CM_WANTSPECIALKEY:
begin
if message.WParam=VK_LEFT then Width:=Width-1;
if message.WParam=VK_RIGHT then Width:=Width+1;
end;
...
...
end;


 
_hunter_ ©   (2003-12-25 11:59) [3]

блин... сам себе и ответил... :)))

...
procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
...

procedure TCustomMovedShape.CNKeyDown(var Message: TWMKeyDown);
var
ShiftState: TShiftState;
begin
ShiftState:=KeyDataToShiftState(Message.KeyData);
case Message.CharCode of
VK_LEFT: if (ssCtrl in ShiftState) then Left:=Left-1 else Width:=Width-1;
VK_RIGHT: if (ssCtrl in ShiftState) then Left:=Left+1 else Width:=Width+1;
VK_UP: if (ssCtrl in ShiftState) then Top:=Top-1 else Height:=Height-1;
VK_DOWN: if (ssCtrl in ShiftState) then Top:=Top+1 else Height:=Height+1;
else
inherited
end;
end;


 
Юрий Зотов ©   (2003-12-25 13:33) [4]

Можно гораздо проще:

procedure TCustomMovedShape.WMDlgCode(var Message: TMessage);
begin
inherited;
with Message do Result := Result or DLGC_WANTARROWS
end;

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


 
Юрий Зотов ©   (2003-12-25 13:41) [5]

Забыл указать главное - это обработчик WM_GETDLGCODE.


 
_hunter_ ©   (2003-12-25 14:30) [6]

Спасибо, так действительно проще :)

А как сделать этот компонент прозрачным? Если создавать компонент от TGraphicControl тогда достаточно сделать так: Canvas.Pen.Mode:=pmMask. А вот если создавать его от TCustomControl рисуется сначало окно, а потом уже то, что я рисую. Т.е. нижнее изображение перекрывается... :(


 
Юрий Зотов ©   (2003-12-25 15:57) [7]

Перекройте метод CreateParams:

begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT
end;

Только тогда какой смысл именно в TCustomControl? Он же как раз для своего рисования и предназначен. Уж тогда берите TGraphicControl.


 
_hunter_ ©   (2003-12-25 18:00) [8]

TCustomControl нужен для того, чтобы можно было менять размер при помощи клавиатуры (при помощи стрелок). TGraphicControl это ведь не позволяет сделать.


 
Skier ©   (2003-12-25 18:06) [9]

TStretchHandles c http://z-ol.chat.ru/cmp.htm
Не устроит ?



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
3-25191
Denisiy
2003-12-12 15:11
2004.01.09
НД для временного хранения записей - присоветуете ?


4-25654
Testerman
2003-11-05 19:03
2004.01.09
Помогите заменить кнопку


7-25622
reskator
2003-10-26 12:14
2004.01.09
программно отловить цифровой сигнал полученный из аналогового, по


14-25552
bobtubob
2003-12-18 10:04
2004.01.09
нужна очень мощная система математической обработки


7-25628
Ev1972
2003-10-27 10:58
2004.01.09
Как программно определить путь к папке