procedure
Amigos.
preciso da ajuda de voces para montar um procedure.
por exemplo, preciso desabilitar um Tedit, um Tbutton e um item do TMAINMENU
como fazer para criar um procedure q desabilite qualquer componente...independente de qual ele seja.
separado eu sei fazer numa boa...por exemplo se fosse para desabilitar um Tedit faria assim:
e chamaria assim:
so que preciso fazer uma procedure q nem essa so que eu não sei qual tipo de componente será...pode ser um TEDIT...um TMEMO...uma TLABEL...
fico no aguardo!
preciso da ajuda de voces para montar um procedure.
por exemplo, preciso desabilitar um Tedit, um Tbutton e um item do TMAINMENU
como fazer para criar um procedure q desabilite qualquer componente...independente de qual ele seja.
separado eu sei fazer numa boa...por exemplo se fosse para desabilitar um Tedit faria assim:
procedure Tform1.desabilita(campo: Tedit); begin campo.enabled := false; end;
e chamaria assim:
form1.desabilita(NOME DO EDIT);
so que preciso fazer uma procedure q nem essa so que eu não sei qual tipo de componente será...pode ser um TEDIT...um TMEMO...uma TLABEL...
fico no aguardo!
Fernando_ramos
Curtidas 0
Respostas
Motta
08/02/2006
Fernando vc precisa fazer um Typecast , pode ,creio , usar o ancestral TControl
procedure Tform1.desabilita(controle: TControl);
begin
controle.Enabled := false;
end;
Acho que funciona , não peguei bem o que se quer.
procedure Tform1.desabilita(controle: TControl);
begin
controle.Enabled := false;
end;
Acho que funciona , não peguei bem o que se quer.
GOSTEI 0
Fernando_ramos
08/02/2006
amigo a idéia é essa mesmo....
funcionou 99¬.....
o unico problema é...quando aplico isso para um item do TMAINMENU o seguinte erro me retorna....
funcionou 99¬.....
o unico problema é...quando aplico isso para um item do TMAINMENU o seguinte erro me retorna....
[Error] Unit2.pas(44): Incompatible types: ´TControl´ and ´TMenuItem´
GOSTEI 0
Fernando_ramos
08/02/2006
pessoal alguem tem uma ideia?
GOSTEI 0
Bico
08/02/2006
Bom dia.
Faça o seguinte colega:
Crie duas rotinas com o mesmo nome e defina-as como overload.
A implementação de cada uma:
Chamando as rotinas:
Atenciosamente,
Fernando.
Faça o seguinte colega:
Crie duas rotinas com o mesmo nome e defina-as como overload.
procedure desabilita(controle: TControl); overload; procedure desabilita(controle: TMenuItem); overload;
A implementação de cada uma:
procedure TForm1.desabilita(controle: TControl); begin controle.Enabled := false; end;
procedure TForm1.desabilita(controle: TMenuItem); begin controle.Enabled := False; end;
Chamando as rotinas:
procedure TForm1.Button1Click(Sender: TObject); begin desabilita(Edit1); desabilita(Teste1); end;
Atenciosamente,
Fernando.
GOSTEI 0
Motta
08/02/2006
E que TMainMenu não é herdeiro de TControl.
Vc pode fazer ...
procedure Tform1.desabilita(obj: TObject);
begin
if obj is TControl then
TControl(obj).Enabled := false;
if obj is TMainMenu then
TMainMenu(obj).Enabled := false;
...
end;
é uma solução
Vc pode fazer ...
procedure Tform1.desabilita(obj: TObject);
begin
if obj is TControl then
TControl(obj).Enabled := false;
if obj is TMainMenu then
TMainMenu(obj).Enabled := false;
...
end;
é uma solução
GOSTEI 0
Fernando_ramos
08/02/2006
desculpe voltar em topico antigo, é pq estava viajando.
como base de teste amigo...
copiei e colei seu codigo...logico tirando os ´...´, e apresentou o seguinte erro...
se puder me ajudar...
como base de teste amigo...
copiei e colei seu codigo...logico tirando os ´...´, e apresentou o seguinte erro...
[Error] frmsplash.pas(130): Undeclared identifier: ´TMainMenu´
se puder me ajudar...
GOSTEI 0
Michael
08/02/2006
O typecast não deve ser feito para [b:a714f55bad]TMainMenu[/b:a714f55bad], e sim [b:a714f55bad]TMenuItem[/b:a714f55bad].
Lembrando que vc pode usar Actions associadas a mais de um controle. E neste caso só precisaria desativar a ação e os controles ligados a ele tbm seriam automaticamente.
[]´s
procedure AtivarDesativarControle(Controle: TComponent; Ativar: Boolean); begin if Controle is TControl then (Controle as TControl).Enabled := Ativar else if Controle is TMenuItem then (Controle as TMenuItem).Enabled := Ativar; end;
Lembrando que vc pode usar Actions associadas a mais de um controle. E neste caso só precisaria desativar a ação e os controles ligados a ele tbm seriam automaticamente.
[]´s
GOSTEI 0
Fernando_ramos
08/02/2006
amigo MICHAEl, efetuei o mesmo teste , copiei e colei!!
deu o seguinte erro!
deu o seguinte erro!
[Error] frmsplash.pas(130): Undeclared identifier: ´TMenuItem´
GOSTEI 0
Michael
08/02/2006
Colega Fernando,
Quando este tipo de erro ocorrer, a primeira coisa que vc deve fazer é ir no help do Delphi e procurar pelo identificador não declarado, no caso [b:5f781fd284]TMenuItem[/b:5f781fd284]. Lá vc pode ver em qual unit ele está.
No nosso contexto, é a unit [b:5f781fd284]Menus[/b:5f781fd284]. Esqueci de citar no último post. Adicione-a, portando, à cláusula [b:5f781fd284]uses [/b:5f781fd284]do seu arquivo.
[]´s
Quando este tipo de erro ocorrer, a primeira coisa que vc deve fazer é ir no help do Delphi e procurar pelo identificador não declarado, no caso [b:5f781fd284]TMenuItem[/b:5f781fd284]. Lá vc pode ver em qual unit ele está.
No nosso contexto, é a unit [b:5f781fd284]Menus[/b:5f781fd284]. Esqueci de citar no último post. Adicione-a, portando, à cláusula [b:5f781fd284]uses [/b:5f781fd284]do seu arquivo.
[]´s
GOSTEI 0