Didiron 0 Denunciar post Postado Junho 9, 2010 Boa noite pessoal, venho eu aqui mais uma vez encomodar voces. Só que agora estou com um problema na utilização de StringGrid, eu tenho um cadastro de alunos, onde esses dados vão para um record, ai eu tenho um outro form chamado VisualizarAlunos, no qual possui um StringGrid, onde aparecerá, o código do aluno pesquisado e o nome do mesmo. Para isso eu estou usando um "Objeto Utilitário", onde que o código principal está nele, e eu o chamo para o form VisualizarAlunos. Só que quando eu executo, me aparece o seguinte erro no ObjetoUtilitario: Circular Unit reference to 'UViualizarAlunos'. Eu vou postar o código dos dois arquivos: UVisualizarAlunos: unit UVisualizarAlunos; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, ObjetoUtilitario; type TFrmVisualizarAlunos = class(TForm) Label1: TLabel; Label2: TLabel; EdNomeConsulta: TEdit; Sglista: TStringGrid; BtnPesquisar: TButton; procedure Edit1Change(Sender: TObject); procedure BtnPesquisarClick(Sender: TObject); procedure SglistaClick(Sender: TObject); private Utilitario : ObjetoUtilitario; { Private declarations } public { Public declarations } end; implementation Uses PrPrincipal; {$R *.dfm} var FrmVisualizarAlunos: TFrmVisualizarAlunos; procedure TFrmVisualizarAlunos.Edit1Change(Sender: TObject); begin Utilitario := ObjetoUtilitario.Create; SgLista.Cells[0,0] := 'Codigo'; SgLista.Cells[1,0] := 'Nome'; end; procedure TFrmVisualizarAlunos.BtnPesquisarClick(Sender: TObject); var Ender: alunos; Arq: File of alunos; begin Utilitario.Limpar(sgLista); AssignFile(Arq, ExtractFilePath(Application.ExeName)+'\alunos.bin'); if not (FileExists(ExtractFilePath(Application.ExeName)+'\alunos.bin')) then begin showmessage('Não existem alunos para visualizar'); end Else Begin reset(arq); While not EOF(Arq) do Begin read(arq, ender); IF ender.Nome = EdNomeConsulta.Text then begin Utilitario.ConsultaDeEndereco(Sglista, Ender); End; End; End; end; end. ObjetoUtilitario unit ObjetoUtilitario; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Mask, StdCtrls, ExtCtrls, Grids, PrPrincipal, UVisualizarAlunos; type ObjUtilitario = class(tobject) private {Private Declarations} public Procedure Limpar(Var Sg: TStringGrid); Procedure ConsultaDeEndereco(Var sg:TStringGrid; var Ender: alunos); end; implementation { TUtilitario } procedure ObjetoUtilitario.UVisualizarAlunos(var sg: TStringGrid; var Ender: alunos); begin If Sg.Cells[0,1] <> '' then Sg.Rowcount := Sg.Rowcount+1; Sg.Cells[0, Sg.Rowcount-1] := InttoStr(ender.Codigo); Sg.Cells[1, Sg.Rowcount-1] := ender.Nome; end; procedure ObjetoUtilitario.Limpar(var Sg: TStringGrid); begin sg.Rowcount := 2; sg.cells[0,1] := ''; sg.cells[1,1] := ''; end; end. Alguém poderia me dizer se eu estou utilizando a lógica correta, e por que acontece esse erro? Abraços a todos. Compartilhar este post Link para o post Compartilhar em outros sites
fernando.fxsoft 0 Denunciar post Postado Junho 9, 2010 Oi, Isto ocorre porque você incluiu a unit ObjetoUtilitario na cláusula uses da Unit UVisualizarAlunos e, incluiu também na cláusula uses da unit ObjetoUtilitario a unit UVisualizarAlunos. Você não precisa declarar a unit UVisualizarAlunos na cláusula uses de ObjetoUtilitario. Teste desta forma. Um abraço, Compartilhar este post Link para o post Compartilhar em outros sites
Didiron 0 Denunciar post Postado Junho 10, 2010 Olá Fernando, fiz o que voce falou, mas deu o erro: Identifier Redeclared: 'ObjetoUtilitario'. Na linha: procedure ObjetoUtilitario.UVisualizarAlunos(var sg: TStringGrid; var Ender: alunos); Compartilhar este post Link para o post Compartilhar em outros sites
fernando.fxsoft 0 Denunciar post Postado Junho 10, 2010 Oi, Na cláusula uses da unit UVisualizarAlunos deve ter a unit ObjetoUtilitario. Já na unit ObjetoUtilitario não deve ter a unit UVisualizarAlunos. A unit UVisualizarAlunos não precisaria ser modificada e a unit ObjetoUtilitario ficaria conforme abaixo: unit ObjetoUtilitario; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Mask, StdCtrls, ExtCtrls, Grids, PrPrincipal; type ObjUtilitario = class(tobject) private {Private Declarations} public Procedure Limpar(Var Sg: TStringGrid); Procedure ConsultaDeEndereco(Var sg:TStringGrid; var Ender: alunos); end; implementation { TUtilitario } procedure ObjetoUtilitario.UVisualizarAlunos(var sg: TStringGrid; var Ender: alunos); begin If Sg.Cells[0,1] <> '' then Sg.Rowcount := Sg.Rowcount+1; Sg.Cells[0, Sg.Rowcount-1] := InttoStr(ender.Codigo); Sg.Cells[1, Sg.Rowcount-1] := ender.Nome; end; procedure ObjetoUtilitario.Limpar(var Sg: TStringGrid); begin sg.Rowcount := 2; sg.cells[0,1] := ''; sg.cells[1,1] := ''; end; end. Olá Fernando, fiz o que voce falou, mas deu o erro: Identifier Redeclared: 'ObjetoUtilitario'. Na linha: procedure ObjetoUtilitario.UVisualizarAlunos(var sg: TStringGrid; var Ender: alunos); Compartilhar este post Link para o post Compartilhar em outros sites
Didiron 0 Denunciar post Postado Junho 10, 2010 Então Fernando eu fiz o que voce falou e continou dando o mesmo erro. :( :( :( :( Compartilhar este post Link para o post Compartilhar em outros sites