Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.22;
Скачать: CL | DM;

Вниз

Пользовательский интерфейс   Найти похожие ветки 

 
Knight ©   (2009-09-21 21:35) [0]

Подскажите, где почитать про реализацию различных пользовательских интерфейсов в одной программе для различных пользовательских групп. Т.е. чтобы после авторизации, убирались лишние пункты меню, столбцы таблиц и т.п.. С компонентами у которых есть Name и Visible, в общем понятно... найти по имени и установить видимость. Упёрся в TActiveMainMenuBar (на коллекциях) и в TListView (на TStrings).


 
Knight ©   (2009-09-21 21:38) [1]

Данные об элементах интерфейса должны храниться в базе.


 
Knight ©   (2009-09-21 22:32) [2]

По TListView есть такая мысль, что занести в базу все наименования столбцов и имена полей таблиц, из которых в них заносятся данные, и привязать их к id группы пользователей. В начале работы подгружать их и добавлять в ListView, занося индексы в массив. И через эти индексы формировать запросы к БД, выводить данные в столбцы. Мутно описал... Пока ещё сам полностью не понял :)


 
DVM ©   (2009-09-21 22:38) [3]


> С компонентами у которых есть Name и Visible, в общем понятно.
> .. найти по имени и установить видимость.

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


 
Knight ©   (2009-09-21 22:53) [4]

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


 
Knight ©   (2009-09-21 22:55) [5]

Права контролирует сервер... и если что-то включить (хотя это сделать некому), то сервер всё-равно пошлёт... надо клиенты настроить, для удобной работы специалиста.


 
Knight ©   (2009-09-21 22:56) [6]

Хочется вариант попроще... пока всё какие-то монстрообразные навороты в голову приходят :)


 
DVM ©   (2009-09-21 23:33) [7]


> Knight ©

Кстати, я че-то не понял в чем проблема с ListView то?


 
Knight ©   (2009-09-21 23:38) [8]

Там у столбцов нет Visible, т.е. надо как-то привязывать вывод данных к индексу столбца через какой-то идентификатор... как я думаю.. хотя мож думаю не верно.


 
DVM ©   (2009-09-22 00:34) [9]


> Knight ©

Столбцам обычно нулевую ширину ставят. И не дают их растянуть обратно.


 
Knight ©   (2009-09-22 10:06) [10]

А как не давать их растянуть? И именно их... может другой столбец в ноль сдвинут, а обратно не раздвинут :)


 
Kolan ©   (2009-09-22 11:08) [11]

Knight, сначала нужно убедится что разделение на группы действительно нужно. Перечислите группы и преведите скриншоты.

Чисто технически я решаю подобную задачу с помошью перспектив. Перспективы — это такие объекты, которые хранят настройки интерфейса и применяются когда нужно.


 
DVM ©   (2009-09-22 12:06) [12]


> Knight ©

Если допустимо использовать сторонние компоненты, то Virtual ListView скорее всего позволяет скрывать столбцы. В нем вообще есть все, что только можно нафантазировать.


 
clickmaker ©   (2009-09-22 13:30) [13]

> [8] Knight ©   (21.09.09 23:38)

ну так можно же в рантайме столбцы добавлять


 
Knight ©   (2009-09-22 16:08) [14]

Сделал генерацию таблиц в рантайме... вроде работает, только пришлось сделать один костыль, т.к. не нашёл как обновить ListView, чтобы растянулась колонка с Autosize=True. Ни рефреши, ни репаинты, ни апдейты не возымели никакого действия, поэтому пришлось сделать

Width:=Width+1

:)

Теперь думаю, как завязать вывод данных на выборку из базы, пока взял TStringList и добавляю в него идентификаторы, вместе с добавлением столбцов. Т.е. надеюсь, что получится, типа следующего.

Отправка запроса серверу на данные с перечнем идентификаторов, постороение SQL-запроса, где выходные поля будут в том-же порядке, что и в списке. Отправка значений клиенту через разделитель #13#10, а тот присваивает это значение lv_Groups.Items[...].SubItems.Text

Вроде бы, дёшего и сердито %)


 
StriderMan ©   (2009-09-22 17:54) [15]

я для такой задачи снабдил все формы базовым классом. В нем в OnShow вызывается виртуальный метод, который прячет контролы. в наследниках соответственно указываются конкретные контролы. Со списком конечно красивее и централизованнее, но возникает ряд вопросов:
1. на разных формах контролы могут иметь одинаковое имя, придется дополнять именем формы и парсить потом.
2. При показе каждой формы придется весь список пробегать в поисках специфичных контролов. На тысячах контролов это заметно тормозит.
3. Связка по имени не строгая, кто-нибудь переименует и все поломается



Страницы: 1 вся ветка

Текущий архив: 2009.11.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
2-1254987980
Morgan128
2009-10-08 11:46
2009.11.22
Цикл и активная программа


4-1222062804
Riply
2008-09-22 09:53
2009.11.22
kernel-mode и потоко-безопасный лог.


4-1222287501
MasDen
2008-09-25 00:18
2009.11.22
Действия после закрытия окна


2-1254679489
bodun
2009-10-04 22:04
2009.11.22
Нужна функция выполняющая тоже, что и Pack на Perl


2-1255156605
Aleks
2009-10-10 10:36
2009.11.22
Как программно добавить иконку в ImageList?