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

📄 tj_chose_gkgx.pas

📁 省级集邮品管理ERP
💻 PAS
字号:
{*******************************************************}
{                                                       }
{                                                       }
{                                                       }
{            中软金马公司版权所有。2002.12前            }
{                                                       }
{            编制:中软金马邮资票品项目开发组           }
{                                                       }
{                                                       }
{*******************************************************}
(*
本模块在省级系统管理里面调用。

*)
unit tj_Chose_gkgx;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, Buttons, Db, DBTables, ImgList;

type
  TFrm_Chose_gkgx = class(TForm)
    tv_gkgx: TTreeView;
    bbtn_ok: TBitBtn;
    bbtn_Cancel: TBitBtn;
    ary_GK: TQuery;
    il_GKGX: TImageList;
    procedure FormShow(Sender: TObject);
    procedure bbtn_okClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    procedure Create_List;                                  {创建列表关系}
    procedure Locate_Cur_GuiKou;                            {定位TreeView位置}
    procedure Clear_Node;                                   {删除所有TreeView控件的所有节点和数据}
    function Find_Max(l_gkgx: string): string;              {查找最大的标号}
  public
    { Public declarations }
  end;

type
  PView_Data = ^TView_Data;
  TView_Data = record
    DWDM: string;
    gkgx: string;
  end;

var
  Frm_Chose_gkgx: TFrm_Chose_gkgx;
  cur_dwdm: string;                                         {当前单位代码}
  Old_gkgx: string;                                         {原来的归口关系}
  gkgx: string;                                             {新的归口关系}
  gkgx_MC: string;                                          {新的归口关系的名称}

implementation

{$R *.DFM}
{
选择归口单位的程序,包括根据当前归口关系代码,生成树型结构,供选择新的代码,如果
选择了新的节点,则生成新的代码。通过枚举寻找最小空号,然后生成。
石玉琢 2001.09.17
}

{-------------------------------------------------------------------------------}
procedure TFrm_Chose_gkgx.FormShow(Sender: TObject);
begin
  Show;
  Create_List;
  Locate_Cur_GuiKou;
  tv_gkgx.AutoExpand := True;
end;

{-------------------------------------------------------------------------------}
{确定,生成选择的归口单位号}
procedure TFrm_Chose_gkgx.bbtn_okClick(Sender: TObject);
begin
  if ModalResult = mrOk then
  begin
    if tv_gkgx.Selected.Data <> nil then
    begin
      {判断是否进行了修改}
      if (Copy(PView_Data(tv_gkgx.Selected.Data)^.gkgx, 1, 3) = Copy(Old_gkgx, 1, 3)) or {原来是县级的}
        ((PView_Data(tv_gkgx.Selected.Data)^.gkgx = '000000') and (Copy(Old_gkgx, 4, 3) = '000')) then {原来市市级的}
        gkgx := Old_gkgx
      else
      {如果修改了,则取得修改后的归口单位号码}
      begin
        gkgx := Find_Max(PView_Data(tv_gkgx.Selected.Data)^.gkgx);
        gkgx_MC := tv_gkgx.Selected.Text;
      end;
    end;
  end;
end;

{-------------------------------------------------------------------------------}
{查找最大的标号}
function TFrm_Chose_gkgx.Find_Max(l_gkgx: string): string;
const
  Three_Zero = '000';
var
  i: Integer;
  Tmp_Str: string;
