• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Knitter

Como implementar toolbars e menus diferentes para utilizadores diferentes.

21 mensagens neste tópico

Boas,

Estou a fazer uma aplicação onde existem diferentes papeis para os utilizadores. Esses papéis irão fazer com que existam menus e barras de ferramentas diferentes. O problema é que não sei como implementar isso correctamente.

Ter 3 toolbars e mostrar uma delas consoante o tipo de utilizador? Mas isso obriga a que existam objectos a mais em memória que não quero ter.

Estou demasiado habituado a Java e não sei como fazer isso minimizando os recursos e o trabalho que tenho a implementar.

Ideias?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se criares as toolbars por código ... não sei se estou a pensar bem mas no VB.net é possivel tipo.. em pseudocódigo

If utilizador1 then

    dim toolbarutilizador1 as toolbar

else if utilizador 2 then

...

end if

deu para perceber? não sei se é um disparate, é só uma sugestão ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o sistema que eu colocava nos meus progs era assim:

base de dados:

no registo do utilizador, tinha um campo "menus" que era texto composto por 0's e1's, correspondendo cada caracter a um dos menus, e em que o 0 correspondia a não ver a opção do menu e 1 ver a opção...

o login na aplicação era feito num splash, antes de criar o form principal da aplicação...

depois, no FormCreate, era só verificar para cada opção do menu se o respectivo caracter no registo do utilizador activo estava a 0 ou a1, fazendo xpto.Visible:= true ou false para cada um...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso implica que o form principal tenha de ter, no meu caso, 3 menus diferentes e 3 toolbars diferentes, e estarem todos activos, apenas não visiveis, durante toda a execução do programa, mesmo que não sejam precisos. Desta forma tenho, pelo menos, 4 objectos que não preciso construídos.

O problema é que estou demasiado habituado a Java, neste caso criava objectos diferentes para tipos diferentes de utilizadores e instanciava apenas o que precisava, podia até destruir o que não precisasse. E através de um simples mecanismo de estados tinha pronto rápidamente.

Mas em Delphi não estou a ver como fazer, criar objectos a partir de componentes visuais é um inferno, não que não o consiga fazer mas tenho coisas mais importantes onde perder o meu tempo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso implica que o form principal tenha de ter, no meu caso, 3 menus diferentes e 3 toolbars diferentes, e estarem todos activos, apenas não visiveis, durante toda a execução do programa, mesmo que não sejam precisos. Desta forma tenho, pelo menos, 4 objectos que não preciso construídos.

O problema é que estou demasiado habituado a Java, neste caso criava objectos diferentes para tipos diferentes de utilizadores e instanciava apenas o que precisava, podia até destruir o que não precisasse. E através de um simples mecanismo de estados tinha pronto rápidamente.

Mas em Delphi não estou a ver como fazer, criar objectos a partir de componentes visuais é um inferno, não que não o consiga fazer mas tenho coisas mais importantes onde perder o meu tempo.

Se der para fazer como eu disse, não é necessário criar tres toolbars não visíveis...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

knitter, desculpa mas só tens 1 menu e 1 toolbar... a unica coisa que varia é a visibilidade de cada opção do menu ou de cada botão da toolbar, consoante o caracter respectivo está em 0 ou 1...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

knitter, desculpa mas só tens 1 menu e 1 toolbar... a unica coisa que varia é a visibilidade de cada opção do menu ou de cada botão da toolbar, consoante o caracter respectivo está em 0 ou 1...

Isso ia dar muito mais trabalho do que ter 3 menus e 3 toolbars...

Porque não fazes o que já foi dito e tu até próprio disseste que se fosse em Java sabias como fazer. É igual... Deves ter a configuração desses menus/toolbars diferente para cada utilizador certo? Logo, só tens de criar o menu/toolbar programaticamente em run-time e não em design-time.

Se não sabes fazer isso em Delphi, já é outro problema. Mas o conceito, já o conheces...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

knitter, desculpa mas só tens 1 menu e 1 toolbar... a unica coisa que varia é a visibilidade de cada opção do menu ou de cada botão da toolbar, consoante o caracter respectivo está em 0 ou 1...

