powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ограничения доступа на уровне пользовательского интерфейса
5 сообщений из 5, страница 1 из 1
Ограничения доступа на уровне пользовательского интерфейса
    #32262000
Anthei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация следующая: при запуске главной формы из базы тянутся связки вида:
название пункта меню и его доступность и имя пакета .
В каждом BPL есть функция с одним и тем же названием которая грузит форму.

Собственно вопрос: как при формировании меню(во время выполнения программы) назначить каждому пункту меню обработчик событий?
...
Рейтинг: 0 / 0
Ограничения доступа на уровне пользовательского интерфейса
    #32262056
Фотография Desil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сейчас похожая проблема стоит. В планах такое решение: есть в модуле, где будет динамическое меню из базы обрабатываться волшебный функция типа СелектАйтем, которая по свойству Tag из пункта меню будет определять какой обработчик надо вызывать. Эту чудесную функцию вешаешь на все пункты меню (ОнКлик) и конец.
...
Рейтинг: 0 / 0
Ограничения доступа на уровне пользовательского интерфейса
    #32262300
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Desil, сделай массив ДОСТУПНЫХ форм. При создании меню для кождого итема задай Tag:= [элемент массива]. А при OnClick получай нужную форму как FormArray[(Sender as TMenuItem).Tag]. Так проще, к тому же в этом же массиве можно объявить переменные, отражающие текущее сосотяние формы нет/есть/выполняет_фоновые_операции (на собственном опыте).
У меня вот такой массивчик получился:

type TDLLAccess = record
AType: Integer; // тип доступа
Prm_1: String; // параметр доступа (1)
Prm_2: String; // параметр доступа (2)
Prm_3: String; // параметр доступа (3)
Prm_4: String; // параметр доступа (4)
Prm_5: String; // параметр доступа (5)
Prm_6: String; // параметр доступа (6)
Prm_7: String; // параметр доступа (7)
Prm_8: String; // параметр доступа (8)
end;

type TDLLCmd = record
Cmd: Integer; // команда для модуля
Prm: String; // параметры
end;

type TDLLInfo = record
DLLName: String; // имя файла модуля
DLLCmd: TDLLCmd; // команда
DLLAccess: TDLLAccess; // параметры доступа
Loaded: Boolean; // текущее состояние: загружена
Threaded: Boolean; // текущее состояние: выполняется
MItem: TMenuItem; // пункт меню
DLLh: Integer; // дескриптор DLL
ShowDLLForm : procedure (hW: THandle; OS: TOracleSession;
_AccessType: integer;
_p1, _p2, _p3, _p4,
_p5, _p6, _p7, _p8: PChar;
CBProcAddr: TFarProc;
var LL: boolean; var TT: boolean);
CommandForDLL : procedure (_DLLCmd: integer; var _DLLPrm);
end;

var
DLLInfo: array of TDLLInfo;



Так как у каждого отдельно взятого юзверя модулей немного, то DLL-ки я подключаю при регистрации и не выгружаю их до окончания работы программы. Хотя это и не есть гут :-)
...
Рейтинг: 0 / 0
Ограничения доступа на уровне пользовательского интерфейса
    #32263118
Фотография Desil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея с формами в моем случае абсолютно не подходит, по очень простой причине: на фига заморачиваться. Формы у меня создаются динамически, потому что их немеряно, а юзеров загружать смысла нет. Поэтому разберусь как-нибудь с этой проблемой сама. Большое спасибо за совет!!!
...
Рейтинг: 0 / 0
Ограничения доступа на уровне пользовательского интерфейса
    #32264222
Ray Adams
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делал я подобное для одного проекта , но на меню я не заморачивался и всю проверку посадил в формы. Так как проект был MDI то все формы я наследовал от одной общей формы, где уже был реализован минимальных механизм проверки доступа. Сейчас описывать сложновато будет, надо кучу кода приводить. Но думаю что лучше всего делать именно так. Каждая наследованная форма, переопределяла одну функцию , которая возвращала какоето системное имя формы, класс формы скажем. А сама форма проверяла в базе данных в таблице с пермишынами, имеет ли текущий юзер доступ или нет, елси нет то создание формы не проходило.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ограничения доступа на уровне пользовательского интерфейса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]