Dziedziczenie po TTabSheet

0

Witam, mam na formie PageControl.
TabSheety będę tworzył dynamicznie.
Będę tworzył jedynie dwa rodzaje ich. Na jednym będzie memo, na drugim jakiś grid.
I teraz tak, mogę mieć jednocześnie kilka TabSheetów jednego i drugiego typu.

No i zastanawiam się, jak stworzyć klasy dziedziczące po TabSheet, w których zaimplementuję wszystko to co mają robić zgodnie z przekazanymi parametrami.

Z kodu no to podejrzewam, że nie powinno być problemu, ale czy da się zrobić jakoś wizualnie? Może z użyciem ramek?

Nie mam zielonego pojęcia. Ktoś ma jakieś pomysły?

0

jakis czas temu brales udzial w takiej dyskusji
http://4programmers.net/Forum/545869?h=#id545869

nie ogladalem kodu tam zaproponowanego
ale z przebiegu dyskusji wynika ze chba moglbys go uzyc.
W designtime robisz sobie (wyklikujesz) te dwa typy zakladek
a w programie tworzysz tyle kopii ile Ci potrzeba.

0

Tak się nie da.
Każdy z tych TTabSheetów ma mieć zaimplementowane inne działanie. A tu kwestia polega na tym, że TTabSheet nie jest jak TForm i służy jedynie do trzymania komponentów.

Dlatego najlepiej by było, gdybym stworzył własny komponent dziedziczący po TPageControl, który w odpowiedni sposób utworzy moje obiekty klasy dziedziczącej po TTabSheet. Ale to raczej przerost treści nad formą ;>

Jeśli nie ma innej opcji spróbuję się jakoś pomęczyć z tymi framesami. Choć jeszcze nie wiem za bardzo jak to ugryźć.

0

Możesz dla każdego rodzaju TTabSheet stworzyć TFrame, który będziesz tworzył i umieszczał na zakładce w konstruktorze klasy dzidziczącej po TTabSheet.

Możesz też stworzyć zakładkę uniwersalną, której konstruktor będzie posiadał parametr odpowiedzialny za zawartość zakładki (jakiś identyfikator framea) albo jeszcze bardziej uniwersalnie - parametr typu class of TFrame.

0
hes napisał(a)

Możesz dla każdego rodzaju TTabSheet stworzyć TFrame, który będziesz tworzył i umieszczał na zakładce w konstruktorze klasy dzidziczącej po TTabSheet.

Możesz też stworzyć zakładkę uniwersalną, której konstruktor będzie posiadał parametr odpowiedzialny za zawartość zakładki (jakiś identyfikator framea) albo jeszcze bardziej uniwersalnie - parametr typu class of TFrame.

Możesz napisać coś więcej o tym ostatnim?

Bo aktualnie(bardziej dla testów) robię tak:

  • tworzę sobie TTabSheet i przypisuję go do PageControl
  • tworzę sobie instancję odpowiedniego Frame'a. Jako Owner i Parent podaję utworzony TabSheet.
0

Klasa rozszerzająca TTabSheet:

unit uTabSheetEx;

interface

uses Classes, ComCtrls, Forms;

type
  TFrameClass = class of TFrame;

  TTabSheetEx = class (TTabSheet)
  private
    fFrame: TFrame;
  public
    constructor Create(AOwner: TPageControl; AFrameClass: TFrameClass; ACaption: String);
  end;

implementation

constructor TTabSheetEx.Create(AOwner: TPageControl; AFrameClass: TFrameClass; ACaption: String);
begin
  inherited Create(AOwner);
  PageControl := AOwner;
  fFrame := AFrameClass.Create(Self);
  InsertControl(fFrame);
  Caption := ACaption;
end;

end.

Przykład użycia (dodanie nowej zakładki):

TTabSheetEx.Create(PageControl1,TMyFrame,'My Tab');

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