Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.03.2013, 22:43
kolyan2288 kolyan2288 вне форума
Прохожий
 
Регистрация: 06.01.2013
Сообщения: 8
Репутация: 10
По умолчанию интерфейс программы склад

привет ребят, разрабатываю интерфейс программы склада, сейчас остановился на разработке интерфейса, вот картинка чего мне нужно сделать. при переходе по дереву открываются новые таблицы и кнопки в зависимости от категории дерева, справа округленно красным.



так вот можно бы поставить GroupBox, но не удобно при написание кода постояяно все мешаеться, TabControl и PageControl удобно с ними но с этими вкладками лишние.

посоветуйте мне как это реализовать более удобным способом, спасибо
Ответить с цитированием
  #2  
Старый 06.03.2013, 23:21
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от kolyan2288
посоветуйте мне как это реализовать более удобным способом, спасибо

Фреймы спасут отца русской демократии.
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  
Старый 07.03.2013, 17:42
kolyan2288 kolyan2288 вне форума
Прохожий
 
Регистрация: 06.01.2013
Сообщения: 8
Репутация: 10
По умолчанию

спс, но помоему очень тяжко фреймы, буду разбераться
Ответить с цитированием
  #4  
Старый 04.04.2013, 16:05
kolyan2288 kolyan2288 вне форума
Прохожий
 
Регистрация: 06.01.2013
Сообщения: 8
Репутация: 10
По умолчанию

lmikle подниму вопрос, если есть источник для новичков использования фреймов дай его, в инете очень мало инфы
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:47.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter