Показать сообщение отдельно

  #3  
Старый 18.08.2009, 18:28
BlackSilver
Познающий
Регистрация: 30.01.2009
Сообщений: 30
Провел на форуме:
75077

Репутация: 14
По умолчанию

2cremator:
Внимательнее читай последнее предложение.

Код:
unit uDocsReg;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, cxGraphics, cxCustomData, cxStyles, cxTL, cxTextEdit,
  cxInplaceContainer, cxControls, uDocsTreeMan, StdCtrls, ShlObj, QControls,
  cxShellCommon, cxContainer, cxShellListView, cxListView, cxMCListBox,
  cxEdit, cxCurrencyEdit, cxMaskEdit, cxSpinEdit, cxTimeEdit, uDBRecordsMan,
  cxDropDownEdit, cxCalendar, ExtCtrls, cxLabel, uObjOperationObject,
  uNewObjOperation, uConfig, Buttons, uFrDoc;

type
  TfDocsReg = class(TForm)
    bRefresh: TButton;
    DocsTree: TTreeView;
    pEdit: TPanel;
    bUpdate: TButton;
    cxLabel2: TcxLabel;
    bAdd: TButton;
    bDelete: TButton;
    frDoc: TfrDoc;
    pCover: TPanel;
    pObject: TPanel;
    lCoef: TcxLabel;
    cxLabel1: TcxLabel;
    cxLabel3: TcxLabel;
    cxLabel4: TcxLabel;
    procedure bRefreshClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DocsTreeClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bUpdateClick(Sender: TObject);
    procedure bAddClick(Sender: TObject);
    procedure bDeleteClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure bCalcCostClick(Sender: TObject);
  private
    { Private declarations }
    procedure LoadEdits;
    procedure SetPanelEnabled( PanelNum: integer );

  public
    { Public declarations }
    procedure ShowDocs(FilterObjId: integer=-1);
    procedure ClearActiveOperation;

  end;

var
  fDocsReg: TfDocsReg;

implementation

{$R *.dfm}

procedure TfDocsReg.bRefreshClick(Sender: TObject);
begin
	DocsTreeMan.Refresh;
end;

procedure TfDocsReg.FormCreate(Sender: TObject);
begin
	DocsTreeMan := TDocsTreeMan.Create(DocsTree);
  ClearActiveOperation;
  //pCover.Align := alClient;
  //pObject.Align := alClient;
end;

procedure TfDocsReg.DocsTreeClick(Sender: TObject);
begin
	DBRecords.Release( frDoc.ActiveItem );
  frDoc.ActiveItem := DocsTreeMan.ActiveOperation;

  if frDoc.ActiveItem <> nil then
    SetPanelEnabled( 1 )
  else
    SetPanelEnabled( 0 );
end;

procedure TfDocsReg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
	DBRecords.Release( frDoc.ActiveItem );
  SavePosition(self);
end;

procedure TfDocsReg.bUpdateClick(Sender: TObject);
Var NewId: integer;
begin
  frDoc.SaveEdits;
  if frDoc.ActiveItem.IsNew then
  begin
  	NewId := frDoc.ActiveItem.Insert;
  	DBRecords.Release( frDoc.ActiveItem );
    ClearActiveOperation;
    DocsTreeMan.Refresh;
    DocsTreeMan.SelectNode( NewId );
    frDoc.ActiveItem := DBRecords.TakeObjOperation( NewId );
    SetPanelEnabled( 1 );
  end else
  begin
  	frDoc.ActiveItem.Update;
    DocsTreeMan.Refresh;
    DocsTreeMan.SelectNode( frDoc.ActiveItem.id );
  end;
end;

procedure TfDocsReg.bAddClick(Sender: TObject);
var NewOperation: TObjOperation;
begin
  if (frDoc.ActiveItem <> nil) and
     (frDoc.ActiveItem.id = -1) then
  begin
    DBRecords.Release( frDoc.ActiveItem );
    ClearActiveOperation;
  end;
  NewOperation := TObjOperation.New;
	if fNewObjOperation.ShowModal = mrOk then
  begin
    if (fNewObjOperation.cbDocs.EditValue = Null) or
			 (fNewObjOperation.cbObjects.EditValue = Null) then
    begin
       Beep;
       NewOperation.Free;
       Exit;
    end;
  	NewOperation.SetField('id_doc', fNewObjOperation.cbDocs.EditValue);
  	NewOperation.SetField('id_object', fNewObjOperation.cbObjects.EditValue);
    DBRecords.Release( frDoc.ActiveItem );
    DBRecords.ObjOperations.Add( Pointer( NewOperation.id ), Pointer( NewOperation ) );
    frDoc.ActiveItem := NewOperation;
	  SetPanelEnabled( 1 );
  end else
  	NewOperation.Free;
end;

procedure TfDocsReg.LoadEdits;
begin
  frDoc.ActiveItem.Seize;
  frDoc.LoadEdits;

  pEdit.Enabled := true;
end;

procedure TfDocsReg.ShowDocs(FilterObjId: integer=-1);
begin
	DocsTreeMan.FilterObjId := FilterObjId;
  DocsTreeMan.Refresh;
	ShowModal;
end;

procedure TfDocsReg.bDeleteClick(Sender: TObject);
begin
  if frDoc.ActiveItem.Delete then
  begin
	  DocsTreeMan.Refresh;
  	ClearActiveOperation;
  end;
end;

procedure TfDocsReg.ClearActiveOperation;
begin
  frDoc.ActiveItem := nil;
  SetPanelEnabled( 0 );
end;

procedure TfDocsReg.FormShow(Sender: TObject);
begin
	LoadPosition(self);
end;

procedure TfDocsReg.bCalcCostClick(Sender: TObject);
begin
  frDoc.eCost.Value := TObjOperation( frDoc.ActiveItem ).CalcCost;
end;

procedure TfDocsReg.SetPanelEnabled( PanelNum: integer );
// Устанавливает видимую панель. При PanelNum =
// 0 - Заглушка
// 1 - Редактирование
begin
  pCover.Visible := (PanelNum = 0);
  if PanelNum = 1 then
    LoadEdits;
end;

end.
 
Ответить с цитированием