|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
интерфейс программы склад
привет ребят, разрабатываю интерфейс программы склада, сейчас остановился на разработке интерфейса, вот картинка чего мне нужно сделать. при переходе по дереву открываются новые таблицы и кнопки в зависимости от категории дерева, справа округленно красным.
так вот можно бы поставить GroupBox, но не удобно при написание кода постояяно все мешаеться, TabControl и PageControl удобно с ними но с этими вкладками лишние. посоветуйте мне как это реализовать более удобным способом, спасибо |
#2
|
|||
|
|||
Цитата:
Фреймы спасут отца русской демократии. TFrame, это практически форма, но не может существовать самостоятельно. При переключении по узлам "убиваешь" существующий фрейм и создаешь соотв. текущему узлу и кладешь его на нужный контейнер. Вот пример из моего проекта: Код:
type TDialogMode = (dmNew, dmEdit); TServerForm = class(TForm) pnButtons: TPanel; pnBody: TPanel; btOK: TButton; btCancel: TButton; bvButtons: TBevel; tvPages: TTreeView; gbPage: TGroupBox; ilPages: TImageList; pnPage: TPanel; procedure tvPagesCollapsing(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean); procedure tvPagesChange(Sender: TObject; Node: TTreeNode); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure tvPagesChanging(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean); procedure btOKClick(Sender: TObject); private { Private declarations } FItem : TModelItem; FFrame : TServerBaseFrame; FSelectedNode : TTreeNode; procedure ClosePage; procedure ShowPage; public { Public declarations } function Execute(ADialogMode : TDialogMode; var AItem : TModelItem) : Boolean; end; var ServerForm: TServerForm; implementation {$R *.dfm} { TServerForm } function TServerForm.Execute(ADialogMode: TDialogMode; var AItem: TModelItem): Boolean; var I : Integer; begin For I := 0 To tvPages.Items.Count-1 Do tvPages.Items[i].Expand(True); Case ADialogMode Of dmNew : Caption := 'New server'; dmEdit : Caption := 'Edit server'; End; FItem.Assign(AItem); tvPages.Selected := tvPages.Items[0]; Result := ShowModal = mrOK; If Result Then AItem.Assign(FItem); end; procedure TServerForm.tvPagesCollapsing(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean); begin AllowCollapse := False; end; procedure TServerForm.FormCreate(Sender: TObject); begin FItem := TModelItem.Create; FFrame := Nil; FSelectedNode := Nil; end; procedure TServerForm.FormDestroy(Sender: TObject); begin FreeAndNil(FItem); end; procedure TServerForm.tvPagesChange(Sender: TObject; Node: TTreeNode); begin If FSelectedNode <> tvPages.Selected Then Begin ClosePage; FSelectedNode := tvPages.Selected; ShowPage; End; end; procedure TServerForm.ShowPage; begin // Open new frame If FSelectedNode <> Nil Then Begin //gbPage.Caption := FSelectedNode.Text; FFrame := CreateFrame(FSelectedNode.ImageIndex); If FFrame <> Nil Then Begin FFrame.LoadServer(FItem); FFrame.Parent := pnPage; FFrame.Align := alClient; End; End; end; procedure TServerForm.ClosePage; begin // Save current values and destroy current frame If FFrame <> Nil Then Begin FFrame.SaveServer(FItem); FFrame.Align := alNone; FFrame.Parent := Nil; FreeAndNil(FFrame); End; end; procedure TServerForm.tvPagesChanging(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean); begin AllowChange := True; If FFrame <> Nil Then AllowChange := FFrame.CanClose; end; procedure TServerForm.btOKClick(Sender: TObject); begin If FFrame = Nil Then ModalResult := mrOK Else If FFrame.CanClose Then Begin FFrame.SaveServer(FItem); ModalResult := mrOK; End; end; |
#3
|
|||
|
|||
спс, но помоему очень тяжко фреймы, буду разбераться
|
#4
|
|||
|
|||
lmikle подниму вопрос, если есть источник для новичков использования фреймов дай его, в инете очень мало инфы
|