⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufrmcqgpsgroupedit.pas

📁 msc map program to control client of tools,use for map guide
💻 PAS
字号:
//==============================================================================
// $修订版本号: 1.0 $
// $日期      : 2007年7月20日 星期五 10:45:00 $
// $版本号    : 1.0.0 Alpha 1 $
//
// 车辆分组编辑界面功能实现。
// 单位等级是区分组之间上下级关系的唯一标准。
//
// $BeginLog$
// $Endlog  $
// $Copyright 版权所有 (c)2006 TRANSIT  保留所有权利$
//==============================================================================
{: 实现说明:
  I.  初始化方法:
    1. 新建记录时过滤显示单位等级。
    2. 编辑记录时不能再选择单位等级。
  II. 编辑窗口显示之前事件:
     新建记录且登录用户为高级管理员时,在所有的上级用户组中选择登录用户所属组
     为新建记录上级组。
  III.编辑窗口保存之前事件:
    1. 高级管理员不能再新建单位等级为1的组。
    2. 非高级管理员必须选择至少1个上级组。
}


unit ufrmCQGPSGroupEdit;

interface

uses
  Windows, cxLookAndFeelPainters, cxGraphics, dxStatusBar, StdCtrls,
  cxButtons, cxTextEdit, cxControls, cxContainer, cxEdit, cxLabel,
  ExtCtrls, RzPanel, dxDockPanel, dxDockControl, Classes, Controls,
  uBaseDBEditForm, cxMemo, cxMaskEdit, cxDropDownEdit, ComCtrls,
  TbListView, uBaseDBDefs, uBaseDBUtils, Variants, SysUtils,
  Dialogs, Menus;

type
  TfrmCQGPSGroupEdit = class(TBaseDBEditForm)
    dxDockSite1: TdxDockSite;
    dxLayoutDockSite1: TdxLayoutDockSite;
    dxDockPanel1: TdxDockPanel;
    btnSave: TcxButton;
    btnCancel: TcxButton;
    dxStatusBar: TdxStatusBar;
    RzGroupBox1: TRzGroupBox;
    cxLabel1: TcxLabel;
    Name: TcxTextEdit;
    cxLabel2: TcxLabel;
    LevelID: TcxComboBox;
    cxLabel3: TcxLabel;
    GroupRelationshipParent: TTbListView;
    cxLabel4: TcxLabel;
    GroupRelationshipChild: TTbListView;
    cxLabel5: TcxLabel;
    UnitID: TcxComboBox;
    procedure FormCreate(Sender: TObject);

    procedure doOnBeforeEditFormDisplayEvent(_sender: TObject);

    procedure doOnBeforeEditFormSaveEvent(_sender: TObject; var _save_flag: Boolean;
      var _input_hint: string);
  Public
    procedure Initial(_is_new: Boolean); override;
  end;


implementation

uses ufrmCQGPSGroup, Forms;

{$R *.dfm}

procedure TfrmCQGPSGroupEdit.FormCreate(Sender: TObject);
begin
  BeforeEditFormDisplayEvent := doOnBeforeEditFormDisplayEvent;
  BeforeEditFormSaveEvent    := doOnBeforeEditFormSaveEvent;

  CaptionControl := dxDockPanel1;
  HintControl    := dxStatusBar;
  ButtonConfirm  := btnSave;
  ButtonCancel   := btnCancel;
end;

procedure TfrmCQGPSGroupEdit.Initial(_is_new: Boolean);

  function filter_combobox_function(_field_data_value: PBaseDBRefData; _field_name: string;
                                    _filter_data: Variant): Boolean;
  var
    i             : Integer;
    p_field_value : PBaseDBFieldValue;
  begin
    Result := False;

    _filter_data := TBaseDBUtility.ExtractValueByFieldName('UserLevelNo',
                                             _field_data_value^.FieldValueList);
    // 遍历参考表参考数据的字段值列表
    for i := 0 to _field_data_value^.FieldValueList.Count -1 do
    begin
      // 取得数据值指针
      p_field_value := PBaseDBFieldValue(_field_data_value^.FieldValueList.Items[i]);

      if UpperCase(p_field_value^.FieldInfo^.FieldName) = UpperCase(_field_name) then
      begin
        if (_filter_data = 1) then
        begin
          if (p_field_value^.Value >= _filter_data) then
             Result := True
          else
             Result := False;
        end
        Else begin
          if (p_field_value^.Value > _filter_data) then
             Result := True
          else
             Result := False;
        end;
      end;
    end;
  end;

var
  p_field_value          : PBaseDBFieldValue;
  ref_id_orginal         : Integer;
  item_index_orginal     : Integer;
  item_text              : string;
  p_field_info           : PBaseDBFieldInfo;
  p_ref_table            : PBaseDBRefTable;
begin
  inherited;

  if _is_new then
    FilterReferenceComboBox(LevelID, 'LevelNO' ,0 ,@filter_combobox_function)
  else begin
    p_field_value :=
      TBaseDBUtility.ExtractFieldValueByFieldName('LevelID', EditFieldValueList);

    ref_id_orginal := p_field_value^.Value;

    FilterReferenceComboBox(LevelID, 'LevelNO' ,0 ,@filter_combobox_function);

    item_index_orginal :=
      LevelID.Properties.Items.IndexOfObject(Pointer(ref_id_orginal));

    if item_index_orginal = -1 then
    begin
      p_field_value := TBaseDBUtility.ExtractFieldValueByFieldName(
        'LevelID', EditFieldValueList);

      p_field_info := TBaseDBUtility.FindFieldByName('LevelID', FieldList);
      p_ref_table := p_field_info^.RefTableInfo;

      item_text := TBaseDBUtility.RefValueToDisplayText(
        p_ref_table^, p_field_value^.Value);

      LevelID.Properties.Items.InsertObject(
        0, item_text, TObject(Pointer(ref_id_orginal)));

      item_index_orginal := 0;
    end;

    LevelID.ItemIndex := item_index_orginal;

    LevelID.Enabled := False;
  end;
end;


//function TfrmCQGPSGroupEdit.checkIsSelectSelfGroup(_list_view: TTbListView;
//  _login_group_id: Integer; var _parent_group_text: string): boolean;
//var
//  i         : Integer;
//  list_item : TListItem;
//  group_id  : Integer;
//begin
//  Result := False;
//
//  for i := 0 to _list_view.Items.Count - 1 do
//  begin
//    list_item := _list_view.Items.Item[i];
//
//    if not Assigned(list_item) then
//      Continue;
//
//    if list_item.ImageIndex <> 0 then
//      Continue;
//
//    group_id := TBaseDBUtility.ExtractRecordID(TList(list_item.Data));
//
//    if group_id <> - 1 then
//    begin
//      if group_id = _login_group_id then
//      begin
//        _parent_group_text := TBaseDBUtility.ExtractValueByFieldName('Name', TList(list_item.Data));
//
//        Result := True;
//
//        exit;
//      end; // end of group
//    end;  // end of if
//  end;   // end of for
//end;

procedure TfrmCQGPSGroupEdit.doOnBeforeEditFormDisplayEvent(
  _sender: TObject);
var
  i                : Integer;
  list_item        : TListItem;
  group_id         : Integer;
  login_group_id  : Integer;
  purview_group_id: Integer;
begin
  if TfrmCQGPSGroupEdit(_sender).GroupRelationshipParent.Items.Count > 0 then
  begin
    list_item := nil;

    login_group_id := TfrmCQGPSGroup(TfrmCQGPSGroupEdit(_sender).Owner).Group_id ;
    purview_group_id := TfrmCQGPSGroup(TfrmCQGPSGroupEdit(_sender).Owner).Purview_Group_Id;

    for i := 0 to TfrmCQGPSGroupEdit(_sender).GroupRelationshipParent.Items.Count - 1 do
    begin
      // 仅获取登陆用户自身的上级组
      list_item := TfrmCQGPSGroupEdit(_sender).GroupRelationshipParent.Items[i];

      if not Assigned(list_item) then Continue;

      group_id := TBaseDBUtility.ExtractRecordID(TList(list_item.Data));

      if (group_id = login_group_id) and (purview_group_id = 1) and IsNew then
      begin
        list_item.ImageIndex := 0;

        TfrmCQGPSGroupEdit(_sender).GroupRelationshipParent.Enabled := False;
      end; // end of if group
    end;  // end of for
  end;   // end of if
end;

procedure TfrmCQGPSGroupEdit.doOnBeforeEditFormSaveEvent(_sender: TObject;
  var _save_flag: Boolean; var _input_hint: string);
var
  i                : Integer;
  record_count     : Integer;
  purview_group_id : Integer;
  current_level_no : Integer;
  level_no_check   : Boolean;
  is_null_check    : Boolean;
  is_admin_super   : Boolean;
begin
  if Assigned(_sender) then
  begin
    level_no_check := False;
    is_null_check  := False;

    purview_group_id := TfrmCQGPSGroup(TfrmCQGPSGroupEdit(_sender).Owner).Purview_Group_Id;

    current_level_no := ExtractRefComboBoxInfoValue(LevelID, 'LevelNO');

    is_admin_super  := purview_group_id = 1;

    // 仅当超级管理员登陆时验证
    if is_admin_super then
    begin
      //判断是否为超级管理员的等级
      if (current_level_no = 1) and (LevelID.Enabled) then
      begin
        _input_hint := Format('单位等级为%s的所属组已存在!',[LevelID.Text]);

        level_no_check := True;
      end;
    end
    else begin

       // 非管理员用户登陆时加上级用户组选择限制
      record_count := 0;

      for i := 0 to TfrmCQGPSGroupEdit(_sender).GroupRelationshipParent.Items.Count -1 do
      begin
        if TfrmCQGPSGroupEdit(_sender).GroupRelationshipParent.Items[i].ImageIndex = 0 then
           record_count := record_count + 1;
      end;

      if record_count = 0 then
      begin
        _input_hint := '上级用户组不允许为空!';

        is_null_check := True;
      end;
    end;

    if level_no_check or is_null_check then
      _save_flag := False
    else 
      _save_flag := True;

  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -