Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
3-25227
Апач
2003-12-08 12:57
2004.01.09
IB тригер работа с датой


1-25275
DeScriptor
2003-12-25 17:03
2004.01.09
Самоубийство Thread


1-25334
Андреев
2003-12-21 20:46
2004.01.09
сохранение StringGrid в файле


1-25325
Samael6
2003-12-17 17:01
2004.01.09
Outlook Express COM Add-ins


4-25636
Fox Mulder
2003-11-07 06:31
2004.01.09
Скины





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский