procedure

08/02/2006

0

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:

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

Fernando_ramos

Responder

Posts

08/02/2006

Motta

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.


Responder

08/02/2006

Fernando_ramos

amigo a idéia é essa mesmo....

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´



Responder

09/02/2006

Fernando_ramos

pessoal alguem tem uma ideia?


Responder

09/02/2006

Bico

Bom dia.

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.


Responder

09/02/2006

Motta

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


Responder

23/02/2006

Fernando_ramos

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...

[Error] frmsplash.pas(130): Undeclared identifier: ´TMainMenu´


se puder me ajudar...


Responder

23/02/2006

Michael

O typecast não deve ser feito para [b:a714f55bad]TMainMenu[/b:a714f55bad], e sim [b:a714f55bad]TMenuItem[/b:a714f55bad].

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


Responder

24/02/2006

Fernando_ramos

amigo MICHAEl, efetuei o mesmo teste , copiei e colei!!

deu o seguinte erro!


[Error] frmsplash.pas(130): Undeclared identifier: ´TMenuItem´



Responder

24/02/2006

Michael

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


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar