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

📄 u_math.pas

📁 一个仓库管理软件包括,仓库入库,仓库出库,库存信息,单据审核,反审核等功能.
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  tvtree.ReadOnly:=True;
  pTD:=allocmem(sizeof(rTreedata));
  pTD^.Code:='0' ;
  pTD^.Name:=FirstNodeTxt ;

  Node[currlevel]:= tvTree.Items.AddObject(nil,pTD^.Name,PTD) ;
 // MaxLevel:= Length(arrangecode);
  qurTree.Close;
  qurTree.SQL.Clear;
  qurTree.SQL.Add(QStr);
  qurTree.open;

  if qurTree.IsEmpty=False then  qurTree.First
                           else  exit;


  while  not qurTree.Eof do
  begin
    pTD:=allocmem(sizeof(rTreedata));
    for i:=0 to qurTree.FieldCount-1 do
    begin
      case i of
      0:pTD^.Code:=qurTree.Fields[0].AsString ;
      1:pTD^.Name:=qurTree.Fields[1].AsString ;
      2:pTD^.DeleteFlag:=qurTree.Fields[2].AsBoolean;
      3:pTD^.EndFlag:=qurTree.Fields[3].Asboolean;
      4:pTD^.SCode:=qurTree.Fields[4].AsString ;
      end;
    end;
      currLevel:=GetTreeLevel(arrangecode,pTD^.Code);   // 返回一个代码级数
      if currLevel >0 then
      begin
          node[currLevel]:= tvTree.Items.AddChildObject(node[currLevel-1],pTD^.Name,PTD) ;
      end;
      qurTree.Next;
  end;
 node[0].Expand(False);//将首节点展开
end;

function GetTreeLevel(sFormat,sCode:String):integer;   // 返回一个代码级数
var
 i,len :integer;
begin
   Result:=-1;
   Len:=0;
   if (sFormat<>'')and(sCode<>'')then
      for i:=1 to Length(sFormat) do
      begin
        Len:=Len+StrToInt(sFormat[i]);
        if Len=Length(sCode) then
        begin
         Result:=i;
         Break;
        end;
     end;


end;

procedure AddTreeNode(tvTree:TTreeView;pTD:pTreedata);//新增结点
var
  tTD:TTreenode;
begin
  if  tvTree.Selected =nil then exit;
  tTD:=tvTree.Items.AddChildObject(tvTree.Selected,pTD^.Name,pTD);
end;
procedure EditTreeNode(tvTree:TTreeView;pTD:pTreedata);//修改结点

begin
  if  tvTree.Selected =nil then exit;
   tvTree.Selected.Data:=ptd;
   tvTree.Selected.Text:=ptd^.Name;
   tvTree.Selected.Focused:=True;
end;


function InttoStrl(value,len:dword):string;     //格式化数值为0000000
begin
  result:=inttostr(value);
  while length(result)<len do
    result:='0'+result;
end;

procedure DestoryTree(tvTree:TTreeView);//摧毁树
var
  i:integer;
  pTD:pTreedata;
begin
  if tvTree.Items.Count<=0 then exit;
    for i:=0 to tvTree.Items.Count-1 do
    begin
     if  tvTree.Items[i].Data<>nil then
     begin
       pTD:=tvTree.Items[i].Data;
       With pTD^ Do
       begin
         Code:=EmptyStr;
         Name:=EmptyStr;
         DeleteFlag:=False;
         EndFlag:=False;
         sCode:=EmptyStr;
         freemem(pTD,sizeof(rTreedata));
       end  ;
       tvTree.Items[i].Data:=nil;
     end;  
    end;

end;
function  DeleteTreeItem(tNode:TTreeNode):Boolean;  //删除树结点
var
  pTD:pTreedata;
begin
  Result:=False;
  ptd:=tNode.Data;
  With pTD^ Do
  begin
    Code:=EmptyStr;
    Name:=EmptyStr;
    DeleteFlag:=False;
    EndFlag:=False;
    freemem(pTD,sizeof(rTreedata));
  end  ;
   tnode.Data:=nil;
   tNode.Delete;
   Result:=True;
end;

procedure  GetNewTreeCode(tvTree:TTreeView;var s :string;Rule:string;var success:integer);//取得新树结点
var
  pCTD,pNTD:pTreedata;
  Ncode:string;//新编码
  m:integer;
 function GetlevelMaxnum(i:integer):integer;
 var
  j:integer;
  s:string;
 begin
    s:='';
    for j:=1 to i  do
    begin
      s:=s+'9' ;
    end;
   result:=strtoint(s);
 end;

