|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Кто-нибудь работал с Messages
Проблема следуюшая:
На форме есть PaintBox. Если мышка находится над PaintBox, то если нажата комбинации ALT + SPACE (Пробел) нужно изменить курсор с crDefault на crSize, если же ALT + SPACE (Пробел) "отпушен", то изменит курсор с crSize на crDefault. Я пробовал с событием KeyUp, но к сожалению всё равно MENU всплывает Думаю что нужно пробовать работать с Message, но к сожалению я никогда с Messages не работал. |
#2
|
|||
|
|||
Тут, думаю, лучше всего поступить так. Поскольку сочетание Alt+Space зарезервировано под команду открытия системного меню, то придется перехватывать и перекрывать сообщение WM_SYSCOMMAND. Ну а на отпускание пробела сгодится и стандартный обработчик событий формы.
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) PaintBox1: TPaintBox; Button1: TButton; procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } procedure WMSYSCOMMAND(var Msg: TMessage); message WM_SYSCOMMAND; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.WMSYSCOMMAND(var Msg: TMessage); begin if Msg.WParam = SC_KEYMENU then if (Mouse.CursorPos.X >= PaintBox1.Left + Left) and (Mouse.CursorPos.X <= PaintBox1.Left + PaintBox1.Width + Left) and (Mouse.CursorPos.Y >= PaintBox1.Top + Top) and (Mouse.CursorPos.Y <= PaintBox1.Top + PaintBox1.Height + Top) then PaintBox1.Cursor := crSize else inherited else inherited; end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_SPACE then PaintBox1.Cursor := crDefault; end; end. |
#3
|
|||
|
|||
Спасибо
Большое Спасибо
|