Опрос
Опрос Тема Опроса: Нужен ли функционал создания тулбаров в компоненте



« Последняя модификация: mvgfirst : 20. Декабря 2007 :: 18:33 »
Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14 15 ОтправитьПечать
Очень популярная тема (более 25 ответов) [RWidjets] Динамическое меню программы (число прочтений - 110181 )
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #165 - 11. Февраля 2010 :: 15:00
Печать  
chessman писал(а) 11. Февраля 2010 :: 14:54:
Пришлось получать полную правильную инфу по кнопке.

Как раз последние 2 часа курил доку по Win32Api на предмет параметров события WM_Notify Улыбка
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: [RWidjets] Динамическое меню программы
Ответ #166 - 11. Февраля 2010 :: 15:03
Печать  
CaBaT писал(а) 11. Февраля 2010 :: 15:00:
chessman писал(а) 11. Февраля 2010 :: 14:54:
Пришлось получать полную правильную инфу по кнопке.

Как раз последние 2 часа курил доку по Win32Api на предмет параметров события WM_Notify Улыбка

Вот это дело Улыбка

Заремачь строку "strInfo = strInfo & ind & vbCrLf", иначе будет вылетать.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #167 - 11. Февраля 2010 :: 15:32
Печать  
Ура! Все работает, погоняю денёк и ставлю на боевые! Улыбка
Спасибо!
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #168 - 11. Февраля 2010 :: 16:09
Печать  
Черт, у меня у двух кнопок на панели одинаковые картинки..
Соответственно и подсказки одинаковые..
Думаю, как выкрутится - то ли картинку поменять..

..
Решил, что проще картинку поменять Улыбка
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: [RWidjets] Динамическое меню программы
Ответ #169 - 12. Февраля 2010 :: 07:31
Печать  
Поменяй вот эту процедуру

