📄 tj_chose_gkgx.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 + -