Isso ia dar muito mais trabalho do que ter 3 menus e 3 toolbars...

Porque não fazes o que já foi dito e tu até próprio disseste que se fosse em Java sabias como fazer. É igual... Deves ter a configuração desses menus/toolbars diferente para cada utilizador certo? Logo, só tens de criar o menu/toolbar programaticamente em run-time e não em design-time.

Se não sabes fazer isso em Delphi, já é outro problema. Mas o conceito, já o conheces...

Nazgulled, acabaste de dizer o que eu já disse em duas mensagens :) só que ninguém me liga :D .... bem é isso mesmo não podes fazer em design time , mas sim em run-time.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No caso da visibilidade, o Delphi tem uma pequena desvantagem, que até agora não consegui superar, onde estão os gestores de layout?!

Se coloca um botão aquilo fica fixo no sitio!, eu não quero isso, porque o resultado é que quando activo a visibilidade de um botão ou desactivo os botões não ficam bem posicionados e tenho de andar a mexer em posições, coisa que não quero fazer.

Não tenho configuração diferente, em Java faria um objecto diferente para cada utilizador, esse objecto iria encapsular todos os botões e acções ficando assim o form, genérico, e não ficaria agarrado à implementação das toolbars, nem preso à quantidade de utilizadores e tipo de utilizadores, ficava genérico e podia permitir a adição de outros tipos de utilizadores sem mexer no código do form. Mas em Delphi isso dá imenso trabalho, a programação OO dentro do IDE deixa muito a desejar mas vou experimentar algumas opções e ver no que dá.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, é um trabalho académico para entregar na epoca de exames de Setembro.

Requisitos: Ser em Delphi usando o Turbo Delphi Explorer, usar MSSQL e tecnologia ADO, destes 3 não me consigo livrar, senão já o tinha feito há muito :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para os objectivos da cadeira era a tecnologia que mais se adaptava, tendo em conta que não havia .Net e o Java não tinha ferramentas RAD, actualmente ando a fazer alguma pressão para ver se mudamos para uma tecnolgia RAD diferente, quem sabe para Java, visto que já usamos .Net em outras duas cadeiras. Mas duvido que mudemos tão cedo.

Bem vou ver o que posso fazer com este IDE, não queria entrar pela programação orientada a objectos em delphi por ter alguns pormenores que a tornam lenta de desenvolver e há muitos pontos a ter em atenção e o pior é que só tenho até 3 de Setembro para ter a aplicação completa, vamos ver.

Obrigado pelas respostas, sempre dá para me orientar um pouco.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso ia dar muito mais trabalho do que ter 3 menus e 3 toolbars...

Porque não fazes o que já foi dito e tu até próprio disseste que se fosse em Java sabias como fazer. É igual... Deves ter a configuração desses menus/toolbars diferente para cada utilizador certo? Logo, só tens de criar o menu/toolbar programaticamente em run-time e não em design-time.

Se não sabes fazer isso em Delphi, já é outro problema. Mas o conceito, já o conheces...

e se tiveres 50 utilizadores, em que cada um deles tem as suas permissões no menu? fazes 50 menus diferentes? e se acrescentares mais 5 utilizadores, com permissões diferentes? alteras a aplicação para acrescentares mais 5 menus?

do modo que eu disse, podes ter 50000 utilizadores, cada um deles com as suas permissões de menus, que o menu é sempre o mesmo... simplesmente ou aparecem as opções a que o utilizador tem acesso ou não...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Essa é +/- a forma como estou a pensar, mas nos testes que fiz deparei-me com um problema que não sei como ultrapassar sem ser mexer em posições.

No caso dos menus não há problema, mas no caso dos botões da toolbar, os botões ou aparecem sobrepostos e só se vê o último ou aparecem buracos no meio dos botões que representam os botões em falta. Esses pormenores visuais é que não sei ainda como resolver, mas não perdi muito tempo com isso, só experimentei para ver como funcionava. Possívelmente a toolbar pode desaparecer, ainda não comecei a desenhar a interface.

Outro problema que agora me lembrei, o código para os botões/menus, seja como for, se aparecerem mais perfis de utilizadores terei sempre de alterar o código para acrescentar os eventos dos novos botões, acaba por ser igual.

