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

W jednych procedurach jest bezpośredni dostęp do kontrolek, w innych nie?
L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 59
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

Kopiuj
procedure TForm1.FormCreate(Sender: TObject);

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

Kopiuj
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

Opi
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1036
0

W sekcji private Form1 wstaw nazwę procedury;

Kopiuj
private
 procedure AktualizujDostawcy(obiekt: TStringGrid);

Natomiast tu zamień na

Kopiuj
procedure TForm1.AktualizujDostawcy;
var
//...
begin
//...
end;
Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
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

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
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

L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 59
0

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

Kopiuj
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...

Opi
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1036
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.