Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Внизсоздание компонент Найти похожие ветки
← →
_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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.014 c