Array
(
)

Problema ao chamar método fora da sua classe

Wart
   - 27 set 2004

Ae galera, pelo amor de Deus eu preciso de uma luz...
Ta acontecendo um negócio estranho aki. Umas coisas meio inexplicáveis...
Eu criei um método que cria um botão no mdiform toda vez que é criado um mdi child. Até aí td bem, eu colocava uma chamada no oncreate dos mdichild e tava funcionando tudo perfeitamente: ao criar o formulário o botão aparecia na toolbar bonitinho...
Agora, sem motivo algum aparente, ela parou de funcionar... Quando eu chamo esse método para a criação do botão do form ao qual ele pertence, ele fuunciona perfeitamente agora quando eu chamo ele de outro form ele não funciona. Eu já reparei que o botão é até criado em memória, pois o uso de memória aumenta a cada chamada do método porém ele não aparece na toolbar.
Aí vai o método pra quem quiser dar uma olhada:

Citação:

procedure TForm3.CriaBotao(texto:string;img:integer;clik:TNotifyEvent);
begin
with TToolbutton.Create(Self) do
begin
Parent := Toolbar1;
AutoSize := False;
Wrap := False;
Style := tbsButton;
Caption := texto;
ImageIndex := img;
AutoSize := True;
Onclick := clik;
Visible := True;
end;
ToolBar1.ShowCaptions := true;
end;


Por favor, peço ajuda e espero ter sido claro...
Muito obrigado


Sandra
   - 27 set 2004

wart,

O problema não estaria relacionado com o local que a procedure está declarada? Se for, acredito que deveria ser criada no type public e não no private.

Soluciona?


Wart
   - 28 set 2004

Sandra

Então, ta tudo declarado certinho, eu consigo visualizar o método de qualquer outro form desde que o Form3 esteja declarado na uses...

O problema é que o botão não aparece...


Beppe
   - 28 set 2004

Eu simulei seu exemplo e está rodando como eu esperei. No form2 eu chamo a rotina CriaBotao no form1, que exibe um botão na toolbar1 do próprio form1. É isto que quer não?


Wart
   - 28 set 2004

Beppe

Pois eh cara, tava funfando perfeito, so q agora não tá mais...
É exatamente da forma que você falou que deve funcionar e eu gostaria de saber um provável motivo para ela ter parado de funcionar...


Rômulo Barros
   - 28 set 2004

procedure TForm3.CriaBotao(texto:string;img:integer;clik:TNotifyEvent);
begin
with TToolbutton.Create(Self) do
begin
Owner := Toolbar1;
Parent := Toolbar1;
AutoSize := False;
Wrap := False;
Style := tbsButton;
Caption := texto;
ImageIndex := img;
AutoSize := True;
Onclick := clik;
Visible := True;
end;
ToolBar1.ShowCaptions := true;
end;

:?: Não seria isso?


Wart
   - 28 set 2004

Undeclared Identifier

Nem cara, pelo menos dessa forma não...
A propriedade Owner é somente leitura...


Sandra
   - 29 set 2004

Oi wart! :D
O código está complicado, hein?

Ocorreu-me uma idéia. Não sei se funcionaria, mas... tentativa por tentativa, experimente acrescentar o Application.ProcessMessages.

#Código

...
Visible := True;
end;
ToolBar1.ShowCaptions := true;
Application.ProcessMessages; // essa linha
end;
Tente também logo após o begin do with:
#Código
procedure TForm3.CriaBotao(texto:string;img:integer;clik:TNotifyEvent); 
begin
with TToolbutton.Create(Self) do
begin
Application.ProcessMessages; // aqui
Parent := Toolbar1;
...

Veja o que acontece... :roll: e boa sorte!


Wart
   - 29 set 2004

sandra, vlw a tentativa, mas num deu certo...
ja to entrando em parafuso... :wink:
plz, alguem me dá uma luz!


Marcelo Saviski
   - 29 set 2004

Nesse MDIChild, não existe outro ´ToolBar1´?

só p/ tirar a prova real, esperimente verificar no ToolBar1, o nº de botões que ha nele, depois de criar um.

ou talvez se vc trocar o Self do TToolbutton.Create(Self) pelo form principal.


Wart
   - 29 set 2004

Marcelo Saviski

Citação:
Nesse MDIChild, não existe outro ´ToolBar1´?

Ñão, além de só ter toolbar no form principal, todos os MDICHild criavam um botão quando o form era criado e agora nenhum cria mais... eu só consigo criar o botão se eu chamar o método de dentro do form assim:
CriaBotao(parametros);
ou assim
Self.CriaBotao(parametros);

Se eu chamar assim:
Form3.CriaBotao(parametros);
ele não funciona também...


Citação:
só p/ tirar a prova real, esperimente verificar no ToolBar1, o nº de botões que ha nele, depois de criar um

A contagem por ButtonCount tá retornando zero...

Citação:
ou talvez se vc trocar o Self do TToolbutton.Create(Self) pelo form principal.

Cabei de tenta e nada tb...

Hehe, será que ainda resta alguma esperança? :wink: