Текущий архив: 2003.02.06;
Скачать: CL | DM;
ВнизИмя ЛЮБОГО обьекта под курсором Application Events Найти похожие ветки
← →
Serghei (2003-01-23 17:01) [0]Уважаемые мастера Please HELP!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ME
Суть проблемы:
Требуется вести ЛОГ всех действий в МОЕЙ программе (все – Кнопки, пункты в MainMenu, PopupMenu, TabSheet, на что кликал)
Типа:
ИмяОбьекта-Время
MainMenuFileOpen – 10:00
SaveToolButton – 10:10
GeneralTabSheet – 11:00
Делаю так: (только не в логфаил а в статус бар)
procedure TMainForm.AppEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
WinControlUnderMouseCursor:=FindVCLWindow(Msg.pt);
if WinControlUnderMouseCursor <> nil then
begin
if WinControlUnderMouseCursor is TPageControl then
StatusBar.Panels[0].Text:=IntToStr(Msg.pt.X-Left)+", "+IntToStr(Msg.pt.Y-Top)+ ", "
+ TPageControl(WinControlUnderMouseCursor).ActivePage.Name
+ " ("+IntToStr(WinControlUnderMouseCursor.ComponentCount)+" components)"
else
if WinControlUnderMouseCursor is TActionMainMenuBar then
StatusBar.Panels[0].Text:=IntToStr(Msg.pt.X-Left)+", "+IntToStr(Msg.pt.Y-Top)+ ", "
+ TActionMainMenuBar(WinControlUnderMouseCursor).ActionClient.DisplayName
+ " ("+IntToStr(WinControlUnderMouseCursor.ComponentCount)+" components)"
else
StatusBar.Panels[0].Text:=IntToStr(Msg.pt.X-Left)+", "+IntToStr(Msg.pt.Y-Top)+ ", "
+ WinControlUnderMouseCursor.Name
+ " ("+IntToStr(WinControlUnderMouseCursor.ComponentCount)+" components)";
end.
Проблема состоит в том что когда открыто окошечко меню ни координат, ни имя обьекта неизвесны. А еще круче если стоиш курсором на каком нибудь слове и ты знаешь какому обьекту пренадлежит этот ???.Caption или ???.Text
← →
Serghei (2003-01-23 17:42) [1]МАСТЕРА АУ!!!!!
Ну Help me Pleeeeeease!!!!!!
← →
gsu (2003-01-23 17:44) [2]Msg.handle, msg.lparam
по ним анализируй объекты
← →
Serghei (2003-01-23 18:17) [3]Добавил
StatusBar.Panels[1].Text:=IntToStr(Msg.lparam);
В меню так и не пашет :(
4е делать?????
gsu
если Мона по конкретней как анализировать
заранее сенкс
← →
gsu (2003-01-23 18:27) [4]case msg.message of
WM_Command: begin
if Lo(Msg.lParam) <> 0
then Exit;
Handled:=True;
if (Msg.hwnd = ТВОЕМЕНЮ.handle)
and (Msg.wParam = ТВОЕПОДМЕНЮ.command)
then
...
← →
Serghei (2003-01-24 12:22) [5]Щас попробую
сенкс за активность gsu
← →
Serghei (2003-01-24 15:04) [6]Либо я не правильно понимаю как пользоваться твоей помощью gsu,
либо не правильно поставил вопрос и меня не поняли. Попробую иначе:
Я гуляю мышкой по приложению, в стстус баре ПОСТОЯННО должно высвечиваться има обьекта над чьим Caption или Text или хотабы над которым находится курсор мышки
Типа (Button1, Edit1, Label1, MainMenuItem1, PopupMenuItem1, ToolButton1, TabSeet1, GroupBox1, RadioGroup1, любой обьект который виден…)
Вот мы имеем
FindVCLWindow(TPoint) = Обьект которому принадлежат координаты TPoint
Ставим в ApplicationEvents -> OnMessage и видим
FindVCLWindow(TPoint) дает тока ToolBar1 но не ToolButton1 который находится на этом ToolBar1; PageControl1 но не TabSeet1
а когда активорован (открыто окно) MainMenu или PopupMenu вапще ни ф_га :(
Что-то в этом роде только чтобы работало со всеми видимыми обьектами. Ведь как-то ОС известно кому какие Hint показывать, и синий курсор в меню под мышкой???
Я еще думаю может не правильно что ставлю в ApplicationEvents -> OnMessage типа он не ловит сообщения когда меню отктыто.
ПРОШУ HELP!!!!!!! а то сам никак не допру
← →
Serghei (2003-01-24 17:11) [7]4е никто не Help-ит иль никто не знает
вопрос вроде-бы не похож на сложный
МАСТЕРА АУУУУУУУ!!!!!
← →
Serghei (2003-01-27 10:29) [8]Мастера прошу помощи, плиз ГОРЮ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
← →
Serghei (2003-01-27 12:10) [9]Блин ну куда все мастера подевались
ПРОШУ ПОМОЩИ ведь я не забываю волшебное слово, спасите меня ПОЖАЛУЙСТА !!!
← →
Serghei (2003-01-27 16:10) [10]Да вы тока посмотрите на этих БЕССОВЕСТНЫХ МАСТЕРОВ наплевать им на чужое горе, мне теперь вешаться иль как???
← →
Evgeniy Startsev (2003-01-27 20:20) [11]var
p:tpoint;
q:pchar
попробуй это вызывать по таймеру, может поможет
getcursorpos(p);
getmem(q,255);
GetClassName(WindowFromPoint(p),q,255);
← →
Song (2003-01-27 21:03) [12]Ты там такого нагромодил... неудивительно, что никому даже смотреть не хочется..
← →
Serghei (2003-01-28 09:34) [13]Evgeniy Startsev - ща попробую
Song возмона ты прав поробую иначе
Нужно постоянно знать имя обьекта над Caption, Text, ... которого висит указатель мыши.
т.е.FileOpenMenuItem.Caption = "Open";
передвинул указатель над пунктом ( Open) меню, пусть в статус баре появится : FileOpenMenuItem
PS. надеюсь ща не так тошно будет.
А я уже хотел вешаться :(
← →
Serghei (2003-01-28 10:05) [14]Вставил в
procedure TMainForm.AppEvents1Message(var Msg: tagMSG; var Handled: Boolean);
по таймеру не годится (вобще-то сгодится после правого клика, например, по любому заголовку...)
Evgeniy Startsev направление верное но не то
1. Выдает имя класса а не обьекта;
2. кнопки на TToolBar не распознаются ( не чувствует их)
3. при открытом меню так и не реагирует
PS. опять начал думать о веревке :(
← →
Serghei (2003-01-28 14:59) [15]Судя по всему МАСТЕРА должны тоже подумато о веревке :(
← →
Serghei (2003-01-29 10:25) [16]Все хватит вешаюсь, ВЕШАЕМСЯ :((
Страницы: 1 вся ветка
Текущий архив: 2003.02.06;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.014 c