Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

Перхватить 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
11-1078839419
UnSirious
2004-03-09 16:36
2004.08.15
TabControl


1-1091115800
dprimakov
2004-07-29 19:43
2004.08.15
Размер любого файла


14-1090519291
DSKalugin
2004-07-22 22:01
2004.08.15
скоро Internet Explorer закроют :-)))


3-1090393563
KIR
2004-07-21 11:06
2004.08.15
По FR: как оставить MasterData на той же стр., что и DetailData


14-1091259769
ИМХО
2004-07-31 11:42
2004.08.15
Картина мира: что видят животные и насекомые?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский