W jednych procedurach jest bezpośredni dostęp do kontrolek, w innych nie?

0

Witam,
pytanie pewnie na poziomie przedszkola, ale szukałem w internecie i nie mogłem znaleźć. Inna sprawa że w sumie nie wiem jak to zjawisko nazwać... dlatego taki temat...

Chodzi mi o to że na formie mam TStringGrid o nazwie MagazynTabela, jest też TComboBox o nazwie Dostawca.
W procedurze

procedure TForm1.FormCreate(Sender: TObject);

mogę się normalnie odwoływać w stylu MagazynTabela.Cols[1]:='Symbol';
{ albo }
Dostawca.Text:='Chińczycy';

natomiast we własnej procedurze nie mogę się tak odwoływać do tych kontrolek. Mam procedurę:
```delphi
procedure AktualizujDostawcy(obiekt: TStringGrid);
var
i: integer;
begin
  obiekt.RowCount:=DostawcySize+1;
  if DostawcySize>0 then
  for i:=0 to DostawcySize-1 do
  begin
    Seek(DostawcyFile,i);
    Read(DostawcyFile,DostawcyRecord);
    obiekt.Cells[1,i+1]:=DostawcyRecord.Nazwa;
    obiekt.Cells[2,i+1]:=DostawcyRecord.PelnaNazwa;
  end;
end;

Procedurę wywołuję w procedurze TForm1.FormCreate i musiałem jako argument mojej podać kontrolkę na której ma działać, i odwoływać się potem przez obiekt.Cells[1] itp. bo Magazyn.Cells[1] nie działa (undeclared identifier-to gdzie mam go zadeklarować?).

Czy ktoś może wyjaśnić mi co robię źle i jak to naprawić? A może robię dobrze i lepiej nie będzie? ;)

pozdrawiam
Paweł Lis

0

W sekcji private Form1 wstaw nazwę procedury;

private
 procedure AktualizujDostawcy(obiekt: TStringGrid);

Natomiast tu zamień na

procedure TForm1.AktualizujDostawcy;
var
//...
begin
//...
end;
0

FormCreate to NIE JEST procedura. To jest METODA klasy TForm1. AktualizujDostawcy to jest procedura i nie ma ona nic wspólnego z klasą TForm1. Poczytaj co to jest klasa, zasięg zmiennych - ogólnie podstawy

0
l153k napisał(a)

bo Magazyn.Cells[1] nie działa (undeclared identifier...)

Jeżeli komponent Magazyn położyłeś na Form1 to odwołuj się do niego tak: Form1.Magazyn

0

Już sobie poradziłem, w sumie metodą prób i błędów: dodaję do sekcji private takie coś:

procedure TForm1.AktualizujDostawcy();

i mogę się wtedy do tej procedury ładnie odwoływać. O zasięgu to wiem, tylko właśnie z zasięgiem w procedurach czyli co gdzie można a co nie... jakoś nie bardzo ogarniam...

0

Od kiedy to procedurę deklaruje się z klasą ?

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