Форум: "Основная";
Текущий архив: 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