korzystanie z tablicy na innej formie

0

Witam, mam taki problem: jeden program, dwie formy, z pierwszej jest grubszy program, który uzupełnia tablicę i...:
korzystając z procedurki:

procedure tform2.zapis(r:byte);
var plik:textfile;
    i,j:byte;
begin
  assignfile(plik,'c:/liczby.txt');
  rewrite(plik);
  for j:=1 to 12 do begin
    for i:= 1 to 50 do if ts[r,j,i]<>0 then write(plik,inttostr(i)+':'+inttostr(ts[r,j,i])+'|');
    writeln(plik);
  end;
  closefile(plik);
end;

ślicznie działa:)
ale używając praktycznie tego samego:

 procedure tform2.labele2(r:byte);
var i,j:byte;
begin
  for j:= 1 to 12 do
    for i:=1 to 50 do
    begin
      bas[j,i]:=tlabel.create(self);
      with bas[j,i] do begin
        parent:=form2; Left:=23*(i-1)+20; Top:=j*20;
        Caption:=inttostr(ts[r,j,i]);
      end;
    end;
end;

na formie wyskakują same zera... obie procedury są w unicie2, wszystkie tablice są na unicie1.
Podczas zapisywania do notatnika potrafi z pierwszej formatki ściągnąć tablicę na drugą, ale chcąc wyświetlić to w labelach na drugiej formatce, wyskakują same zera...
Ktoś ma pomysł, w czym rzecz?

var:
bas:array[1..12,1..50] of tlabel;
 ts:array[1..5,1..12,1..50] of word;
 

unity są połączone oczywiście, na unit2:

 implementation

{$R *.dfm}
uses Unit1;

i odwrotnie.

0

Może ktoś będzie na podstawie tego co napisałeś ogarnąć dlaczego coś tam Tobie nie działa. Ja musiał bym zobaczyć to w działaniu z kodem źródłowym. Jak możesz dołącz do kolejnego posta całe źródło plus ewentualnie ten plik *.txt - to się zobaczy. Ponieważ według mnie podane fragmenty nie wskazują na żaden błąd, chyba że coś przeoczyłem. A nieomylny nie jestem.

0

Zdaje mi się czy w tej drugiej procedurze nie ma zadeklarowanej zmiennej r. Więc jakim cudem jej używasz?

0

wydaje mi się, że przy dynamicznym tworzeniu komponentów trzeba je dodać na formę :P
wg. mnie:
zamień: parent:=form2; <-- to sie ustala chyba przy tworzeniu
na: form2.InsertControl(bas[j,i]);

0

krwq, te dwa sposoby to jedno i to samo, z małym zastrzeżeniem.

Delphi help napisał(a)

Applications should not need to call InsertControl directly. Child controls are automatically inserted and removed when added or deleted at design time. At runtime, use the Parent property of the child control to insert it in the Controls array. If the child control is already the child of another control, setting the Parent property ensures that the child is removed from the Controls of the original parent.

A co do samego kodu, który podał autor, to zgadzam się z tym, co napisał olesio. Kod wydaje się poprawny, ale nie znamy szerszego kontekstu.

0
jaje16 napisał(a)
var:
bas:array[1..12,1..50] of tlabel;
 

Używasz 600 Labeli? Przecież jest StringGrid.

0

if ts[r,j,i]<>0 then write(plik,inttostr(i)+':'+inttostr(ts[r,j,i])+'|'); - zapisuje tylko elementy które nie są zerami, więc może: Po prostu nie wszystkie labele mieszczą się na formie a widoczne są tylko te z zerami?

A jeśli to nie to, to daj więcej kodu, jak mówią inni.

0
bas[j, i].Visible := True;

Może tego brakuje?

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