begin
 success:=0;
  if tvTree.Selected.Level+1>Length(Rule) then
  begin
     MessageDlg('最大只能分为'+inttostr(Length(Rule))+'级!',mtConfirmation,[mbYes],0);
     exit;
  end;
   pCTD:=tvTree.Selected.Data; //当前结点
  if strtoint(RightStr(pCTD^.Code,strtoint(Copy(Rule,tvTree.Selected.Level+1,1))))>=GetlevelMaxnum(strtoint(Copy(Rule,tvTree.Selected.Level+1,1))) then
  begin
    MessageDlg('当前目录已经用完,不能再新增!',mtConfirmation,[mbYes],0);
    exit;
  end;
  if tvTree.Selected.Level<>0 then
  begin
   Ncode:=pCTD^.Code;
  end
  else
  begin
   Ncode:='';
  end;
  if tvTree.Selected.getFirstChild<>nil then
  begin
     pNTD:=tvTree.Selected.GetLastChild.Data ;//新结点
     Ncode:= pNTD^.Code;
     m:=strtoint(RightStr(Ncode,strtoint(Copy(Rule,tvTree.Selected.Level+1,1))))+1;
     Ncode:=copy(Ncode,1,length(Ncode)-strtoint(Copy(Rule,tvTree.Selected.Level+1,1)))
      + InttoStrl(m,strtoint(Copy(Rule,tvTree.Selected.Level+1,1)));
  end
  else
  begin
      m:=1;
     Ncode:=Ncode+ InttoStrl(m,strtoint(Copy(Rule,tvTree.Selected.Level+1,1)));
  end;


   s:=Ncode;
   success:=1;
end;

function GetPyBm(Str:string):string;  //取得拼音简码
const
  SqlStr='select * from Sys_Dict where hz=:hz';
var
  qryFree:TQuery;
  i:integer;
  s:string;
  //GetPyChar 从数据字典中取出拼音编码
  function GetPyChar(Hz:String):String;
  begin
    Result:='';
    with qryFree do
    begin
      close;
      sql.clear;
      SQL.Text:=SqlStr;
      params.ParamByName('hz').Asstring:=Hz;
      open;
      if not qryFree.IsEmpty then
         Result:=FieldbyName('py').AsString;
    end;
  end;
begin
  i:=1;
  s:='';
  try
    qryFree:=TQuery.Create(nil);
    qryFree.DatabaseName:=DataMod.DBMain.DatabaseName;

    while i<=length(Str) do
    begin
      if Ord(Str[i])>160 then   //如果大于160表示是汉字
      begin
        s:=s+GetPyChar(Copy(Str,i,2));
        inc(i);
      end
      else begin                      //如果小于160表示是非汉字
        if (Str[i] in ['a'..'z'])or(Str[i] in ['A'..'Z']) or
          (Str[i] in ['0'..'9']) then
        s:=s+UpperCase(Str[i]);
      end;
      inc(i);
    end;
    Result:=s;
  finally
    qryFree.Free;
  end;
end;

function GetMonthDayNum(ADate:TDateTime):Integer;//得到任意月天数
var
MyMonth,
MyYear,
MyDay : Word;
MyDayTable : TDayTable;
tmpBool : Boolean;
begin
DecodeDate(ADate, MyYear, MyMonth, MyDay);
tmpBool := IsLeapYear(MyYear);
MyDayTable := MonthDays[tmpBool];
Result := MyDayTable[MyMonth];
end;

function GetDecodeDate(ADate:TDateTime):string;
var
   y,m,d:word;
begin
  DecodeDate(ADate,y,m,d);
  Result:=Formatfloat('0000',y)+'年'+Formatfloat('00',m)+'月'+Formatfloat('00',d)+'日';
end;

function CheckDate(sDate:string):Boolean;
var

 dDate:TDate;
begin

  try
   dDate:=strtodate(copy(sdate,1,4)+'-'+copy(sdate,7,2)+'-'+copy(sdate,11,2));
  except
    MessageDlg('日期格式不正确,请重新填写!',mtConfirmation,[mbYes],0);
    exit;
  end;
end;


procedure AdjustDropDownForm(AControl : TControl; HostControl: TControl);
var
   WorkArea: TRect;
   HostP, PDelpta: TPoint;
begin
   SystemParametersInfo(SPI_GETWORKAREA,0,@WorkArea,0);
   HostP := HostControl.ClientToScreen(Point(0,0));
   PDelpta := AControl.ClientToScreen(Point(0,0));

   AControl.Left := HostP.x;
   AControl.Top := HostP.y + HostControl.Height + 1;

   if (AControl.Width > WorkArea.Right - WorkArea.Left) then
     AControl.Width := WorkArea.Right - WorkArea.Left;

   if (AControl.Left + AControl.Width > WorkArea.Right) then
     AControl.Left := WorkArea.Right - AControl.Width;
   if (AControl.Left < WorkArea.Left) then
     AControl.Left := WorkArea.Left;


   if (AControl.Top + AControl.Height > WorkArea.Bottom) then
   begin
     if (HostP.y - WorkArea.Top > WorkArea.Bottom - HostP.y - HostControl.Height) then
       AControl.Top := HostP.y - AControl.Height;
   end;

   if (AControl.Top < WorkArea.Top) then
   begin
     AControl.Height := AControl.Height - (WorkArea.Top - AControl.Top);
     AControl.Top := WorkArea.Top;
   end;

   if (AControl.Top + AControl.Height > WorkArea.Bottom) then
   begin
     AControl.Height := WorkArea.Bottom - AControl.Top;
   end;

end;

function EditMask(s:string;Len:integer):string;
var
 s1:string;
 i:integer;
begin
  s1:='';
  s1:=s;
  for i:=1 to Len do
  begin
    s1:=s1+'a';
  end;
  s1:=s1+';1;_' ;
  Result:=s1;
end;
function PartitionSize(Size:string):string;
var
 Rs,s:String;
begin
 Rs:='';
 s:=Size;
  while s<>EmptyStr do
  begin
    if pos('/',s)>0 then
    begin
      Rs:=Rs+' , #'+copy(s,1,pos('/',s)-1)+'=Null';
      delete(s,1,pos('/',s)) ;
    end
    else
    begin
     Rs:=Rs+' , #'+s+'=null ';
     delete(s,1,Length(s));
    end;
  end;
  Result:=Rs;
end;



procedure GetCurrPath;
var
 currpath:string;
 i:integer;
begin
 currpath:=application.ExeName;
 for i:=Length(Currpath) downto 1 do
 if CurrPath[i]='\' then break;
 //gAppPath:=copy(currPath,1,i);
end;

procedure CreateBomTree(tvTree:TTreeView;arrangecode:string;FirstNodeTxt:string;qurTree:Tquery);// Bom 树 arrange  排列编码 tNodes 结点
var

  currLevel,childlevel:integer;
  pTD:pTreedata;
  Node:array[0..100] of TTreeNode;
  i,j:integer;
  nodequery,childquery :TQuery;
begin
  currlevel:=0;
  childlevel:=0;
  tvtree.Items.Clear;
  tvtree.ShowRoot:=False;
  tvtree.ReadOnly:=True;
  pTD:=allocmem(sizeof(rTreedata));
  pTD^.Code:='0' ;
  pTD^.Name:=FirstNodeTxt ;

  Node[currlevel]:= tvTree.Items.AddObject(nil,pTD^.Name,PTD) ;
 // MaxLevel:= Length(arrangecode);
  qurTree.Close;
  qurTree.SQL.Clear;
  qurTree.SQL.Add('select PTcode, Ptype from Tech_ProductType where DeleteFlag=0 ' );
  qurTree.open;

  if qurTree.IsEmpty=False then  qurTree.First
                           else  exit;
  nodequery:=TQuery.Create(nil);
  //childquery:=Tquery.create(nil);
  nodequery.DatabaseName:='dbmain';
//  childquery.DatabaseName:='dbmain';
  try

      while  not qurTree.Eof do
      begin
        pTD:=allocmem(sizeof(rTreedata));
        for i:=0 to qurTree.FieldCount-1 do
        begin
          case i of
          0:pTD^.Code:=qurTree.Fields[0].AsString ;
          1:pTD^.Name:=qurTree.Fields[1].AsString ;
          end;
          pTD^.EndFlag:=False;
        end;
          currLevel:=GetTreeLevel(arrangecode,pTD^.Code);   // 返回一个代码级数
          if currLevel >0 then
          begin
             node[currLevel]:= tvTree.Items.AddChildObject(node[currLevel-1],pTD^.Name,PTD) ;
             nodeQuery.Close;
             nodequery.SQL.Clear;
             nodequery.SQL.Add('select Agnateid,AgnateName from Tech_BomBrief where PTCode=:PTcode ');
             nodequery.ParamByName('PTCode').Asstring:=qurtree.fieldbyname('PTCode').AsString;
             nodequery.Open;
             nodequery.First;
             while not nodequery.Eof do
             begin
               pTD:=allocmem(sizeof(rTreedata));
               PTD^.Code:=nodeQuery.fieldbyname('Agnateid').AsString;
               pTD^.Name:=nodeQuery.fieldbyname('AgnateName').AsString;
               pTD^.EndFlag:=True;
               node[currlevel+1]:=tvTree.Items.AddChildObject(node[currLevel],pTD^.Name,PTD) ;


               { childquery.Close;
                childquery.SQL.Clear;
                childquery.SQL.Add(' select a.childid, ChilName=(select AgnateName from  Tech_BomBrief where Agnateid=a.childid) '
                                  +' from Tech_BomStructure a where a.Fatherid=:Fatherid ');
                childquery.ParamByName('Fatherid').AsInteger:= nodeQuery.fieldbyname('Agnateid').asinteger;
                childquery.Open;
                if childquery.IsEmpty=False then
                begin
                  childlevel:=currLevel+1;

⌨️ 快捷键说明

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