Código em run time ?
que erro é esse ?
Associar a Procedure [b:0b777df972]ChamarCadastro[/b:0b777df972] ao evento do menu, a procedure [b:0b777df972]ChamarCadastro[/b:0b777df972] tem um parâmetro que é o nome do formulário que ela vai criar.
Código:
MainMenu.Items[0].Items[1].OnClick := ChamarCadastro(f_Cadastro);
[Error]:
rotinas.pas(116): Incompatible types: ´TNotifyEvent´ and ´procedure, untyped pointer or untyped parameter´
[]´s
Renata Coimbra
Associar a Procedure [b:0b777df972]ChamarCadastro[/b:0b777df972] ao evento do menu, a procedure [b:0b777df972]ChamarCadastro[/b:0b777df972] tem um parâmetro que é o nome do formulário que ela vai criar.
Código:
MainMenu.Items[0].Items[1].OnClick := ChamarCadastro(f_Cadastro);
[Error]:
rotinas.pas(116): Incompatible types: ´TNotifyEvent´ and ´procedure, untyped pointer or untyped parameter´
[]´s
Renata Coimbra
Renata Coimbra
Curtidas 0
Respostas
Persist
14/07/2004
Defina ChamarCadastro como um TNotifyEvent dentro da classe que está o MainMenu (deve ser o Form).
procedure ChamarCadastro(Sender:TObject);
Daí p/ criar o Form vc usa um Cast -
var Form:TForm;
begin
Form := TForm(Sender).Create(nil);
end;
procedure ChamarCadastro(Sender:TObject);
Daí p/ criar o Form vc usa um Cast -
var Form:TForm;
begin
Form := TForm(Sender).Create(nil);
end;
GOSTEI 0
Cabelo
14/07/2004
Vc pode definir tb uma outra procedure :
MainMenuClick(Sender : TObject);
begin
ChamarCadastro(f_cadastro);
end;
e associar esta procedure ao evento click do menu..
assim não tem erro..
espero ter ajudado..
Cabelo
MainMenuClick(Sender : TObject);
begin
ChamarCadastro(f_cadastro);
end;
e associar esta procedure ao evento click do menu..
assim não tem erro..
espero ter ajudado..
Cabelo
GOSTEI 0
Paulo_amorim
14/07/2004
Defina ChamarCadastro como um TNotifyEvent dentro da classe que está o MainMenu (deve ser o Form).
procedure ChamarCadastro(Sender:TObject);
Daí p/ criar o Form vc usa um Cast -
var Form:TForm;
begin
Form := [b:6af97356de]TForm(Sender)[/b:6af97356de].Create(nil);
end;
Olá
Se eu não me engano isso irá gerar um erro de typecast
Como a procedure será atribuida ao botão, o Sender dele será o proprio TButton, o qual não conseguirá ser transformado em TForm
O que eu imaginei foi vc criar 2 procedures :
procedure ChamarCadastro( form: TForm); begin (...) end; procedure PoeNoBotao(Sender: TObject); begin ChamarCadastro(f_Cadastro); end;
Daí no cmeço vc faz MainMenu.Items[0].Items[1].OnClick := PoeNoBotao;
Esse erro ocorre porque para vc passar umaprocedure para um evento ela deve ter os mesmos parÂmetros que o evento (no caso, [i:6af97356de]Sender: TObject[/i:6af97356de])
Esperoq ue ajuide
Até+
GOSTEI 0
Renata Coimbra
14/07/2004
Muito Obrigada cabelo_uni e persist !
vou testar !
[]´s
Renata Coimbra
vou testar !
[]´s
Renata Coimbra
GOSTEI 0
Renata Coimbra
14/07/2004
Obrigada Paulo_Amorim !
Um abraço !
Renata Coimbra.
Um abraço !
Renata Coimbra.
GOSTEI 0
Persist
14/07/2004
Tá certo, o Sender no caso é um TMenuItem, teria que ficar assim:
procedure TForm1.Chamar_Cadastro(Sender:TObject);
var Form:TForm;
begin
Form := TForm(TMenuItem(Sender).Owner).Create(nil);
end;
procedure TForm1.Chamar_Cadastro(Sender:TObject);
var Form:TForm;
begin
Form := TForm(TMenuItem(Sender).Owner).Create(nil);
end;
GOSTEI 0
Renata Coimbra
14/07/2004
Gente, só tem uma coisa, esse formulário que eu vou criar eu estou pegando o nome dele de uma tabela, tipo, tenho um seletor cadastrado em uma tabela, tipo String, olhem o código de criação.
código todo:
[b:0958cacf90]{Chamar cadastro}[/b:0958cacf90]
Procedure ChamarCadastro(const Cad : ShortString);
Var
f_Cadastro : Tf_Cadastro;
begin
f_Cadastro.Name := Cad ;
f_Cadastro := TChamarProgramas.LocalizarFormularioCadastro( UpperCase( cad ) );
if f_Cadastro <> nil then
f_Cadastro.Show
else
f_Cadastro := Tf_Cadastro.Create( Application );
end;
{Criar Menu}
var
i: Integer;
Formulario : ShortString;
For I := 0 to DataSet.RecordCount - 1 do
begin
NovoItem := TMenuItem.Create(MainMenu);
NovoItem.Name := DataSet.fieldByName(´SELETOR´).AsString;
NovoItem.Caption := DataSet.fieldByName(´DESCRICAO´).AsString;
Formulario := DataSet.fieldByName(´FORMULARIO´).AsString;
MainMenu.Items[0].Insert(I,NovoItem);
MainMenu.Items[0].Items[I].OnClick := ChamarCadastro (Formulario);
DataSet.Next;
end;
é que o formulário vai mudar de acordo com o for.
[]´s
Renata Coimbra.
código todo:
[b:0958cacf90]{Chamar cadastro}[/b:0958cacf90]
Procedure ChamarCadastro(const Cad : ShortString);
Var
f_Cadastro : Tf_Cadastro;
begin
f_Cadastro.Name := Cad ;
f_Cadastro := TChamarProgramas.LocalizarFormularioCadastro( UpperCase( cad ) );
if f_Cadastro <> nil then
f_Cadastro.Show
else
f_Cadastro := Tf_Cadastro.Create( Application );
end;
{Criar Menu}
var
i: Integer;
Formulario : ShortString;
For I := 0 to DataSet.RecordCount - 1 do
begin
NovoItem := TMenuItem.Create(MainMenu);
NovoItem.Name := DataSet.fieldByName(´SELETOR´).AsString;
NovoItem.Caption := DataSet.fieldByName(´DESCRICAO´).AsString;
Formulario := DataSet.fieldByName(´FORMULARIO´).AsString;
MainMenu.Items[0].Insert(I,NovoItem);
MainMenu.Items[0].Items[I].OnClick := ChamarCadastro (Formulario);
DataSet.Next;
end;
é que o formulário vai mudar de acordo com o for.
[]´s
Renata Coimbra.
GOSTEI 0
Persist
14/07/2004
f_Cadastro.Name := Cad;
Vc não pode atribuir ainda pq vc não instanciou o f_Cadastro.
MainMenu.Items[0].Items[I].OnClick := ChamarCadastro (Formulario);
O onClick é um TNotifyEvent, vc não pode informar parâmetro na hora da atribuição.
Vc não pode atribuir ainda pq vc não instanciou o f_Cadastro.
MainMenu.Items[0].Items[I].OnClick := ChamarCadastro (Formulario);
O onClick é um TNotifyEvent, vc não pode informar parâmetro na hora da atribuição.
GOSTEI 0
Renata Coimbra
14/07/2004
Pois é persist !
Como fazer então nesse caso ?
como passar o nome do formulário que vai ser criado, sendo que qualquer uma das procedure só pode ter Parâmetro TObject,
é que nesse for que eu pego o nome do formulário.
[]´s
Renata Coimbra
Como fazer então nesse caso ?
como passar o nome do formulário que vai ser criado, sendo que qualquer uma das procedure só pode ter Parâmetro TObject,
é que nesse for que eu pego o nome do formulário.
[]´s
Renata Coimbra
GOSTEI 0
Persist
14/07/2004
Mas pq vc precisa do nome do formulário?
GOSTEI 0
Renata Coimbra
14/07/2004
Deu certinho pessoal !
obrigada a todos !
[]´s
Renata
obrigada a todos !
[]´s
Renata
GOSTEI 0