27/09/2004

Problema ao chamar método fora da sua classe

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


Wart

Respostas

27/09/2004

Sandra

wart,

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

Soluciona?


Responder Citar

28/09/2004

Wart

[b:ad11cb86e0]Sandra[/b:ad11cb86e0]

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


Responder Citar

28/09/2004

Beppe

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?


Responder Citar

28/09/2004

Wart

[b:2e01a5ecac]Beppe[/b:2e01a5ecac]

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


Responder Citar

28/09/2004

Rômulo Barros

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

:?: [color=blue:88dbbb31b8][b:88dbbb31b8]Não seria isso?[/b:88dbbb31b8][/color:88dbbb31b8]


Responder Citar

28/09/2004

Wart

[b:c7c7b694ef]Undeclared Identifier[/b:c7c7b694ef]

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


Responder Citar

29/09/2004

Sandra

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.

    ...
    Visible := True; 
  end; 
  ToolBar1.ShowCaptions := true; 
  Application.ProcessMessages;  // essa linha
end; 
Tente também logo após o begin do with:
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!


Responder Citar

29/09/2004

Wart

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


Responder Citar

29/09/2004

Marcelo Saviski

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.


Responder Citar

29/09/2004

Wart

[b:f1b600ef17]Marcelo Saviski[/b:f1b600ef17]
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...

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


Responder Citar