Se fosse em Java, usava um padrão de desenho destina a resolver a estes problemas, e o código do evento ia com o objecto não fica agarrado ao form, podia acrescentar quantos botões/menus/perfis de utilizador quisesse que não mexia no form. Mas acho que estou a complicar mais do que devia, vou começar a desenhar a interface amanhã, nessa altura verei como faço a questão dos menus.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como eu costumo fazer, em design mode as posições dos botões não interessam... em runtime, se o botão é visivel, a posição dele é incrementada em relação ao ultimo visivel... assim, nunca ficam buracos...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@marinheiro

Desculpa la, mas isso pa mim é pior... Em termos de programação. Vais ter um switch com 50 cases a perguntar quem é o utilizador e depois esconderes os items que não precisas?

E eu nunca disse que fazer 50 menus diferentes era o ideal e esconder os que não se precisa, tanto essa solução como a tua, são perdas de tempo na minha opinião. E soluções que eu nunca na vida iria optar. Para mim, a úncia solução em condições é ter algum tipo de ficheiro de configuração (xml por exemplo) onde esteja definida cada toolbar/menu para cada utilizador e depois, cria-las programaticamente, existindo apenas uma toolbar e um menu e nenhum deles vai ter items a mais escondidos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só posso chegar a uma conclusão: ainda não percebeste rigorosamente nada do que eu disse anteriormente... a solução que tu propões é exactamente o que eu tenho estado a escrever até agora... a diferença é que tu queres usar um ficheiro de configuração e eu utilizo um campo no ficheiro de utilizadores...

mas eu repito o que escrevi anteriormente:

quando o utilizador faz o login, é lido o campo "menus" do seu registo e aí acaba a ligação com os utilizadores... depois, se só tiveres 10 opções no menu, só tens 10 if's, se tiveres 30, tens 30 if's, independentemente do numero de utilizadores, sejam eles 2 ou 50000...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

quando o utilizador faz o login, é lido o campo "menus" do seu registo e aí acaba a ligação com os utilizadores... depois, se só tiveres 10 opções no menu, só tens 10 if's, se tiveres 30, tens 30 if's, independentemente do numero de utilizadores, sejam eles 2 ou 50000...

Isto não tem nada a ver com o que eu propôs, porque como tu dizes, 10 opões, 10 ifs. O que eu propos, n interessa se são 5 ou 500 opções. O código vai ser o mesmo. E dessa forma acabas por limitar a 10 opções especificas do menu, o menu nunca será totalmente costumizavel. Claro que isso depende do objectivo final, mas para mim, ter ifs necessários para cada opção do menu, é um bocado estúpido. Mas é só a minha opinião.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

então sou eu e grande parte dos programadores de softwares de gestão que somos estúpidos...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se calhar :P

Desculpa la, mas isso que disseste versus ter num ficheiro a configuração da toolbar/menu para cada utilizador e basicamente o que precisas é construir o menu/toolbar programaticamente, algo que tu tens de fazer de qualquer maneira (com ferramentas visuais ou não). Prefiro a minha solução. Ter ifs para cada opção, quando podes ter tudo pre-configurado num ficheiro e pasta criares à medida dessa configuração, acho um bocado parvo. Acho que tenho direito a ter a minha opinião...

É a mesma coisa que existir um determinado valor de 1 a 100 para cada utilizador. Se isso tiver guardado num ficheiro (por exemplo), basta carregar o valor e já está. Tu tas a propor perguntar se o utilizador quer o valor 1, 2, 3, 4, 5... ate 100. Prefiro a minha solução...

Imagina um XML tipo:

<items>
<item show="false">Item 1</item>
<item show="true">Item 2</item>
<item show="true">Item 3</item>
</items>

Bastava iterares os items e criares apenas o item 2 e 3. Porque razão havias de ter um if para cada item a perguntar se determinado utilizador quer ter este item visivel ou não? Basta usar o valor dali e criar o menu programaticamente. Eu prefiro assim e se fosse eu fazia assim. Não ia criar os items todos e depois perguntar para cada um deles se era suposto estar lá ou não.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora