Procedura z ramki

0

Witam! Mam oto taki problem. Tworze dynamicznie ramke w ten sposób:

 var
  Frame:TFrame;
 if not Frame.ClassNameIs('TFrame3') then
 begin
  Frame.Free;
  Frame := TFrame3.Create(form1);
  Frame.Parent := form1;
 end;

Od razu mówie, że robie tak ponieważ pod zmienną Frame podstawiam kilka ramek, które nie mogą być wyświetla jednocześnie.
I teraz mam taki problem gdyż nie wiem jak moge wywołać procedurę znajdującą się w tej ramce.

0

Wrzucaj sobie ramki do jakiejś tablicy dynamicznej i odwołuj się potem przez nią.

0

mam podobny problem jak kolega ale nie wystarcza mi taka odpowiedź :-(
Jak powinna wyglądac ta tablica, to powinna być tablica jakich elementów?

opisze mój przypadke nieco dokaldniej

Mam PageControl. Użytkownik może dodawać kolejne zakładki, przy czym jest kilka rodzajów tych możliwych do dodania zakładek, a kazdy z nich to inny TFrame (mam więc TFrame1, TFrame2, ...).
Poczatkowo zrobiłem array of TFrame, ale wtedy nie moge wywoływać procedur zawartych w ramce za pomocą takiego kodu

ramki[1].procedura

wiec jak mam to zrobić?

Z góry dzieki za pomoc

0

Użytkownik może dodawać kolejne zakładki, przy czym jest kilka rodzajów tych możliwych do dodania zakładek, a kazdy z nich to inny TFrame (mam więc TFrame1, TFrame2, ...).
Poczatkowo zrobiłem array of TFrame,

Coś tu nie tak - stworzyłeś różne klasy TFrame(X), ale później tablica array of TFrame - zarzuć kodem.

0

no wlasnie nie mam pomysłu jaka to powinna być tablica, tablica jakich elementów?

mam dwie dziedziczace z TFrame klasy: TWidokAktualnyFrame i TWidokHistorycznyFrame

nowe zakładki tworze tak:

var tab:TTabSheet;
    frame:TWidokAktualnyFrame;
begin
tab:=TTabSheet.Create(PageControl);
tab.PageControl:=PageControl;
tab.Caption:='Widok edycyjny';
frame:=TWidokAktualnyFrame.Create(tab);
frame.Parent:=tab;
// a tu dodaje te moje Frame do tablicy
Inc(ilewidokow);
setLength(widoki,ilewidokow);
widoki[ilewidokow-1]:=frame;
end;

analogicznie dla TWidokHistorycznyFrame

tablice zadeklarowałem tak

widoki: array of TFrame;

bo nie miałem lepszego pomysłu. po prostu nie wiem jak to zrobić dlatego zwracam się do Was o pomoc. Każda z tych klas ma procedure rysuj

 Jak to zrobić aby mozna było ją wywołać za pomoca <code class="delphi">widoki[x].rysuj

lub inaczej ale w miare wygodnie?

0
var tab:TTabSheet;
    frame:TWidokAktualnyFrame;
    FrameArr: array of TFrame;
begin
SetLength(FrameArr, 0);
tab:=TTabSheet.Create(PageControl);
tab.PageControl:=PageControl;
tab.Caption:='Widok edycyjny';
frame:=TWidokAktualnyFrame.Create(tab);
frame.Parent:=tab;

SetLength(FrameArr, length(FrameArr) + 1)
FrameArr[High(FrameArr)] := frame;

end;

Jednak może być to array of TFrame... nie wiem czemu nie chciałem tego dać [green]

0

no dobrze, ale jak teraz wywołac jakąś procedure, która jest w klasie TWidokEdycyjnyFrame a nie ma jej w TFrame?

0

TWidokEdycyjnyFrame(FrameArr[5]).Metoda;

Powinno działać.

0

bardzo mi pomogłeś Deti, dzieki Ci za to

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