Переключение на Главную Страницу Страницы: 1 [2] 3 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) [RToolTips] Динамические подсказки v.1.2.1 (число прочтений - 30886 )
Robert
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 20. Сентября 2006
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #15 - 30. Октября 2007 :: 23:12
Печать  
v.1.1.0
+ Добавлены подсказки для табличного документа
  

clip0006.jpg ( 92 KB | Загрузки )
clip0006.jpg
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #16 - 30. Октября 2007 :: 23:15
Печать  
Браво!!! Улыбка


Роберт, только не завязывай, замути еще что ни то прикольное Улыбка
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #17 - 31. Октября 2007 :: 00:24
Печать  
Роберт, попытался вывести подсказку прямо перед выполнением тяжелых запросов у ТП. ВремяПоявления = 0.
Подсказка упрямо появляется только после заполнения ТП результатами запроса. Пусть даже запрос 10-15-20 сек делался.

Это 1С так насмерть все блокирует или у меня лыжи не едут?
  
Наверх
 
IP записан
 
stalker18
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 06. Ноября 2007
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #18 - 06. Ноября 2007 :: 09:45
Печать  
to Robert:

У меня предложение по модернизации тултипа. Можешь сделать так чтобы в подсказку можно было вставить гиперссылки? И чтоб в 1С собитие вызывалось при этом. Что-то типа "ПриНажатииНаГиперссылку()".
  
Наверх
 
IP записан
 
Robert
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 20. Сентября 2006
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #19 - 09. Ноября 2007 :: 20:55
Печать  
Arta
У меня таже фигня получается. Тот механизм, который используется для отображения подсказки, не позволяет гарантировано выводить окно подсказки методом Показать. Это все же подсказка, а не окно монитора процесса.
Другое дело, что используя эту компоненту, можно доработать RMsgWindow. Можно выводить в это окно не просто текст, а текст, сформированный как QHTML.

stalker18
Нет. Не могу.
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #20 - 09. Ноября 2007 :: 21:19
Печать  
Robert писал(а) 09. Ноября 2007 :: 20:55:
Arta
У меня таже фигня получается. Тот механизм, который используется для отображения подсказки, не позволяет гарантировано выводить окно подсказки методом Показать. Это все же подсказка, а не окно монитора процесса.
Другое дело, что используя эту компоненту, можно доработать RMsgWindow. Можно выводить в это окно не просто текст, а текст, сформированный как QHTML.


Вроде ты не хотел возвращаться к RMsgWindow Улыбка
Я могу на это только сказать, что я всеми руками за!

  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #21 - 11. Ноября 2007 :: 14:48
Печать  
Роберт, подсказка срабатывает и при Видимость(0)
  
Наверх
 
IP записан
 
Robert
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 20. Сентября 2006
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #22 - 16. Ноября 2007 :: 17:39
Печать  
v.1.2.1
+ Добавлен объект RMsgWindow2 аналог объекта в RWidjets, только с возможностью вывода в окно не просто текста, а форматированного текста.
- Решена проблема с чрезмерной загрузкой процессора
- Удалены лишние стандартные подсказки в многострочной части

Arta писал(а) 11. Ноября 2007 :: 14:48:
Роберт, подсказка срабатывает и при Видимость(0)

Не смог повторить эту ошибку. Все работает правильно.
Можешь тестовую обработку сделать, где эта ошибка будет проявляться?
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: [RToolTips] Динамические подсказки v.1.2.1
Ответ #23 - 16. Ноября 2007 :: 18:15
Печать  
тест сделаю

возвращаясь к RMsgWindow - можешь сделать задержку на вывод окна?
  
Наверх
 
IP записан
 
Robert
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 20. Сентября 2006
Re: [RToolTips] Динамические подсказки v.1.2.1
Ответ #24 - 16. Ноября 2007 :: 18:30
Печать  
Полезность такой фичи представляется мне сомнительной, а возни много.
Кроме того, я вообще сомневаюсь, что это будет работать в некоторых случаях. Например, если запустить таймаут и запустить запрос и время появления окна придется как раз на момент выполнения запроса, то окно по-любому не появится, пока не завершится выполнение запроса. Запрос же намертво блокирует все. Там сообщения через очередь сообщений не проходят пока запрос не завершится. Недаром же строка состояний белеет.
А заморачиваться ради этого с еще одним потоком слишком накладно.
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: [RToolTips] Динамические подсказки v.1.2.1
Ответ #25 - 16. Ноября 2007 :: 18:33
Печать  
Ясенно. Фигово Печаль
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #26 - 18. Ноября 2007 :: 11:22
Печать  
Robert писал(а) 16. Ноября 2007 :: 17:39:
v.1.2.1
- Решена проблема с чрезмерной загрузкой процессора

Как разрулил эту проблему? Все-таки мультимедиа-таймеры помогли или что-то другое нашел?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Robert
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 20. Сентября 2006
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #27 - 18. Ноября 2007 :: 14:32
Печать  
artbear писал(а) 18. Ноября 2007 :: 11:22:
Как разрулил эту проблему? Все-таки мультимедиа-таймеры помогли или что-то другое нашел?

Нашел такие сообщения, которые 1С игнорирует, когда их запускаешь в очередь. Это сообщения для потока без хедера окна. А на любое сообщение с хэдереом окна 1С генерит еще несколько собственных паразитных и начинает в них же захлебываться.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: [RToolTips] Динамические подсказки v.1.1.0
Ответ #28 - 19. Ноября 2007 :: 11:22
Печать  
Robert писал(а) 18. Ноября 2007 :: 14:32:
artbear писал(а) 18. Ноября 2007 :: 11:22:
Как разрулил эту проблему? Все-таки мультимедиа-таймеры помогли или что-то другое нашел?

Нашел такие сообщения, которые 1С игнорирует, когда их запускаешь в очередь. Это сообщения для потока без хедера окна. А на любое сообщение с хэдереом окна 1С генерит еще несколько собственных паразитных и начинает в них же захлебываться.

Можешь продемонстрировать код?
Крайне интересно, т.к. в ФормЕкс также есть необходимость в таймерах, которые не тормозят Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Robert
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 86
Зарегистрирован: 20. Сентября 2006
Re: [RToolTips] Динамические подсказки v.1.2.1
Ответ #29 - 19. Ноября 2007 :: 21:04
Печать  
Компонента реализует собственный класс таймера на основе выделенного потока. Вот процедура потока

Код
Выбрать все
DWORD WINAPI CTimer::TimerThread(LPVOID lpParameter)
{
	DWORD LastTickCount = ::GetTickCount();
	do
	{
		DWORD NewTickCount = ::GetTickCount();
		if(abs(NewTickCount - LastTickCount) >= GLOBAL_TIMER_DELAY)
		{
			LastTickCount = NewTickCount;
			if(CTimer::m_hMutex && ::WaitForSingleObject(CTimer::m_hMutex, MUTEX_DELAY) == WAIT_OBJECT_0)
			{
				::PostThreadMessage(m_ParentThreadId, WM_VXPTIMER, 0, NULL);

				::ReleaseMutex(CTimer::m_hMutex);
			}
		}
		Sleep(GLOBAL_TIMER_DELAY);
	}
	while(CTimer::m_hMutex && !CTimer::m_bTerminate);
	CTimer::m_bTerminate = false;
	return 0;
}
 



m_ParentThreadId - хедер основного потока
В основном потоке при загрузке компоненты делает так
Код
Выбрать все
hTimerHook = ::SetWindowsHookEx(WH_GETMESSAGE, TimerHook, NULL, ::GetCurrentThreadId()); 


Дальше реализуем процедуру перехвата
Код
Выбрать все
LRESULT CALLBACK TimerHook(int code, WPARAM wp, LPARAM lp)
{
	MSG* wpstr = (MSG*)lp;
	UINT uMsg = wpstr->message;

	if(uMsg == WM_VXPTIMER)
	{
		// Обработчик таймера
	}

	return ::CallNextHookEx(hMenuHook, code, wp, lp);
} 



В моем случае, обработчик таймера перебирает ссылки на экзепляры класса RToolTipsManager и для каждого вызывает метод OnTimer.
Решение, на мой взгляд, не очень красивое, потому что идет вразрез с общей идеологией MFC, обработкой очереди сообщений и пр. Но работает. Другого способа я не нашел.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 
ОтправитьПечать