В форме:
* TCategoryButtons (например, в каждой из 10 кнопок есть 3 категории)
* TPageControl (clean)
Создано 30 (например) разных кадров.
При нажатии кнопки необходимо:
1. Проверить, был ли уже создан кадр (только один кадр для одной кнопки).
2. Создать вкладку в TPageControl и активировать ее.
3. Создайте рамку, соответствующую кнопке, и поместите ее в созданную вкладку (если вкладка закрыта, убейте ее и рамку).
Вот что я мог сделать:
procedure TForm1.CategoryButtons1Categories0Items0Click(Sender: TObject);
var
Client: TTabSheet;
begin
if (not Assigned(Frame2)) then
begin
Client := TTabSheet.Create(Self);
Client.PageControl := PageControl1;
Client.Caption := CategoryButtons1.Categories[0].Items[0].Caption;
PageControl1.ActivePage := Client;
Frame2 := TFrame2.Create(nil);
Frame2.Parent := Client;
end;
end;
Я пытался сделать это следующим образом:
type
TFrameClass = class of tframe;
function GetFrClass(const aClassID: Integer): TFrameClass;
begin
case aClassID of
1:
Result := TFrame2;
2:
Result := TFrame3;
else
Result := nil;
end;
end;
procedure TForm1.CreateFrm(tags: Integer; NameTSh: string);
var
FrClass: TFrameClass;
Frame: tframe;
Client: TTabSheet;
begin
FrClass := GetFrameClass(tags);
if (FrClass <> nil) then
begin
Client := TTabSheet.Create(Self);
Client.PageControl := PageControl1;
Client.Caption := NameTSh;
Frame := FrClass.Create(Client);
Frame.Parent := Client;
end;
end;
Но этот метод не ограничивает количество созданных экземпляров кадра.
Пожалуйста, скажите мне решение!