Duvida procedure...
Pessoal, tenho uma duvida simples q tah me tirando do serio. Jah recebi algumas respostas q explicam mt bem mas eu ainda to en duvida.
Tenho diversos formularios com dois botoes que possui a propriedade name = Inserir e name = editar respectivamente.
Gostaria de criar uma UNIT com esse procedimento da seguinte forma para poder executar a partir de qualquer formulario.
[color=darkblue:f5cc09482f]procedure tratabotoes;
begin
inserir.enabled:= not inserir.enabled;
editar.enabled:= not editar.enabled;
end;[/color:f5cc09482f]
Um amigo do forum me ajudou mas nao consegui com seu outro exemplo pois nao connsigo fazer as alteracoes pra utilizar dessa forma mas seu exemplo deu certo e segue abaixo porem desabilita todos os botoes q tenho no form. Obrigado!!!
[color=blue:f5cc09482f]unit UfrmProcedimentos;
interface
uses
StdCtrls,dialogs;
procedure Desabilitarinserir(sender:Tobject); //todo que esta qui é invisivel
implementation
procedure Desabilitarinserir(sender:Tobject);
begin
if sender is Tbutton Then
begin
Tbutton(sender).enabled:= not Tbutton(sender).enabled;
end;
end;
end.[/color:f5cc09482f]
Tenho diversos formularios com dois botoes que possui a propriedade name = Inserir e name = editar respectivamente.
Gostaria de criar uma UNIT com esse procedimento da seguinte forma para poder executar a partir de qualquer formulario.
[color=darkblue:f5cc09482f]procedure tratabotoes;
begin
inserir.enabled:= not inserir.enabled;
editar.enabled:= not editar.enabled;
end;[/color:f5cc09482f]
Um amigo do forum me ajudou mas nao consegui com seu outro exemplo pois nao connsigo fazer as alteracoes pra utilizar dessa forma mas seu exemplo deu certo e segue abaixo porem desabilita todos os botoes q tenho no form. Obrigado!!!
[color=blue:f5cc09482f]unit UfrmProcedimentos;
interface
uses
StdCtrls,dialogs;
procedure Desabilitarinserir(sender:Tobject); //todo que esta qui é invisivel
implementation
procedure Desabilitarinserir(sender:Tobject);
begin
if sender is Tbutton Then
begin
Tbutton(sender).enabled:= not Tbutton(sender).enabled;
end;
end;
end.[/color:f5cc09482f]
Souzaaguiar
Curtidas 0
Respostas
Fabiano Góes
13/09/2006
souzaaguiar,
desculpe não entendi se o exemplo acima desabilitou todos os botoes do form, ou se você quer desabilitar todos os botoes do form.
testei aqui assim:
e desabilitou apenas o botão que chamou o método.
desculpe não entendi se o exemplo acima desabilitou todos os botoes do form, ou se você quer desabilitar todos os botoes do form.
testei aqui assim:
procedure TForm1.button1(Sender: TObject); begin Desabilitarinserir( Sender ); end;
e desabilitou apenas o botão que chamou o método.
GOSTEI 0
Massuda
13/09/2006
A procedure que trata um evento deve ser obrigatoriamente um método de uma classe, não pode ser um procedure ´solta´ na unit, como você fez. Normalmente, a procedure utilizada é um método de um form ou data module.
GOSTEI 0
Marco Salles
13/09/2006
acho que o que ele quer é uma procedure para Habilita/Desabilitar os botoes editar e inserir e quer que este método seje chamado a partir de qualquer formulário...
Da maneira com esta , é apenas para exemplo e faz como o Fabiano Góes
disse:
desabilitou apenas o botão que chamou o método.
então faça assim
Note que em vez do nome vamos estou usando uma propriedade Tag do componentes que voce que que sofra a ação
No Objecto inspector , coloque todos os botoes <o BtSalvar , BtEditar> no seu caso com a propreidade [b:2792f98988]Tag=1[/b:2792f98988]
Para chamar o método de qualquer formulário , basta declara na secção Uses a Unit aonde esta este método
Por fim chame o método:
Para finalizar tres coisas:
1) Qualquer dúvida , prossiga no proprio Topico e so clicar No Botão responder.. Não ha necessidade e nen é recomendádo abrir um novo tópico
2)
[b:2792f98988]isto esta errado...Tudo que for declarado na secção interface estara Visivel e tudo que for declarado na secção Implementation, pertencera exclusivamente a Unit[/b:2792f98988]
esta procedure , massuda do jeito incial , não trata nenhum evento especificamente.. Apenas desabilitava o Botao que a chamou.. [b:2792f98988]so isso[/b:2792f98988]
O fato de ser uma procedure Solta sem ser um método de alguma classe , foi propositalmente postado por mim em um outro tópico, para quebrar exatamente esta idéia que se formou a este respeito....Que todo método tem que pertencer a alguma classe.
Da maneira com esta , é apenas para exemplo e faz como o Fabiano Góes
disse:
desabilitou apenas o botão que chamou o método.
então faça assim
unit Unit2;
interface
uses
StdCtrls,dialogs,forms;
procedure HabilitarDesabilitar(Formulario:TForm);
implementation
procedure HabilitarDesabilitar(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:=
not Tbutton(Formulario.Components[i]).Enabled;
end;
end.
Note que em vez do nome vamos estou usando uma propriedade Tag do componentes que voce que que sofra a ação
No Objecto inspector , coloque todos os botoes <o BtSalvar , BtEditar> no seu caso com a propreidade [b:2792f98988]Tag=1[/b:2792f98988]
Para chamar o método de qualquer formulário , basta declara na secção Uses a Unit aonde esta este método
Por fim chame o método:
procedure TForm1.Button3Click(Sender: TObject); begin habilitarDesabilitar(form1); end;
Para finalizar tres coisas:
1) Qualquer dúvida , prossiga no proprio Topico e so clicar No Botão responder.. Não ha necessidade e nen é recomendádo abrir um novo tópico
2)
interface
uses
StdCtrls,dialogs;
procedure Desabilitarinserir(sender:Tobject);[b:2792f98988] //todo que esta qui é invisivel[/b:2792f98988]
[b:2792f98988]isto esta errado...Tudo que for declarado na secção interface estara Visivel e tudo que for declarado na secção Implementation, pertencera exclusivamente a Unit[/b:2792f98988]
A procedure que trata um evento deve ser obrigatoriamente um método de uma classe, não pode ser um procedure ´solta´ na unit, como você fez. Normalmente, a procedure utilizada é um método de um form ou data module.
esta procedure , massuda do jeito incial , não trata nenhum evento especificamente.. Apenas desabilitava o Botao que a chamou.. [b:2792f98988]so isso[/b:2792f98988]
O fato de ser uma procedure Solta sem ser um método de alguma classe , foi propositalmente postado por mim em um outro tópico, para quebrar exatamente esta idéia que se formou a este respeito....Que todo método tem que pertencer a alguma classe.
GOSTEI 0
Massuda
13/09/2006
[quote:4805559966=´Marco Salles´]O fato de ser uma procedure Solta sem ser um método de alguma classe , foi propositalmente postado por mim em um outro tópico...[/quote:4805559966]OK, não sabia que tinha ´outro tópico´.
[quote:4805559966=´Marco Salles´]...para quebrar exatamente esta idéia que se formou a este respeito....Que todo método tem que pertencer a alguma classe.[/quote:4805559966]Isso é verdade desde que não se tente atribuir a procedure ´solta´ a algum evento. Mas agora entendi o propósito disto.
[quote:4805559966=´Marco Salles´]...para quebrar exatamente esta idéia que se formou a este respeito....Que todo método tem que pertencer a alguma classe.[/quote:4805559966]Isso é verdade desde que não se tente atribuir a procedure ´solta´ a algum evento. Mas agora entendi o propósito disto.
GOSTEI 0
Souzaaguiar
13/09/2006
Agradecendo as postagens. Era exatamente isso q eu precisava. Agora uma pequena duvida. Posso alterar a propriedade Enable do botao ao inves de usar a propriedade tag???? Obrigado pessoal, ajudou mt.
GOSTEI 0
Marco Salles
13/09/2006
Agradecendo as postagens. Era exatamente isso q eu precisava. Agora uma pequena duvida. Posso alterar a propriedade Enable do botao ao inves de usar a propriedade tag???? Obrigado pessoal, ajudou mt.
veja , a procedure passada , ela altera exatamente a propriedade enable
de um Botão e não a propriedade tag
A propriedade tag foi usada apenas para determinar , qual serão os botoes qeu terão a sua propriedade enabled alterada , quando a procedure for chamada/executada
se voce não definir , quais são os botoes que terão sua propriedade enable alterada , a procedure alterara todos os botoes , e isto voce não quer
A instrução
if Tbutton(Formulario.Components[i]).Tag = 1 Then
esta apenas limitando a ação de laterar ou não .... Botoes definido em tempo de projeto com a propriedade tag = 1 terão sua propriedade enabled alterada pela execução da procedure
voce poderia usar outras limitaçoes , como o proprio nome , caption ou text , so que ai voce teria que escrever varios ifs para atender todas essas condicoes , o que certamente não é uma boa pratica
exemplo de uso não aconselhável
if (Tbutton(Formulario.Components[i]).caption = ´Salvar´)or
((Tbutton(Formulario.Components[i]).caption = ´Editar´)or
(Tbutton(Formulario.Components[i]).caption = ´outrosCaption´) Then
espero ter sido claro
GOSTEI 0