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:
Por favor, peço ajuda e espero ter sido claro...
Muito obrigado
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
Curtidas 0
Respostas
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?
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
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...
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
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
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...
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
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]
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
27/09/2004
[b:c7c7b694ef]Undeclared Identifier[/b:c7c7b694ef]
Nem cara, pelo menos dessa forma não...
A propriedade Owner é somente leitura...
Nem cara, pelo menos dessa forma não...
A propriedade Owner é somente leitura...
GOSTEI 0
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.
Tente também logo após o begin do with:
Veja o que acontece... :roll: e boa sorte!
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;
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
27/09/2004
sandra, vlw a tentativa, mas num deu certo...
ja to entrando em parafuso... :wink:
plz, alguem me dá uma luz![/b]
ja to entrando em parafuso... :wink:
plz, alguem me dá uma luz![/b]
GOSTEI 0
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.
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
27/09/2004
[b:f1b600ef17]Marcelo Saviski[/b:f1b600ef17]
Ñã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...
A contagem por ButtonCount tá retornando zero...
Cabei de tenta e nada tb...
Hehe, será que ainda resta alguma esperança? :wink:
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