Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Didiron

utlização de StringGrid

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.