Problema com função publica.
Função que usos para tratar os botões do formulário frmNivelServico.
function TrataBotoes(Botao:String): String;
begin
with frmNivelServico do
begin
if Botao = ´frm´ then
begin
// Botoes
btbtnGravar.Enabled := False;
btbtnNovo.Enabled := True;
btbtnCancelar.Enabled := False;
btbtnExcluir.Enabled := True;
btbtnSair.Enabled := True;
btbtnPrimeiro.Enabled := True;
btbtnAnterior.Enabled := True;
btbtnProximo.Enabled := True;
btbtnUltimo.Enabled := True;
// Botoes fim
end;
end;
end;
Gostaria que todos os formulários usasem esta função então a mudei um pouco.
function TrataBotoes(Botao:String,Frm : TForm): String;
begin
with frm do
begin
if Botao = ´frm´ then
begin
// Botoes
btbtnGravar.Enabled := False;
btbtnNovo.Enabled := True;
btbtnCancelar.Enabled := False;
btbtnExcluir.Enabled := True;
btbtnSair.Enabled := True;
btbtnPrimeiro.Enabled := True;
btbtnAnterior.Enabled := True;
btbtnProximo.Enabled := True;
btbtnUltimo.Enabled := True;
// Botoes fim
end;
end;
Como paço para tornar esta função pubica e todos os formulários do projeto à usarem.
O problema é que com a mudança da função o delphi não reconhece os nomes dos botões
e não compila.
Obrigado pela atenção.
function TrataBotoes(Botao:String): String;
begin
with frmNivelServico do
begin
if Botao = ´frm´ then
begin
// Botoes
btbtnGravar.Enabled := False;
btbtnNovo.Enabled := True;
btbtnCancelar.Enabled := False;
btbtnExcluir.Enabled := True;
btbtnSair.Enabled := True;
btbtnPrimeiro.Enabled := True;
btbtnAnterior.Enabled := True;
btbtnProximo.Enabled := True;
btbtnUltimo.Enabled := True;
// Botoes fim
end;
end;
end;
Gostaria que todos os formulários usasem esta função então a mudei um pouco.
function TrataBotoes(Botao:String,Frm : TForm): String;
begin
with frm do
begin
if Botao = ´frm´ then
begin
// Botoes
btbtnGravar.Enabled := False;
btbtnNovo.Enabled := True;
btbtnCancelar.Enabled := False;
btbtnExcluir.Enabled := True;
btbtnSair.Enabled := True;
btbtnPrimeiro.Enabled := True;
btbtnAnterior.Enabled := True;
btbtnProximo.Enabled := True;
btbtnUltimo.Enabled := True;
// Botoes fim
end;
end;
Como paço para tornar esta função pubica e todos os formulários do projeto à usarem.
O problema é que com a mudança da função o delphi não reconhece os nomes dos botões
e não compila.
Obrigado pela atenção.
Ullrich
Curtidas 0
Respostas
Rjun
24/02/2006
Utilize POO. Crie um form base com esses botões e use herança com os outros forms do seu projeto.
GOSTEI 0
Ullrich
24/02/2006
Muito bom, estou feliz em saber que da certo. mas tem um probleminha.
? ? ? Como se faz isso ? ? ?
Utilize POO. Crie um form base com esses botões e use herança com os outros forms do seu projeto.
? ? ? Como se faz isso ? ? ?
Se puder me enviar um exemplo simples maycon123@hotmail.com ficaria muitissimo grato, pois sou iniciante, e só aqui consigo ajuda.
Prometo postar aqui a resolução do meu problema, para beneficio de todos.
? ? ? Como se faz isso ? ? ?
Utilize POO. Crie um form base com esses botões e use herança com os outros forms do seu projeto.
? ? ? Como se faz isso ? ? ?
Se puder me enviar um exemplo simples maycon123@hotmail.com ficaria muitissimo grato, pois sou iniciante, e só aqui consigo ajuda.
Prometo postar aqui a resolução do meu problema, para beneficio de todos.
GOSTEI 0
Rjun
24/02/2006
Veja se esse [url=http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=336&mode=thread&order=0&thold=0]artigo[/url] ajuda você.
GOSTEI 0
Martins
24/02/2006
Muito bom, estou feliz em saber que da certo. mas tem um probleminha.
? ? ? Como se faz isso ? ? ?
Utilize POO. Crie um form base com esses botões e use herança com os outros forms do seu projeto.
? ? ? Como se faz isso ? ? ?
Se puder me enviar um exemplo simples maycon123@hotmail.com ficaria muitissimo grato, pois sou iniciante, e só aqui consigo ajuda.
Prometo postar aqui a resolução do meu problema, para beneficio de todos.
Como dito pelo nobre colega [color=darkblue:bcf38cf792][b:bcf38cf792]RJun[/b:bcf38cf792][/color:bcf38cf792], vc pode criar um form com essa função, um form q servirá de base para os outros, sendo assim todos os outros forms q forem criados com a finalidade de usar esses botões devem ser herdados desse form principal, crie um Form com as funções depois vá [b:bcf38cf792]New - Other[/b:bcf38cf792] e procure por seu form principal em[b:bcf38cf792] Project1[/b:bcf38cf792], deve está marcada a opção [b:bcf38cf792]InHerit[/b:bcf38cf792].
Boa sorte!!
GOSTEI 0
Ullrich
24/02/2006
Criei uma unit sem form.
Criei estas variaveis e compilo tranquilamente.
var
btbtnNovo, btbtnCancelar, btbtnExcluir,btbtnGravar : TButton;
btbtnSair,btbtnPrimeiro,btbtnAnterior, btbtnAlterar : TButton;
btbtnProximo, btbtnUltimo : TButton;
porem quando chega nesta linha o programa trava, com a mensagem:
Access violation ar address 004B33834 modulo ´projeto.exe´ Read of address 0000000´
with frm do
begin
if Botao = ´frm´ then
begin
// Botoes
btbtnGravar.Enabled := False; < --- Trava nesta linha. -------
btbtnNovo.Enabled := True;
btbtnCancelar.Enabled := False;
btbtnExcluir.Enabled := True;
btbtnSair.Enabled := True;
btbtnPrimeiro.Enabled := True;
btbtnAnterior.Enabled := True;
btbtnProximo.Enabled := True;
btbtnUltimo.Enabled := True;
// Botoes fim
end;
end;
Parece que o delphi não entende que é para concatenar o (frm: Tform) com
o (btbtnGravar: TButton) e alterar a prorpiedade do botão.
Como faço para resolver este problema?
Obeigado pela atenção.
Criei estas variaveis e compilo tranquilamente.
var
btbtnNovo, btbtnCancelar, btbtnExcluir,btbtnGravar : TButton;
btbtnSair,btbtnPrimeiro,btbtnAnterior, btbtnAlterar : TButton;
btbtnProximo, btbtnUltimo : TButton;
porem quando chega nesta linha o programa trava, com a mensagem:
Access violation ar address 004B33834 modulo ´projeto.exe´ Read of address 0000000´
with frm do
begin
if Botao = ´frm´ then
begin
// Botoes
btbtnGravar.Enabled := False; < --- Trava nesta linha. -------
btbtnNovo.Enabled := True;
btbtnCancelar.Enabled := False;
btbtnExcluir.Enabled := True;
btbtnSair.Enabled := True;
btbtnPrimeiro.Enabled := True;
btbtnAnterior.Enabled := True;
btbtnProximo.Enabled := True;
btbtnUltimo.Enabled := True;
// Botoes fim
end;
end;
Parece que o delphi não entende que é para concatenar o (frm: Tform) com
o (btbtnGravar: TButton) e alterar a prorpiedade do botão.
Como faço para resolver este problema?
Obeigado pela atenção.
GOSTEI 0
Rjun
24/02/2006
Bom, pelo jeito o artigo não foi util.
Com certeza, não é só o Delphi que não entende...
Se você quer realmente fazer esse tipo de função, então vai.
Parece que o delphi não entende que é para concatenar o (frm: Tform) com o (btbtnGravar: TButton) e alterar a prorpiedade do botão.
Com certeza, não é só o Delphi que não entende...
Se você quer realmente fazer esse tipo de função, então vai.
procedure Absurdo(Form: TForm); begin (Form.FindComponent(´btnGravar´) as TButton).Enabled := false; (Form.FindComponent(´btnNovo´) as TButton).Enabled := true; ....resto do código end;
GOSTEI 0
Ullrich
24/02/2006
Meu amigo Rjun, muito obrigado pela dica, porem gostaria que não fosse tão infeliz em seus comentários...
Gostaria muito de ter os seus conhecimentos, e quando os tiver, tenho certeza que não vou fazer piadinhas com pessoas que estão presisando de mim.
Obrigado pela sua atenção.
Com certeza, não é só o Delphi que não entende...
procedure Absurdo(Form: TForm);
Gostaria muito de ter os seus conhecimentos, e quando os tiver, tenho certeza que não vou fazer piadinhas com pessoas que estão presisando de mim.
Obrigado pela sua atenção.
GOSTEI 0
Marco Salles
24/02/2006
entuitivamente , pela natureza dos nomes dos botoes que voce passou , serem os mesmo nos vários formulários , a indicação de POO é mais do que natural...
Porem pude perceber que a sua dúvida vai aquem de POO
mesmo que voce utilize a herança visual , voce tem que saber escrever o método. [b:306f73ce7e]Isso é ponto[/b:306f73ce7e]
:idea: :idea: :idea:
primeiro recomendo que voce não trabalhe com os [b:306f73ce7e]nomes[/b:306f73ce7e] dos buttoes para esta finalidade .. O trabalho é muito maior , alem do mais voce é obrigado a ter os mesmos nomes em todos os formularios que usufruirem desse metodo
então existe uma [b:306f73ce7e]propriedade tag [/b:306f73ce7e](ver objecto inspector) que pode ser facilmente uzada para selecionar o que se quer daquilo que não se quer
e o método geral pode ser escrito dessa forma
[b:306f73ce7e]atende que nesse caso eu especifiquei o tag dos botoes igua a [b]UM[/b:306f73ce7e] ...Para que fiquem habilitados ou desabilitados.. E claro que previamente eu alterei esse valor no objeto inspector dos referidos botoes [/b]
Porem pude perceber que a sua dúvida vai aquem de POO
o que voce quer é um método gennerico que iniba os botoes de um formulário , e que esse método seje generico , para que voce não o tenha que escrever repitidamente no seu código
mesmo que voce utilize a herança visual , voce tem que saber escrever o método. [b:306f73ce7e]Isso é ponto[/b:306f73ce7e]
:idea: :idea: :idea:
primeiro recomendo que voce não trabalhe com os [b:306f73ce7e]nomes[/b:306f73ce7e] dos buttoes para esta finalidade .. O trabalho é muito maior , alem do mais voce é obrigado a ter os mesmos nomes em todos os formularios que usufruirem desse metodo
então existe uma [b:306f73ce7e]propriedade tag [/b:306f73ce7e](ver objecto inspector) que pode ser facilmente uzada para selecionar o que se quer daquilo que não se quer
e o método geral pode ser escrito dessa forma
procedure Habilitar(chave:boolean;formulario:Tform); var i:integer; begin for i:=0 to formulario.ComponentCount -1 do if formulario.Components[i] is tbutton then if Tbutton(formulario.Components[i]).tag = 1 then Tbutton(formulario.Components[i]).enabled := chave; end;
para habilitar e so chamar Habilitar(true,NomeDoSeuFormulario)
para desabilitar Habilitar(false,NomeDoSeuFormulario)
[b:306f73ce7e]atende que nesse caso eu especifiquei o tag dos botoes igua a [b]UM[/b:306f73ce7e] ...Para que fiquem habilitados ou desabilitados.. E claro que previamente eu alterei esse valor no objeto inspector dos referidos botoes [/b]
GOSTEI 0
Ullrich
24/02/2006
:P
Ficou D ++++
Agora com apenas uma função posso trabalhar os botões de todo o projeto. Muito bom mesmo, era isso que eu queria...
Muito obrigado pela dica Sr. Marco Salles, tem tanta coisa que eu quero aprender e todo dia aprendo uma nova, graças a pessoas como você, meus sinceros agradecimentos.
Sr. Rjum e Sr. Martins desculpe-me, acho que não fui bem claro com minhas dúvidas, é meio dífissil para mim, que não tenho muita pratica, saber como pedir alguma coisa, mesmo assim obrigado pela colaboração.
Aqui está a função, acho que podemos melhora-la, pois mudando o nª da TAG de cada componente que pretendemos alterar, acho que não é necessário um laço. Se alguem tiver uma idéia para aperfeisoar, serei muito grato.
De qualquer forma, ela funcionou muito bem desse jeito.
function TrataBotoes(Botao:String; frm: TForm): String;
var
i : Integer;
begin
if Botao = ´frm´ then
begin
for i:=0 to frm.ComponentCount -1 do
begin
if frm.Components[i] is tbutton then
if Tbutton(frm.Components[i]).Tag = 1 then // btbtnGravar
Tbutton(frm.Components[i]).enabled := False;
if Tbutton(frm.Components[i]).tag = 2 then // btbtnNovo
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 3 then // btbtnAlterar
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 4 then // btbtnCancelar
Tbutton(frm.Components[i]).enabled := False;
if Tbutton(frm.Components[i]).tag = 5 then // btbtnExcluir
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 6 then // btbtnSair
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 7 then // btbtnPrimeiro
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 8 then // btbtnAnterior
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 9 then // btbtnProximo
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 10 then // btbtnUltimo
Tbutton(frm.Components[i]).enabled := True;
end;
end;
Para chamar o procedimento use:
TrataBotoes(´frm´,TForm(frmCliente));
Agradeço a todos pela atenção.
Ficou D ++++
Agora com apenas uma função posso trabalhar os botões de todo o projeto. Muito bom mesmo, era isso que eu queria...
Muito obrigado pela dica Sr. Marco Salles, tem tanta coisa que eu quero aprender e todo dia aprendo uma nova, graças a pessoas como você, meus sinceros agradecimentos.
Sr. Rjum e Sr. Martins desculpe-me, acho que não fui bem claro com minhas dúvidas, é meio dífissil para mim, que não tenho muita pratica, saber como pedir alguma coisa, mesmo assim obrigado pela colaboração.
Aqui está a função, acho que podemos melhora-la, pois mudando o nª da TAG de cada componente que pretendemos alterar, acho que não é necessário um laço. Se alguem tiver uma idéia para aperfeisoar, serei muito grato.
De qualquer forma, ela funcionou muito bem desse jeito.
function TrataBotoes(Botao:String; frm: TForm): String;
var
i : Integer;
begin
if Botao = ´frm´ then
begin
for i:=0 to frm.ComponentCount -1 do
begin
if frm.Components[i] is tbutton then
if Tbutton(frm.Components[i]).Tag = 1 then // btbtnGravar
Tbutton(frm.Components[i]).enabled := False;
if Tbutton(frm.Components[i]).tag = 2 then // btbtnNovo
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 3 then // btbtnAlterar
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 4 then // btbtnCancelar
Tbutton(frm.Components[i]).enabled := False;
if Tbutton(frm.Components[i]).tag = 5 then // btbtnExcluir
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 6 then // btbtnSair
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 7 then // btbtnPrimeiro
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 8 then // btbtnAnterior
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 9 then // btbtnProximo
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 10 then // btbtnUltimo
Tbutton(frm.Components[i]).enabled := True;
end;
end;
Para chamar o procedimento use:
TrataBotoes(´frm´,TForm(frmCliente));
Agradeço a todos pela atenção.
GOSTEI 0
Marco Salles
24/02/2006
Aqui está a função, acho que podemos melhora-la, pois mudando o nª da TAG de cada componente que pretendemos alterar, acho que não é necessário um laço. Se alguem tiver uma idéia para aperfeisoar, serei muito grato.
veja , voce não precisa ter varios valores diferentes de tag para cada componente... se o objetivo dele e so inibir ou desabitar então deixe todos desse grupo com o mesmo valor do tag.. Logo a função original que lhe passei tem o mesmo efeito que a sua
procedure Habilitar(chave:boolean;formulario:Tform); var i:integer; begin for i:=0 to formulario.ComponentCount -1 do if formulario.Components[i] is tbutton then if Tbutton(formulario.Components[i]).tag = 1 then Tbutton(formulario.Components[i]).enabled := chave; end;
os demais bottoes do formulario que tem o valor de tag diferentes de um , não são afetados pelo código...e so isso
GOSTEI 0
Ullrich
24/02/2006
Você está certo, porem veja isto:
Quando o usuario clicar no Botão Cancelar (On-click)
BotaoGravar := Desabilita.
BotaoNovo := Abilita.
BotaoEditar := Abilita.
BotaoCancelar := Desabilita.
BotaoExcluir := Abilita.
BotaoSair := Abilita.
if Tbutton(frm.Components[i]).Tag = 1 then // btbtnGravar <- Desa.
Tbutton(frm.Components[i]).enabled := False;
if Tbutton(frm.Components[i]).tag = 2 then // btbtnNovo <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 3 then // btbtnAlterar <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 4 then // btbtnCancelar <- Desa.
Tbutton(frm.Components[i]).enabled := False;
if Tbutton(frm.Components[i]).tag = 5 then // btbtnExcluir <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 6 then // btbtnSair <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 7 then // btbtnPrimeiro <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 8 then // btbtnAnterior <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 9 then // btbtnProximo <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 10 then // btbtnUltimo <- Abilita
Tbutton(frm.Components[i]).enabled := True;
Entendeu, No seu modo, eu posso abilitar todos os botões ou desabilitar todos os botões, todos de uma só vez, entretanto eu preciso abilitar algums e desabilitar outros, por isso ´dei´ um numero de TAG para cada um e posso manipular com o seu procedimento.
Abraços e obrigado.
Quando o usuario clicar no Botão Cancelar (On-click)
BotaoGravar := Desabilita.
BotaoNovo := Abilita.
BotaoEditar := Abilita.
BotaoCancelar := Desabilita.
BotaoExcluir := Abilita.
BotaoSair := Abilita.
if Tbutton(frm.Components[i]).Tag = 1 then // btbtnGravar <- Desa.
Tbutton(frm.Components[i]).enabled := False;
if Tbutton(frm.Components[i]).tag = 2 then // btbtnNovo <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 3 then // btbtnAlterar <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 4 then // btbtnCancelar <- Desa.
Tbutton(frm.Components[i]).enabled := False;
if Tbutton(frm.Components[i]).tag = 5 then // btbtnExcluir <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 6 then // btbtnSair <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 7 then // btbtnPrimeiro <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 8 then // btbtnAnterior <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 9 then // btbtnProximo <- Abilita
Tbutton(frm.Components[i]).enabled := True;
if Tbutton(frm.Components[i]).tag = 10 then // btbtnUltimo <- Abilita
Tbutton(frm.Components[i]).enabled := True;
Entendeu, No seu modo, eu posso abilitar todos os botões ou desabilitar todos os botões, todos de uma só vez, entretanto eu preciso abilitar algums e desabilitar outros, por isso ´dei´ um numero de TAG para cada um e posso manipular com o seu procedimento.
Abraços e obrigado.
GOSTEI 0
Marco Salles
24/02/2006
Você está certo, porem veja isto:
[b:0a944d4571]voce não repcisa usar tags diferentes , voce usa o mesm tag e usa a chave para fazer isto .. Chave que ue falo e um propriedade booleana qua se passa junto com o form na procedure[/b:0a944d4571]
Olhe a definção
assim todos os botoes que tem tag = 1 no formulario vai receber
Tbutton(formulario.Components[i]).enabled := chave;
e todos os demais botoes que tem tag =2 vai receber:
Tbutton(formulario.Components[i]).enabled :=not chave;
e os botoes que tem tag diferente de 1 ou diferente de dois nada vai acontecer
Quando o usuario clicar no Botão Cancelar (On-click)
BotaoGravar := Desabilita.
BotaoNovo := Abilita.
BotaoEditar := Abilita.
BotaoCancelar := Desabilita.
BotaoExcluir := Abilita.
BotaoSair := Abilita.
[b:0a944d4571]voce não repcisa usar tags diferentes , voce usa o mesm tag e usa a chave para fazer isto .. Chave que ue falo e um propriedade booleana qua se passa junto com o form na procedure[/b:0a944d4571]
Olhe a definção
procedure Habilitar(chave:boolean;formulario:Tform); var i:integer; begin for i:=0 to formulario.ComponentCount -1 do if formulario.Components[i] is tbutton then begin if Tbutton(formulario.Components[i]).tag = 1 then Tbutton(formulario.Components[i]).enabled := chave; end else if Tbutton(formulario.Components[i]).tag = 2 then Tbutton(formulario.Components[i]).enabled := not chave; end;
assim todos os botoes que tem tag = 1 no formulario vai receber
Tbutton(formulario.Components[i]).enabled := chave;
e todos os demais botoes que tem tag =2 vai receber:
Tbutton(formulario.Components[i]).enabled :=not chave;
e os botoes que tem tag diferente de 1 ou diferente de dois nada vai acontecer
GOSTEI 0
Ullrich
24/02/2006
OK, valeu muito obrigado...
GOSTEI 0