Просто на сколько я понял. DBgrid и DataSet - разные вещи, одно рисунок, второе набор данных, координаты есть только у грида. Связывает их DataLink который объясняет где в какой ячейке запись рисовать.
Спасибо за идею. По крайне мере дало сподвижки. Объявил глобальную переменную MoveFlag. В событии OnMouseMove выполняю код если равно 0. Как только в событие зашло, берет = 1. По завершения опять 0.
В событии OnDataChange так же код срабатывает если MoveFlag равен 0.
По итогу не нужно будет отвязывать событие и отключать у qCat контролс.
Alex: есть список категорий. я хочу что бы при наведении на любую категорию, справа от нее появлялась кнопка удаления этой категории, но при этом, текущая выбранная категория не менялась.
показалось хорошая идея, но нет. все равно почему-то залипает
Суть залипания такая:
В первом гриде выводятся названия категорий, во втором гриде названия элементов категорий.
Если я нажимаю на пустую категорию - все ок. Грид выделяет её.
Если нажимаю на НЕ пустую категорию - в этом же гриде запись не переключается и не выделяет, во втором начинает моргать вертикальный скроллбар. Как только мышку вывожу за пределы грида, все срабатывает.
"сделайте наследование везде от класса с доступами"
Можно подробней? А то не могу из-за каши понять суть.
З.Ы.: В 1С например когда проставляешь роли, выводиться список объектов и ты галочками отмечаешь куда есть доступ.
Кто-то например прикрепил новый отчет, а ты галочками поставил что например людей с этой ролью этот отчет могут только смотреть.
Пума Тайланд: а в следующей заново все расписывать? )
Чтение хабров, форумов, тостера о программировании превратило мысли в кашу, где хочется как лучше, что бы в ногу со временем, а от if then else отойти не успел, и только на них делать программу уже стремно.
Хочется вырасти из "лишь бы работало", до "так правильно" (сейчас нахожусь между и работа на программой зависла), прокачать свой скилл, создав действительно динамически масштабируемое приложение по всем правилам, где каждый "модуль" можно будет без лишних проблем воткнуть в любое новое приложение.
kalapanga: например у меня 100 ролей и 100 функций. Дописывая 100 функцию, я не помню кому какие нужны права. Это ладно.
Дальше, если возникла необходимость добавить новую роль? Нужно что бы пользователь с правами администратора мог сам ее добавить и разумеется что бы ему не пришлось учить программирование и лезть в исходники.
Ну и разумеется, что бы другие, новые или уже созданные программы, которым нужна будет авторизация, не лопатить по правам, а было достаточно лишь подключить библиотеку.
Разумеется что при условии что динамическое подключение библиотек уже реализовано в них или будет реализовано.
Просто иначе я вижу разбитие по ролям как ползанье по коду и прописывание условий в ручную. Мол Если ID_USER_ROLE = 5 значит выполнить, если нет - выдать сообщение.
И при каждом изменении ролей, нужно будет так же ползать по коду исходной программы и менять все эти условия.
Хотелось бы этого избежать. Подключил библиотеку в настройках и потом ставишь галочки на против функций для роли, которые она может выполнять.
Как по другому сделать пока да же не представляю.
По сути да же надо отлавливать не все функции, а только ключевые события - записи данных там, просмотры разделов, доступность пунктов меню.
Rou1997: да. задача четко сформулирована и однозначно.
C# посоветовал балабол, которому сказали, что DLL пишется на Delphi, и знаний C# нет.
Дизассемблер и декомпилятор для библиотеки авторизации - слишком сложно. Должен быть способ проще. Никто не сказал что этот способ я проигнорировал, взял на заметку, копаю интернеты. Как вариант пока читаю принципы написания плагинов, которые свои функциональные возможности передают через файлы заголовков.
Задача сформулирована, на мой взгляд, вполне четко. Нужно написать библиотеку для авторизации с разделением на роли, которая подгружаясь в программу будет получать список всех её функций что бы давать доступ к ним тем или иным ролям. Перед каждым выполнением этих функций библиотека должна сама проверять есть ли у пользователя доступ к их выполнению.
Четко и на примере.
Написать нужно так, что бы в коде программы (не библиотеки) не прописывать проверки вручную.
Т.е. я беру любую скомпилированную программу, которая умеет динамически подгружать DLL, подгружаю свою библиотеку и у меня получается полностью функционирующая система авторизации.
"Можно конечно, лучше всего для этого писать ее на C# и т.п."
Вопрос предполагает еще и разумеющееся под собой "Как?"
C# может лучше, может хуже. Никогда с ним не работал, потому в вопросе указал то, на чем пытаюсь написать - Delphi.
KTG: исправляюсь. FrameIndex проставлять не обязательно. Видимо все же дело было в конвертации. А ручное прописывание индекса вносило сумятицу в очередность страниц.
Забыл упоямнуть. Мне показалось "адовым" приписки в MSDN к WIA на те или иные параметры, в том числе Handling Status, Select, Pages, где они есть в свойствах сканера DPS, и в свойствах изображения IPS и куча приписок применяемыми ими параметров, которые работают, то только в XP, то только в WIN 7, то в Vista и выше и т.д.
ну и поясню, что TIFF он делает путем применения фильтров к первой картинке.
Долго мучался по примеру из msdn, пока не додумался вручную проставлять FrameIndex. Без этого работать не хотел.
И да, конвертировать то же обязательно, т.к. формат файла должен поддерживать ту самую многостраничность. По умолчанию сканирует в .bmp
Принципиально VBA.
В принципе, если брать Delphi, C++ то задача остается так же.. нужно без окон диалогов через WIA брать N листов с автоподатчика и сохранять в TIFF.
И в принципе, ActiveRecord и дает текущую запись.