begin
  if Copy(l_gkgx, 1, 3) = '000' then
  begin
    with TQuery.Create(Application) do
    begin
      DatabaseName := 'yzpp';

      Close;
      SQL.Text := 'Select GKGX From TGS_GXDWSJB Where SubStr(GKGX,4,3)=''000''';
      Open;

      for i := 1 to 999 do
      begin
        Tmp_Str := Copy(Three_Zero, 1, 3 - Length(IntToStr(i))) + IntToStr(i) + '000';

        First;
        while not Eof do
        begin
          if FieldByName('GKGX').AsString = Tmp_Str then
            break;
          Next;
        end;
        if Eof then Break;
      end;
      Result := Tmp_Str;
      Free;
    end;
  end
  else
  begin
    with TQuery.Create(Application) do
    begin
      DatabaseName := 'yzpp';

      Close;
      SQL.Text := 'Select GKGX From TGS_GXDWSJB Where SubStr(GKGX,1,3)=''' + Copy(l_gkgx, 1, 3) + '''';
      Open;

      for i := 1 to 999 do
      begin
        Tmp_Str := Copy(l_gkgx, 1, 3) + Copy(Three_Zero, 1, 3 - Length(IntToStr(i))) + IntToStr(i);

        First;
        while not Eof do
        begin
          if FieldByName('GKGX').AsString = Tmp_Str then
            break;
          Next;
        end;
        if Eof then Break;
      end;
      Result := Tmp_Str;
      Free;
    end;
  end;
end;

{------------------------------------------------------------------------------}
{退出时删除结构}
procedure TFrm_Chose_gkgx.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Clear_Node;
end;

{==============================核心部分代码=====================================}
{创建列表关系}
procedure TFrm_Chose_gkgx.Create_List;
var
  View_Data: PView_Data;
  Node: TTreeNode;
  l_dwmc: string;
  i: Integer;
begin
  {增加根节点}
  New(View_Data);
  with TQuery.Create(Application) do
  begin
    DatabaseName := 'yzpp';
    SQL.Text := 'Select DWDM,DWMC From TGS_GXDWSJB where BJ=''1''';
    Open;
    l_dwmc := FieldByName('DWMC').AsString;
    View_Data^.DWDM := FieldByName('DWDM').AsString;
    View_Data^.gkgx := '000000';
    Free;
  end;
  Node := tv_gkgx.Items.AddChildObject(nil, l_dwmc, View_Data);

  {增加二级节点}
  with TQuery.Create(Application) do
  begin
    DatabaseName := 'yzpp';

    Close;
    SQL.Text := 'Select DWDM,DWMC,DWJC,GKGX From TGS_GXDWSJB'#13#10 +
      'Where ZJXJ=''1'' and SubStr(GKGX,4,3)=''000'' and DWDM<>nvl(''' + cur_dwdm + ''',''No Recorder'')' +
      'order by PXM';
    Open;

    while not Eof do
    begin
      New(View_Data);
      l_DWMC := FieldByName('DWMC').AsString;
      View_Data^.DWDM := FieldByName('DWDM').AsString;
      View_Data^.gkgx := FieldByName('GKGX').AsString;
      tv_gkgx.Items.AddChildObject(Node, l_DWMC, View_Data);
      Next;
    end;

    Free;
  end;

  for i := 0 to tv_gkgx.Items.Count - 1 do
    tv_gkgx.Items[i].ImageIndex := 1;
end;

{-------------------------------------------------------------------------------}
{定位TreeView位置}
procedure TFrm_Chose_gkgx.Locate_Cur_GuiKou;
var
  i: Integer;
begin
  for i := 0 to tv_gkgx.Items.Count - 1 do
  begin
    if tv_gkgx.Items[i].Data <> nil then
      if (Copy(PView_Data(tv_gkgx.Items[i].Data)^.gkgx, 1, 3) = Copy(Old_gkgx, 1, 3)) or
        ((PView_Data(tv_gkgx.Items[i].Data)^.gkgx = '000000') and (Copy(Old_gkgx, 4, 3) = '000')) then {原来市市级的}
      begin
        tv_gkgx.Selected := tv_gkgx.Items[i];
        break;
      end;
  end;

end;

{-------------------------------------------------------------------------------}
{删除所有TreeView控件的所有节点和数据}
procedure TFrm_Chose_gkgx.Clear_Node;
var
  i: Integer;
begin
  for i := tv_gkgx.Items.Count - 1 downto 0 do
  begin
    if tv_gkgx.Items[i].Data <> nil then
    begin
      Dispose(tv_gkgx.Items[i].Data);
      tv_gkgx.Items[i].Data := nil;
    end;
    tv_gkgx.Items[i].Delete;
  end;
end;

end.

⌨️ 快捷键说明

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