![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Имя ЛЮБОГО обьекта под курсором Application Events
Serghei © (2003-01-23 17:01:00)Уважаемые мастера 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-29 10:25:00) [1]Все хватит вешаюсь, ВЕШАЕМСЯ:((
Serghei (2003-01-28 14:59:00) [2]Судя по всему МАСТЕРАдолжны тоже подумато о веревке :(
Serghei (2003-01-28 10:05:00) [3]Вставил в
procedure TMainForm.AppEvents1Message(var Msg: tagMSG; var Handled: Boolean);
по таймеру не годится (вобще-то сгодится после правого клика, например, по любому заголовку...)
Evgeniy Startsevнаправление верное но не то
1. Выдает имя класса а не обьекта;
2. кнопки на TToolBar не распознаются ( не чувствует их)
3. при открытом меню так и не реагирует
PS. опять начал думать о веревке :(
Serghei (2003-01-28 09:34:00) [4]Evgeniy Startsev- ща попробую
Songвозмона ты прав поробую иначе
Нужно постоянно знать имя обьекта над Caption, Text, ... которого висит указатель мыши.
т.е.FileOpenMenuItem.Caption = "Open";
передвинул указатель над пунктом ( Open) меню, пусть в статус баре появится : FileOpenMenuItem
PS. надеюсь ща не так тошно будет.
А я уже хотел вешаться :(
Song (2003-01-27 21:03:00) [5]Ты там такого нагромодил... неудивительно, что никому даже смотреть не хочется..
Evgeniy Startsev (2003-01-27 20:20:00) [6]var
p:tpoint;
q:pchar
попробуй это вызывать по таймеру, может поможет
getcursorpos(p);
getmem(q,255);
GetClassName(WindowFromPoint(p),q,255);
Serghei (2003-01-27 16:10:00) [7]Да вы тока посмотрите на этих БЕССОВЕСТНЫХ МАСТЕРОВ наплевать им на чужое горе, мне теперь вешаться иль как???
Serghei (2003-01-27 12:10:00) [8]Блин ну куда все мастера подевались
ПРОШУ ПОМОЩИ ведь я не забываю волшебное слово, спасите меня ПОЖАЛУЙСТА !!!
Serghei (2003-01-27 10:29:00) [9]Мастера прошу помощи, плиз ГОРЮ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Serghei (2003-01-24 17:11:00) [10]4е никто не Help-итиль никто не знает
вопрос вроде-бы не похож на сложный
МАСТЕРА АУУУУУУУ!!!!!
Serghei (2003-01-24 15:04:00) [11]Либо я не правильно понимаю как пользоваться твоей помощью 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 12:22:00) [12]Щас попробую
сенкс за активность gsu
gsu (2003-01-23 18:27:00) [13]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-23 18:17:00) [14]Добавил
StatusBar.Panels[1].Text:=IntToStr(Msg.lparam);
В меню так и не пашет :(
4е делать?????
gsu
если Мона по конкретней как анализировать
заранее сенкс
gsu (2003-01-23 17:44:00) [15]Msg.handle, msg.lparam
по ним анализируй объекты
Serghei (2003-01-23 17:42:00) [16]МАСТЕРААУ!!!!!
Ну Help me Pleeeeeease!!!!!!