korzystanie z tablicy na innej formie

korzystanie z tablicy na innej formie
J1
  • Rejestracja: dni
  • Ostatnio: dni
0

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

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

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

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

Kopiuj
 implementation

{$R *.dfm}
uses Unit1;

i odwrotnie.

olesio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 4191
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.

  • Rejestracja: dni
  • Ostatnio: dni
0

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

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2520
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]);

SI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 184
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.

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0
jaje16 napisał(a)
Kopiuj
var:
bas:array[1..12,1..50] of tlabel;
 

Używasz 600 Labeli? Przecież jest StringGrid.

payl
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 196
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.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0
Kopiuj
bas[j, i].Visible := True;

Może tego brakuje?

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.