Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#16: 2008-07-19 21:38:10 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-09 12:49:42
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#17: 2008-07-19 22:49:26 ЛС | профиль | цитата
Dilma, это тебя в гости откатило, оригинально

Гость писал(а):
Сейчас кое чего еще подправлю в интерфейсах data_element и покажу на примере хинтов как надо делать блочные элементы

Не, ну я пока по-старинке, у меня нет новой технологии, да и не знаю я ее пока, тренироваться еще придется.
Я себе поставил задачу и должен был выполнить ее. И я буду очень рад если примененные и отлаженные мной методы пойдут в дальнейшую реализацию. Я заметил в работе с тулами некоторые особенности, поэтому, если что-то будет не получаться, как должно, с радостью помогу.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#18: 2008-07-20 01:49:08 ЛС | профиль | цитата
nesco писал(а):
это тебя в гости откатило, оригинально

в ближайшие две недели это будет происходить с завидной регулярностью...

Набросал на примере Hint вариант организации менеджеров, о которых я ранее уже говорил(см. аттач). В чем основная идея: поскольку оформление хинта чаще всего общее для всех элементов проекта, то логичнее было бы определять это оформление один раз, т.е. иметь отдельный элемент для данной задачи. Почему удобнее реализовать данный элемент именно в качестве менеджера, а не банальной надстройки над неким общим классом в пространстве проекта(например, как это сделано с KOL.Application)? Основных причин тут две:
1) реализация в качестве надстройки над глобальным классом не позволит создавать индивидульные параметры хинта для контролов
2) в качестве хинта может выступать не только всплывающие окошко, но и вообще что угодно

Особое внимание хотелось бы обратить на пункт 2 - это самая замечательная особенность, вытекающая из технологии data_element. Один раз придумав некий внутренний интерфейс, через который элемент может общаться с внешним миром мы в дальнейшем занимаемся исключительно разработкой различных менеджеров, не меняя кода самого элемента. Для демонстрации этого преимущества я сделал два менеджера подсказок, работу которых можно посмотреть из примера в архиве.

Недостатки у данного способа конструирования схем тоже есть(с точки зрения пользователя очевидно):
1) требует большего усилия работы головой на начальном этапе освоения конструктора - все таки поменять значения св-тв проще, чем догадаться о связывание двух элементов через специальное св-во
2) некая потеря визуальности - появление неявных вызовов событий, что хорошо видно из схемы в архиве на примере UserHintManager.

nesco писал(а):
если что-то будет не получаться, как должно, с радостью помогу.

заметил такие особенности работы хинта:
- событие onShow(оно же WM_MOUSEHOVER) происходит два раза и с задержкой
- заставить hint показаться на экране и затем исчезнуть через какое-то время так же большая проблема. Такую возможность вообще говоря надо в настройки тоже вынести

(для работы примера нужно последнее обновление среды)
карма: 27
0
файлы: 1new_hint_interface.rar [16.1KB] [252]
Разработчик
Ответов: 26170
Рейтинг: 2127
#19: 2008-07-20 02:41:56 ЛС | профиль | цитата
Dilma писал(а):
реализация в качестве надстройки над глобальным классом не позволит создавать индивидульные параметры хинта для контролов

Не понял, у меня в примере у каждого контрола свой хинт, со своими параметрами, или это сказано про менэджер
Dilma писал(а):
заставить hint показаться на экране и затем исчезнуть через какое-то время так же большая проблема

Ну не совмем большая, есть специальные запросы под это дело, я пошел по пути автоматической установки параметров по-умолчанию
Dilma писал(а):
событие onShow(оно же WM_MOUSEHOVER) происходит два раза и с задержкой

Возможно, WM_MOUSEHOVER надо отключить и перенести активацию трэкселекта в onShow, это тоже сделать можно. А задержку обработчик выставляет сам на реакцию мыши (согласно заполненной структуры трекселекта) и по-умолчанию, всегда не сразу.

------------ Дoбавленo:


Dilma, извини за мою тупость, но в CGTShare.pas с SVN нет propGetLinkedElementInfo

------------ Дoбавленo:


Да, еще хотел спросить -- а для чего два элемента -- hiHintManager и hiUserHintManager, почему нельзя сделать один элемент hiHintManager
карма: 22

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#20: 2008-07-20 13:04:01 ЛС | профиль | цитата
Dilma писал(а):
Для демонстрации этого преимущества я сделал два менеджера подсказок, работу которых можно посмотреть из примера в архиве.


MIBII - денейролизатор
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#21: 2008-07-20 14:04:13 ЛС | профиль | цитата
Nic писал(а):
MIBII - денейролизатор

А что это такое
карма: 22

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#22: 2008-07-20 14:24:42 ЛС | профиль | цитата
Шутка.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 16884
Рейтинг: 1239
#23: 2008-07-20 14:34:30 ЛС | профиль | цитата
nesco, а так никак сделать нельзя?

##Hint=Всплывающая подсказка
@Hint=Текст подсказки|2|
HintStyle=Стиль рамки|4|1|Balloon,Standard
HintBackColor=Цвет фона|8|clInfoBk
HintTextColor=Цвет текста|8|clInfoText
HintIcon=Иконка слева от заголовка|4|0|None,Information,Warning,Error
HintTitle=Заголовок|2|
##
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Администрация
Ответов: 15295
Рейтинг: 1519
#24: 2008-07-20 14:42:27 ЛС | профиль | цитата
nesco писал(а):
Не понял, у меня в примере у каждого контрола свой хинт, со своими параметрами

