korzystanie z tablicy na innej formie

Odpowiedz Nowy wątek
2011-09-12 21:37
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.

edytowany 6x, ostatnio: jaje16, 2011-09-12 22:02

Pozostało 580 znaków

2011-09-12 22:46
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.


Pozostało 580 znaków

2011-09-12 22:49
janusz
0

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

jest zadeklarowana w parametrach samej procedury:) - jaje16 2011-09-12 22:51

Pozostało 580 znaków

2011-09-12 22:53
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]);


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2011-09-12 23:13
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.

Pozostało 580 znaków

2011-09-12 23:15
0
jaje16 napisał(a)

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


Używasz 600 Labeli? Przecież jest StringGrid.
edytowany 1x, ostatnio: pelsta, 2011-09-12 23:15

Pozostało 580 znaków

2011-09-12 23:31
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.


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.

Pozostało 580 znaków

2011-09-13 06:21
0
bas[j, i].Visible := True;

Może tego brakuje?


edytowany 1x, ostatnio: Patryk27, 2011-09-13 06:22

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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