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

Вниз

Перхватить MouseDown раньше компонента   Найти похожие ветки 

 
QuestionX   (2004-08-02 02:04) [0]

Мастаки, возникла у меня следующая проблема
Дано: Форма и N компонентов на ней
Вопрос: Как перехватить событие MouseDown (MouseUp, MouseMove), если пользователь нажал кнопку мыши над компонентом (например над TButton) и, обработав, погасить это событие, не передавая его компоненту (например не давая кнопке нажаться) ?

Проблема в том, что при нажатии мыши над TButton форма не получает сообщения WM_LBUTTONDOWN (насколько я понимаю оно направляется оконной функции той самой кнопки). Сообщение, правда, приходит если Button.Enabled := True, но такой вариант  не подходит.

Буду признателен за любые подсказки.


 
oleg_SYS ©   (2004-08-02 03:00) [1]

Я не свосем понял вопроса зачем вам конпка на которую нельзя нажать?
Попробуйте обявить глобальную переменную типа Boolean и оперирывать с ней, как вам угодно :)

Этот код позволит вам перехватить событие MouseDown и вызвать это событие форме:

var
NoBD : Boolean = True;
...
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
ShowMessage("Событие onMouseDown по форме");
end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
if NoBD
 then
  begin
   ShowMessage("Событие onMouseDown по мышке");
   Exit;
  end;
end;

Думаю вам хватит советов :) Объясните вопрос, если я вас не понял.


 
oleg_SYS ©   (2004-08-02 03:03) [2]

т.е. по кнопке а не по мышке :)


 
QuestionX   (2004-08-02 10:07) [3]


> oleg_SYS ©   (02.08.04 03:00) [1]
> Я не свосем понял вопроса зачем вам конпка на которую нельзя
> нажать?
> Попробуйте обявить глобальную переменную типа Boolean и
> оперирывать с ней, как вам угодно :)
> Думаю вам хватит советов :) Объясните вопрос, если я вас не понял.

Вопрос довольно однозначно задан, ИМХО :) Если вас интересуют подробности, то речь идет о форме с интерфейсом, настраиваемым в Run-time (проще говоря, что-то вроде редактора форм в Delphi) а перехват нужен, чтобы используя мышь перетаскивать компоненты на форме.
А что касается перехвата OnMouseDown компонента, то этот способ позволяет перехватить, но не погасить событие, а это мне не подходит.
Все равно спасибо за участие.

Вопрос остается открытым.


 
Sandman25 ©   (2004-08-02 10:09) [4]

>погасить событие

Abort?


 
QuestionX   (2004-08-02 10:13) [5]


> Sandman25 ©   (02.08.04 10:09) [4]
> >погасить событие
>
> Abort?

Уже ближе к цели :)) Кнопка не нажимается, спасибо. Но вот у ComboBox"a список выпадает :( А надо полностью погасить реакцию компонентов на мышь.


 
Sandman25 ©   (2004-08-02 10:20) [6]

[5] QuestionX   (02.08.04 10:13)

Создайте наследника TComboBox, обрабатывайте у него WM_LBUTTONDOWN


 
QuestionX   (2004-08-02 10:24) [7]


> Sandman25 ©   (02.08.04 10:20) [6]
> [5] QuestionX   (02.08.04 10:13)
>
> Создайте наследника TComboBox, обрабатывайте у него WM_LBUTTONDOWN

Наследников создавать нельзя по условию задачи :(( Не от всех же компонент мне наследников делать :((


 
Sandman25 ©   (2004-08-02 10:45) [8]

[7] QuestionX   (02.08.04 10:24)

Вообще-то странно как-то получается. Может, Вам лучше DrawFrameControl использовать вместо обычных компонентов?


 
Ega23 ©   (2004-08-02 11:52) [9]

TApplicationEvents

procedure TFMain.AppEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
if (Msg.HWND=Твой_Button.Handle) and (Msg.message=WM_RBUTTONUP) then
 Handled:=True;
end;


 
Ega23 ©   (2004-08-02 11:53) [10]

Msg.message=WM_RBUTTONUP

Читать как  WM_LBUTTONUP


 
wicked ©   (2004-08-02 12:00) [11]

жуть какая....
альтернатива к [9] и [10] - свойство WindowProc......


 
QuestionX   (2004-08-02 17:27) [12]


> Ega23 ©   (02.08.04 11:52) [9]
> TApplicationEvents

Спасибо, видимо это единственно приемлемый вариант...


 
KSergey ©   (2004-08-02 18:47) [13]

Для таскания компонентов по форме в Run-time есть готовый компонент.
Названия не помню, если не найдете - завтра напишу, коли не забуду.

Правда там (если не ошибаюсь) на каждый компонент в MouseDown вызывался соотв. метод (если не ошибаюсь). Но дальше - уже все здорово. И подход там иной: сверху окошечко вешается. Можно еще и размеры менять при желании.


 
QuestionX   (2004-08-02 21:52) [14]


> KSergey ©   (02.08.04 18:47) [13]
> И подход там иной: сверху окошечко вешается

А ведь отличная идея :)))

Спасибо !


 
Думкин ©   (2004-08-03 07:30) [15]

> KSergey ©   (02.08.04 18:47) [13]

Это описано в книге:

http://podgoretsky.com/ftp/Docs/Delphi/D3/D3ProgLib/ch_12.htm#1



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

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

Наверх




Память: 0.5 MB
Время: 0.049 c
14-1091193438
dtm
2004-07-30 17:17
2004.08.15
А книжечку по SQL Server 2К присоветуйте, а?


14-1091092961
Layner
2004-07-29 13:22
2004.08.15
Вирусы на Delphi есть?


3-1090280687
bigfoot
2004-07-20 03:44
2004.08.15
Вопрос по синтаксису запроса в TQUERY


3-1090068004
Kirill
2004-07-17 16:40
2004.08.15
Дубликаты


14-1090481423
CHES
2004-07-22 11:30
2004.08.15
пример использования интерфейсов