у тебя в примере были глобальные классы? читай внимательнее.

nesco писал(а):
Ну не совмем большая, есть специальные запросы под это дело, я пошел по пути автоматической установки параметров по-умолчанию

должна регулироваться от нуля и выше

nesco писал(а):
но в CGTShare.pas с SVN нет propGetLinkedElementInfo

были проблемы с коммитом...

nesco писал(а):
почему нельзя сделать один элемент hiHintManager

nesco, я разговор начал с того, что пакет Delphi имеет врожденное ограничение, которое позволяет ему развиваться только экстенсивными методами и что в ряде случаев это ограничение можно преодолеть обходными путями за счет разделения элементов на части. Я конечно понимаю, что тебе как и коллеге Galkov-у очень охото все, что относится к элементу свалить в одну кучу и потом достраивать в интерфейсе вторые(третьи, четвертые...) панели для св-тв и точек... Но мне лично больше по душе модульная организация схем в самом широком смысле этого слова. Поэтому советую разворачивать споскость мышления именно в этом направление

------------ Дoбавленo:


Tad писал(а):
а так никак сделать нельзя?

поздно - на SVN этого уже нет.

Еще что касается HintManager организации - в текущем варианте, если св-во Hint определеною, а HintManager нет, то пользователь подсказки над элементом не увидит. Поэтому видимо нужно в SetHintManager отловить ситуацию hm = nil и присвоить менеджеру некий глобальный IHintManager с зашитыми настройками.
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#25: 2008-07-20 15:02:10 ЛС | профиль | цитата
Dilma писал(а):
должна регулироваться от нуля и выше

Да, может регулироваться, но в параметрах я ставил -1, те по-умолчанию. Это дело поправимое.
С WM_MOUSEHOVER я уже запарился перелавливать эти события, мышастый трекселестор -- еще та штука, но я еще поработаю над эти вопросом.
Dilma писал(а):
Но мне лично больше по душе модульная организация схем в самом широком смысле этого слова

Не, я просто спросил, почему так. Пусть будет модульная, мне приблизительно понятна ее организация, гляда на пример.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#26: 2008-07-20 15:13:00 ЛС | профиль | цитата
nesco писал(а):
Да, может регулироваться, но в параметрах я ставил -1, те по-умолчанию.

если там не -1 ставить, то проявляется это:
Dilma писал(а):
- событие onShow(оно же WM_MOUSEHOVER) происходит два раза и с задержкой


nesco писал(а):
Пусть будет модульная, мне приблизительно понятна ее организация, гляда на пример

"пусть будет" - это термин, которым лучше характеризовать равнозначные варианты реализации одной и той же задачи. Менеджер от пачки св-тв в элементе отличаются слишком сильно, чтобы так умалять его достоинства. Вот еще один пример вспомнился: есть у формы такое замечательное св-во SavePosName, над которым извратились настолько, что в зависимости от формата записи оно сохраняет настройки в разные места системы и под разными именами. А ведь на самом деле это классическая задача(тривиальная если точнее) в рамках технологии менеджеров. Всего-то надо было создать интерфейс ISaveParams и реализовать как минимум элементы RegistrySettings, InitFileSettings(XMLSettings...). А может еще и UserSettings для сохранения этих параметров вообще где угодно... А потом это св-во перенести из формы в Win.pas. Делов-то.
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#27: 2008-07-20 15:40:30 ЛС | профиль | цитата
Dilma писал(а):
лучше характеризовать равнозначные варианты реализации одной и той же задачи

Во как, а и не придал сильного значения фразе "пусть будет".
Dilma, я не могу судить о том хорошо это или плохо, тебе более известны достоинства этого метода реализации взаимодействий, почему для меня он и оказался равнозначным до тех пор, пока я явно не увижу в нем преимуществ.

Dilma писал(а):
если там не -1 ставить, то проявляется это:
Dilma писал(а)
- событие onShow(оно же WM_MOUSEHOVER) происходит два раза и с задержкой

Да оно там, и так, и так проявляется. Я ловушки поставил и смотрел еще в старом варианте, действительно два и больше раза выдает. Активизация трекселекторов мыша происходит по WM_MOUSEMOVE (WM_MOUSEFIRST). Если начать двигать мыша по окну элемента, то WM_MOUSEHOVER начинает проявляться с завидной регулярностью, нужно ставить правильный триггер.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#28: 2008-07-20 15:59:31 ЛС | профиль | цитата
nesco, а компилировать "пустую" форму с GroupBox(или с дочерней формой) не пробовал

Compiling C:MyProgHiAsm366b169ElementsdelphicodehiChildGroupBox_118D790.pas
Compiling C:MyProgHiAsm366b169ElementsdelphicodehiGroupBox.pas
Project9.pas(173,3) Error: Identifier not found "GroupBox_118D290"

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#29: 2008-07-20 16:15:30 ЛС | профиль | цитата
Да, есть такое.
Вот такого типа строка выдает ошибку


  Panel_DC8B94.HintManager := HintManager_DCF80C.getInterfaceHint;
карма: 22

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#30: 2008-07-20 16:26:53 ЛС | профиль | цитата
А если компилировать из папки HiAsm?

У меня есть несколько схем, которые не компилируются из другого места, нежели папка HiAsm. Ошибку выдают различные компоненты (в зависимости от схемы), но ошибка одна и таже Identifier not found.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)