fajo Postado Maio 28, 2007 Denunciar Share Postado Maio 28, 2007 Olá,eu tenho uma rotina que uso pra desabilitar ou habilitar os botões de acesso aos forms de acordo com as permissões do usuário que é assim:If (Form.Components Is TSpeedButton) Then (Form.Components As TSpeedButton).Enabled := (Locate('IdItem', (Form.Components As TSpeedButton).Tag, [])) Or ((Form.Components As TSpeedButton).Tag = 0);só que estou querendo trocar os botões e menus por um componente Raize, o RzGroup, e o código segue a mesma lógica:If (Form.Components Is TRzGroupItem) Then (Form.Components As TRzGroupItem).Enabled := (Locate('IdItem', (Form.Components As TRzGroupItem).Tag, [])) Or ((Form.Components As TRzGroupItem).Tag = 0);só que na hora da compilação dá o seguinte erro:[DCC Error] UDMAutenticacao.pas(68): E2010 Incompatible types: 'TRzGroupItem' and 'TComponent'porque que ocorre o erro com o RzGroupItem e com o SpeedButtom não? e como corrigí-lo?Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Maio 29, 2007 Denunciar Share Postado Maio 29, 2007 OpaTeria que testar pra conseguir fazer funcionar mais tente assim, "talvez" funcione...If (Form.Components Is TRzGroupItem) ThenTRzGroupItem(Form.Components).Enabled :=(Locate('IdItem', TRzGroupItem(Form.Components).Tag, [])) Or (TRzGroupItem(Form.Components).Tag = 0);abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fajo Postado Maio 29, 2007 Autor Denunciar Share Postado Maio 29, 2007 Churc,acho que está no caminho certono código:If (Form.Components Is TRzGroupItem) Then (Form.Components As TRzGroupItem).Enabled :=(Locate('IdItem', (Form.Components As TRzGroupItem).Tag, [])) Or ((Form.Components As TRzGroupItem).Tag = 0);o erro : [DCC Error] UDMAutenticacao.pas(68): E2010 Incompatible types: 'TRzGroupItem' and 'TComponent'acontece 3 vezes, ou seja onde tem "Form.Components Is TRzGroupItem","Form.Components As TRzGroupItem","Form.Components As TRzGroupItem"já no seu código:If (Form.Components Is TRzGroupItem) Then TRzGroupItem(Form.Components).Enabled := (Locate('IdItem', TRzGroupItem(Form.Components).Tag, [])) Or (TRzGroupItem(Form.Components).Tag = 0);só acontece um erro: [DCC Error] UDMAutenticacao.pas(68): E2010 Incompatible types: 'TRzGroupItem' and 'TComponent'e é exatamente na 1ª linha, onde tem: Form.Components Is TRzGroupItem;tá perto!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Maio 29, 2007 Denunciar Share Postado Maio 29, 2007 OpaHmm eu teria que ter este componente pra testar, não sei como verificar otype cast de outra forma, acha que se usar o "=" ele vai dar o mesmo erro...Mas pra resolver o seu problema, vai uma idéia, depois se achar outra maneirausando type cast não vai te prejudicar em nada...A idéia é, porque você não classifica os componentes Rz com números em suastags, exemploVamos supor que tenha 3 componentes do tipo RzTRzEdit - pra "todos" os TRzEdits coloque a tag 6550TRzGroupItem - pra "todos" os TRzGroupItems coloque a tag 6551TRzButton - pra "todos" os TRzButtons coloque a tag 6552Ai depois você pode fazercase Components.Tag of6550: é um TRzEdit;6551: é um TRzGroupItem;6552: é um TRzButton;elseif (Components is TSpeedButton) then...end;É só uma idéia pra você ir adiantando, depois se encontrar forma melhor só trocar ocódigo nem nas tags não vai precisar mexer porque não vai mudar nada... a menosque você as use...Capaz que fique ainda mais rápido do que comparar tipos rsr, mas é imperceptível...abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 29, 2007 Denunciar Share Postado Maio 29, 2007 Churc esse lance do utilizar a Tag seria uma saída, mas o colega fajo já utiliza esta propriedade para outra finalidade.A questão de erro no teste:If (Form.Components Is TRzGroupItem) Thenpode ser contornada através da verificação via método ClassName:If (Form.Components.ClassName = 'TRzGroupItem') ThenDepois, o type-cast é desse jeito mesmo que você colocou:TRzGroupItem(Form.Components).... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Maio 29, 2007 Denunciar Share Postado Maio 29, 2007 Boaa Micheus nem lembrava dessa auhau ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fajo Postado Maio 29, 2007 Autor Denunciar Share Postado Maio 29, 2007 Obrigado Micheus, pela dica, value mesmo, e a você Churc, também meu muito obrigado, o problema agora é que acho que a classe não está sendo reconhecida, vou colocar o procedimento todo:Procedure TDMAutenticacao.AutenticaMenus(IdSistema, IdUsuario: Integer; Form : TForm);Var I : Integer;Begin With cdsPermissoes Do Begin If Active Then Close; Params.ParamByname('IdUsuario').Value := IdUsuario; Params.ParamByname('IdSistema').Value := IdSistema; Open; For I := 0 To Form.ComponentCount - 1 Do Begin If (Form.Components Is TMenuItem) Then (Form.Components As TMenuItem).Enabled := (Locate('IdItem', (Form.Components As TMenuItem).Tag, [])) Or ((Form.Components As TMenuItem).Tag = 0); If (Form.Components Is TSpeedButton) Then (Form.Components As TSpeedButton).Enabled := (Locate('IdItem', (Form.Components As TSpeedButton).Tag, [])) Or ((Form.Components As TSpeedButton).Tag = 0); If (Form.Components.ClassName = 'TRzGroupItem') Then TRzGroupItem(Form.Components).Enabled := (Locate('IdItem', TRzGroupItem(Form.Components).Tag, [])) Or (TRzGroupItem(Form.Components).Tag = 0); End; Close; End;End;quando o item é um menu ele entra no 1º if habilitando ou desabilitando os menus, quando o item é um SpeedButton, ele entra no 2º if, habilitando ou desabilitando os botões, mas, não entra no 3º if, como se não tivesse esse componente!!!alguma sugestão?Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Maio 30, 2007 Denunciar Share Postado Maio 30, 2007 OpaOlha ultimamente ando tão passado que fui dar a dica do TAG sendo queclaramente no seu código dava pra ver que você já usa pra outra finalidadeIAUHEAUmas ai tenta assimIf (Form.Components Is TRzGroup) ThenTRzGroup(Form.Components).Enabled :=(Locate('IdItem', TRzGroup(Form.Components).Tag, [])) Or (TRzGroup(Form.Components).Tag = 0);ouIf (Form.Components.ClassName = 'TRzGroup') ThenTRzGroup(Form.Components).Enabled :=(Locate('IdItem', TRzGroup(Form.Components).Tag, [])) Or (TRzGroup(Form.Components).Tag = 0);Visto que pelo que parece o componente em si é TRzGroup e TRzGroupItem éapenas um item do TRzGroup e é claro que não poderia ser comparado comoum componente rsrSe não for TRzGroup, troque pelo nome da Classe do componente em si exemploTRzGroupBox... não conheço esse set de componentes :|abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fajo Postado Maio 30, 2007 Autor Denunciar Share Postado Maio 30, 2007 Continua na mesma! E acho que TRzGroupItem é um componente senão o TMenuItem também não seria Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Maio 30, 2007 Denunciar Share Postado Maio 30, 2007 OpaÉ faz sentido sim, se o problema não for de "case sensitive" no nome da Classeentão eu já não sei mais como te ajudar, espero que outros saibam...If (LowerCase(Form.Components.ClassName) = 'trzgroupitem') Then...Talvez não tenha a ver, mas se fosse comigo eu tentaria de todas as formas possíveis rsabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 30, 2007 Denunciar Share Postado Maio 30, 2007 Acredito que não seja uma questão de "case sensitive", mas nada impede que seja feita a conversão para minúscula ou maiúscula.Visto que pelo que parece o componente em si é TRzGroup e TRzGroupItem é apenas um item do TRzGroup e é claro que não poderia ser comparado como um componente rsrChur, essa é uma boa obsevação. Como é um componente de terceiro, nada impede que ele tenha sido programado de uma forma um pouco diferente do que se está acostumado.A pergunta é: fajo, no seu form, onde ficam as declarações dos componentes adicionados a ele, existe alguma referência a componentes do tipo TRzGroupItem? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fajo Postado Junho 3, 2007 Autor Denunciar Share Postado Junho 3, 2007 Tem não Micheus, só aparece os grupos, RzGroup1, etc..., dentro dos grupos é que estão os itens!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Junho 3, 2007 Denunciar Share Postado Junho 3, 2007 Tem não Micheus, só aparece os grupos, RzGroup1, etc..., dentro dos grupos é que estão os itens!!Era bem a resposta que estava esperando. :DPelo que dá para ver no site da Raize, este seu TRzGroup deve ser um dos componentes similares ao TRadioGroup. Se for isto mesmo, parece-me que estes seu TRzGroupItem devam ser "armazenados" em uma propriedade tipo a Items. Voce já verificou isto?Porque se for, você terá que gravar/procurar no seu controle de acesso, a referência ao TRzGroup e qual o item dele você quer habilitar/desabilitar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
fajo
Olá,
eu tenho uma rotina que uso pra desabilitar ou habilitar os botões de acesso aos forms de acordo com as permissões do usuário que é assim:
If (Form.Components Is TSpeedButton) Then
(Form.Components As TSpeedButton).Enabled :=
(Locate('IdItem', (Form.Components As TSpeedButton).Tag, [])) Or ((Form.Components As TSpeedButton).Tag = 0);
só que estou querendo trocar os botões e menus por um componente Raize, o RzGroup, e o código segue a mesma lógica:
If (Form.Components Is TRzGroupItem) Then
(Form.Components As TRzGroupItem).Enabled :=
(Locate('IdItem', (Form.Components As TRzGroupItem).Tag, [])) Or ((Form.Components As TRzGroupItem).Tag = 0);
só que na hora da compilação dá o seguinte erro:
[DCC Error] UDMAutenticacao.pas(68): E2010 Incompatible types: 'TRzGroupItem' and 'TComponent'
porque que ocorre o erro com o RzGroupItem e com o SpeedButtom não? e como corrigí-lo?
Obrigado
Link para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.