Код
Выбрать все
Процедура Сформировать()
	If (СписокПанелей.РазмерСписка() = 0) ИЛИ (oWindowProc <>0) Then	Возврат;	EndIf;

	_ИмяФайлаПанели = КаталогИБ() + "toolbar.txt";
	// Название для ToolTip'sов занесем в массив
	_ФайлПанели = СоздатьОбъект("Текст");
	_ФайлПанели.Открыть(_ИмяФайлаПанели);
	Для н = 1 По _ФайлПанели.КоличествоСтрок() Цикл
		_СтрокаПанели = СокрЛП(_ФайлПанели.ПолучитьСтроку(н));
		Если Лев(_СтрокаПанели,2) = "//" Тогда Продолжить;КонецЕсли;
		_КнопкаПанели   = РазбитьНаПодстроки(_СтрокаПанели,"=");
		_ТипКнопки	= _КнопкаПанели.ПолучитьЗначение(1);
		_ОписаниеКнопки = РазбитьНаПодстроки(СокрЛП(_КнопкаПанели.ПолучитьЗначение(2)),"|");
		Если _ТипКнопки <> "delim" Тогда
			ScrptCtrl.Eval("AddEl(""" + СокрЛП(_ОписаниеКнопки.ПолучитьЗначение(1))  + """, " + СокрЛП(_ОписаниеКнопки.ПолучитьЗначение(2)) + ")");
		EndIf;
	КонецЦикла;

	// Поехали
	// т.к. процедура окна у панелей одинаковая, выполняем скрипт для одной из панелей, в других просто меняем адрес
	oWindowProc = Wrap.GetWindowLong(СписокПанелей.ПолучитьЗначение(1), -4);
	nWindowProc = ScrptCtrl.Eval("Start(" + СписокПанелей.ПолучитьЗначение(1) + "," + oWindowProc + ")");

	For j = 2 To СписокПанелей.РазмерСписка() Do
		Wrap.SetWindowLong(СписокПанелей.ПолучитьЗначение(j),  -4, nWindowProc);
	EndDo;
КонецПроцедуры
 



а то, если несколько панелей скрипт выполнялся для каждой, а это не нужно

И в скрипте, в функцие Start добавь

Код
Выбрать все
	|	'-----------------------Замена процедуры главного окна--------------------
	|	Start = AddrBuff
	|End Function
 

  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #170 - 12. Февраля 2010 :: 09:04
Печать  
Спасибо, поправлю.
Тут косяк поймал неприятный - если включить по твоему способу подсказки к кнопкам - начинает косячить работа с меню - у меня заложена возможность обновить меню - при этом перечитывается файл меню и обновляется, дык вот не работает - вываливается ошибка компоненты RWidjets (по видимому) - что то вроде Redraw Error..
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: [RWidjets] Динамическое меню программы
Ответ #171 - 12. Февраля 2010 :: 09:39
Печать  
CaBaT писал(а) 12. Февраля 2010 :: 09:04:
Спасибо, поправлю.
Тут косяк поймал неприятный - если включить по твоему способу подсказки к кнопкам - начинает косячить работа с меню - у меня заложена возможность обновить меню - при этом перечитывается файл меню и обновляется, дык вот не работает - вываливается ошибка компоненты RWidjets (по видимому) - что то вроде Redraw Error..


Выложи, давай посмотрим. Странно...как это может на меню влиять.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #172 - 12. Февраля 2010 :: 12:07
Печать  
Погонял - пришел к такому результату - если подсказки включаю - глючит пересоздание меню, если отключаю - нет.
Скорее всего на время обновления меню буду отключать подсказки а потом включать обратно, но пока еще этот вариант не проверил..
Чуть позже попробую нарисовать тестовую базу.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #173 - 15. Февраля 2010 :: 11:40
Печать  
в результате экспериментов выяснил, что начинает падать обновление меню после того, как меняется стиль тулбаров здесь
Код
Выбрать все
style = Wrap.GetWindowLong(hWnd, GWL_STYLE);
Если style = МД.СтрокаВЧисло("5000980A", 16) Тогда
	// TBSTYLE_TOOLTIPS	equ 0100h
	Wrap.SetWindowLong(hWnd, GWL_STYLE, style + МД.СтрокаВЧисло("100", 16));
	_СписокПанелей.ДобавитьЗначение(hWnd);
ИначеЕсли style = МД.СтрокаВЧисло("5000990A", 16) Тогда
	_СписокПанелей.ДобавитьЗначение(hWnd);
КонецЕсли; 


пробовал перед обновление меню вертать все взад - пока не получилось..
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: [RWidjets] Динамическое меню программы
Ответ #174 - 15. Февраля 2010 :: 16:22
Печать  
Переработал материал, создал 2 класса ToolTip и Toolbar.
Теперь кнопки идентифицируются правильно, по своему порядковому номеру, так что картинки могут быть одинаковыми.
В обработке "Проба" пример создания панелей. Теперь ее можно закрывать после создания панелей, тултипсы остаются.

Потестируй пока это.
Завтра посмотрю, что со стилями можно сделать - я думаю, что  тултип можно привязать отдельно.
  

RW.ZIP ( 68 KB | Загрузки )
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #175 - 16. Февраля 2010 :: 09:27
Печать  
Спасибо! Сегодня-завтра проверю в своей базе..
Обновление меню пока починить не удалось, буду ковырять дальше..
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #176 - 17. Февраля 2010 :: 09:08
Печать  
Появилась такая мысля - может имеет смысл для каждой панели создавать свой экземпляр класса Tooltip?
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #177 - 17. Февраля 2010 :: 09:54
Печать  
Переделал в своей рабочей на последний вариант - все ок, только падает при попытке выключить/включить подсказки, причем падает на "включить", хотя на прошлом варианте вроде получалось корректно отключать/включать подсказки..
Буду разбираться..

Проблему обновления меню пока побороть не удалось..
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #178 - 17. Февраля 2010 :: 10:13
Печать  
В классе Tooltip в конструкторе предлагаю код
Код
Выбрать все
|Function SetWindowLong(hWnd, Flag)
|	If Flag = 1 Then
|		'-----------------------Подмена процедуры окна--------------------
|		oWindowProc = Wrap.GetWindowLong(hwnd, -4)
|
|		Wrap.NumPut oWindowProc  - (AddrBuff + 24 + 5), AddrBuff, 25, ""l""
|		Wrap.NumPut oWindowProc  - (AddrBuff + 36 + 5), AddrBuff, 37, ""l""
|		Wrap.SetWindowLong hWnd,  -4, AddrBuff
|		'-----------------------Подмена процедуры окна--------------------
|	ElseIf Flag = 0 Then
|		If oWindowProc > 0 Then
|			'Восстановим родную процедуру
|			Wrap.SetWindowLong hWnd,  -4, oWindowProc
|		End If
|	End If
|End Function
 


изменить на
Код
Выбрать все
|Function SetWindowLong(hWnd, Flag)
|	If Flag = 1 Then
|		'-----------------------Подмена процедуры окна--------------------
|		if oWindowProc = 0 then
|			oWindowProc = Wrap.GetWindowLong(hwnd, -4)
|		End If
|
|		Wrap.NumPut oWindowProc  - (AddrBuff + 24 + 5), AddrBuff, 25, ""l""
|		Wrap.NumPut oWindowProc  - (AddrBuff + 36 + 5), AddrBuff, 37, ""l""
|		Wrap.SetWindowLong hWnd,  -4, AddrBuff
|		'-----------------------Подмена процедуры окна--------------------
|	ElseIf Flag = 0 Then
|		If oWindowProc > 0 Then
|			'Восстановим родную процедуру
|			MsgBox oWindowProc
|			Wrap.SetWindowLong hWnd,  -4, oWindowProc
|		End If
|	End If
|End Function 


в этом случае корректно работает выключение/включение подсказок
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: [RWidjets] Динамическое меню программы
Ответ #179 - 17. Февраля 2010 :: 10:18
Печать  
Кстати, проверил - на последнем варианте действительно корректно отображаются разные подсказки даже при одинаковом номере иконки кнопки Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14 15
ОтправитьПечать