deklaracje-początkujący

0

Jeżeli w jednym module zadeklarowałem jakiś typ np.

unit kod;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus,wczytpkt;

type
Tpunkt=record
x,y:real;
end;
Tblica=array of Tpunkt;

to w module wczytpkt znowu muszę deklarować te typy. Czy da się tego nie powtarzać?

0

Typy te nie beda widzane w wczytpkt, chyba ze dodasz w nim uses kod;

0

dwa moduły nie mogą siebie nawzajem deklarować w sekcjach interface, do tego celu służy implementation.
[EDIT]
czyli najprościej będzie przenieść definicje typu do interface modułu wczyt...coś tam i nic innego nie zmieniać

0

OK zrobiłem tak:
w skecji Implementation modułu wczytpkt dodałem uses kod i typy

Tpunkt=record
x,y:real;
end;
Tblica=array of Tpunkt;

zadeklarowane w module kod sa juz widoczne.

Mam jedna drugi problem. Oto kod źródłowy modułu kod:

unit kod;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus,wczytpkt;

type
Tpunkt=record
x,y:real;
end;
Tblica=array of Tpunkt;
TMainForm = class(TForm)
MainMenu1: TMainMenu;
DaneMenu: TMenuItem;
DaneWielokat: TMenuItem;
Danepkt: TMenuItem;
Daneodcinki: TMenuItem;
Daneproste: TMenuItem;
Obliczenia: TMenuItem;
Obliczeniazawieranie: TMenuItem;
Obliczeniaprzeciecieodc: TMenuItem;
Sprawdzprzecicieprostych1: TMenuItem;
OpenDialog1: TOpenDialog;
procedure DaneWielokatClick(Sender: TObject);
procedure DanepktClick(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation

uses wczform;

{$R *.dfm}

procedure TMainForm.DaneWielokatClick(Sender: TObject);
begin
Wczytajwielokatform.ShowModal;
end;

procedure TMainForm.DanepktClick(Sender: TObject);
begin
wczytajpkt;
end;

end.

A oto wczytpkt:

unit wczytpkt;

interface

procedure wczytajpkt;

implementation

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, kod;

procedure wczytajpkt;

var
xypp:Tblica;
i,q:integer;
plik:string;
pt:Textfile;

begin
i:=0;

if OpenDialog1.execute then
begin
plik:=opendialog1.filename;
assignfile(pt,plik);
reset(pt);
while not eof(pt) do
begin
readln(pt);
i:=i+1;
end;
closefile(pt);
q:=i;
showmessage('q= '+currtostr(q));
SetLength(xypp,q);
reset(pt);
i:=0;
while not eof(pt) do
begin
readln(pt,xypp[i].x,xypp[i].y);
i:=i+1;
end;
closefile(pt);
end;
end;

end.

Przy kompilacji wywala mi błąd:Undeclared identifier: 'OpenDialog1'
Prosze o pomoc.

0

Przy kompilacji wywala mi błąd:Undeclared identifier: 'OpenDialog1'

A gdzie zjadłeś ten komponent? :)

0

Jest w sekcji type modułu kod. Sekcja type jest w Interface wiec wydaje mi się że w module wczytpkt powinna być widoczna. Nie jest tak?

Pomoże ktoś ? :|

0

MainForm.OpenDialog1 ?
[EDIT]
jejku no napisz tak to wydaje mi się że powinno byc ok !

0

MainForm.OpenDialog1 ? Nie bardzo rozumiem, jeśli mozna proszę o wyjaśnienie.

0
Luzar napisał(a)

MainForm.OpenDialog1 ? Nie bardzo rozumiem, jeśli mozna proszę o wyjaśnienie.

a co tu chcesz wyjaśniać?

type
 TMainForm = class(TForm)
   ...
   OpenDialog1: TOpenDialog;
  end;

OpenDialog1 jak widzisz jest zmienną w klasie TMainForm i aby się do niej odwołać trzeba najpierw stworzyć instację tej klasy a dopiero po tem się do niej odwołać poprzez tą instancję

0

ok thx

1 użytkowników online, w tym zalogowanych: 0, gości: 1