Problema ao chamar método fora da sua classe

Delphi

27/09/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:
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

Wart

Curtidas 0

Respostas

Sandra

Sandra

27/09/2004

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?


GOSTEI 0
Wart

Wart

27/09/2004

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


GOSTEI 0
Beppe

Beppe

27/09/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?


GOSTEI 0
Wart

Wart

27/09/2004

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


GOSTEI 0
Rômulo Barros

Rômulo Barros

27/09/2004

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]


GOSTEI 0
Wart

Wart

27/09/2004

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

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


GOSTEI 0
Sandra

Sandra

27/09/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.

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


GOSTEI 0
Wart

Wart

27/09/2004

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


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

27/09/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.


GOSTEI 0
Wart

Wart

27/09/2004

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


GOSTEI 0
POSTAR