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

📄 selectinfo.pas

📁 医药连锁经营管理系统源码
💻 PAS
字号:
unit selectinfo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, VirtualTrees, ActnList, ModuleAction, DB, DBClient, MConnect,
  ImgList, ExtCtrls, RzButton, RzBorder,xBaseFrm,iMainFrm;

type
  pNodeData=^tdptinfo;
  tdptinfo=record
    DepartNo:widestring;
    DepartName:widestring;
  end;
  TFrmSecInfo = class(TXbaseForm)
    Panel1: TPanel;
    Panel2: TPanel;
    cdssetting: TClientDataSet;
    cdsdepart: TClientDataSet;
    dcomcn: TDCOMConnection;
    ActionList1: TActionList;
    fresh: TModlAction;
    addditem: TModlAction;
    editem: TModlAction;
    delitem: TModlAction;
    finditem: TModlAction;
    pntitem: TModlAction;
    closewnd: TModlAction;
    vstree: TVirtualStringTree;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure vstreeBeforeItemErase(Sender: TBaseVirtualTree;
      TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect;
      var ItemColor: TColor; var EraseAction: TItemEraseAction);
    procedure vstreeGetNodeDataSize(Sender: TBaseVirtualTree;
      var NodeDataSize: Integer);
    procedure vstreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: WideString);
    procedure newfresh;
    procedure vstreeDblClick(Sender: TObject);
    function GetLevel(sFormat,sCode:String):Integer;
    procedure AssignNodeData(NodeData: pNodeData; DataSet: TDataSet);
  private
    { Private declarations }
  public
    SvrDepotInfo: TDispatchConnection;
    class function ClassDo(iType: Byte;Value: Variant): Variant;
  end;

var
  FrmSecInfo: TFrmSecInfo;

implementation

{$R *.dfm}
procedure TFrmSecInfo.AssignNodeData(NodeData: pNodeData; DataSet: TDataSet);
begin
  with DataSet do begin
    nodedata^.departno   := FieldByName('departno').AsString;
    NodeData^.departname := FieldByName('departname').AsString;
  end;
end;


function TFrmSecInfo.GetLevel(sFormat,sCode:String):Integer;
var i,Level,iLen:Integer;
begin
  Level:=-1;//如果代码不符合标准,则返回-1
  iLen:=0;
  if (sFormat<>'')and(sCode<>'')then
    for i:=1 to Length(sFormat) do begin
      iLen := iLen+StrToInt(sFormat[i]);
      if Length(sCode)=iLen then begin
        Level:=i;
        Break;
      end;
    end;
  Result:=Level;
end;


class function TFrmSecInfo.ClassDo(iType: Byte;Value: Variant): Variant;
var Node: PVirtualNode;
    NodeData:pNodeData;
begin
  With TfrmSecInfo.Create(Application) do
  begin
    if ShowModal=mrok then
     begin
      Node := vstree.GetFirstSelected;
      if Node=nil then
      Exit;
      NodeData := vstree.GetNodeData(Node);
      Result:=VarArrayOf([NodeData^.DepartNo,NodeData^.DepartName]);
     end;
  end;
end;

procedure TFrmSecInfo.newfresh;
var sKindNo:String;
    h, Level:Integer;
    NodeData: pNodeData;
    vNodes:Array of PVirtualNode; //保存各级节点
    SKindNoFmt:string;
    Node: PVirtualNode;
begin
  sKindNoFmt:='';
  if sKindNoFmt='' then  with cdssetting do begin
    Close;
    CommandText := 'SELECT * FROM SysSetting';
    Open;
    sKindNoFmt := cdssetting.fieldbyname('departnoformat').AsString;
  end;
  if sKindNoFmt='' then begin
    Application.MessageBox('请先设置类别编码格式!', '消息', MB_ICONINFORMATION);
    Exit;
  end;
  h := Length(sKindNoFmt);
  SetLength(vNodes, h+1);
  Screen.Cursor:=crHourGlass;
  vstree.Clear;
  Level:=0;

  //以下是增加第一项
  vstree.RootNodeCount := 1;
  Node := vstree.GetFirst;
  NodeData := vstree.GetNodeData(Node);
  NodeData^.DepartNo:= 'Root';

  vNodes[Level] := Node;
  //以上是增加第一项
  With cdsdepart do begin
    try
      IndexFieldNames := 'departno';
      if Active then
        Refresh
      else
        Open;
      First;
      While Not Eof do begin
        sKindNo := Trim(FieldByName('departno').AsString);
        Level:=GetLevel(sKindNoFmt, sKindNo);
        //返回代码的级数
        //以下是增加子项
        //以下用上一级节点为父节点添加子节点
        if Level>0 then begin//确保代码符合标准
          Node := vstree.AddChild(vNodes[Level-1]);
          NodeData := vstree.GetNodeData(Node);
          AssignNodeData(NodeData, cdsdepart);
          vNodes[Level] := Node;
        end;
        //以上是增加子项
        Next;
      end;
    finally
      Screen.Cursor:=crDefault;
    end;
  end;
  vstree.Expanded[vNodes[0]] := true;//将首节点展开
end;

procedure TFrmSecInfo.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Inherited;
  Action:=CaFree;
end;

procedure TFrmSecInfo.FormCreate(Sender: TObject);
begin
  SvrDepotInfo:=(Application.MainForm as IMainForm).GetConnection(Handle, '', 'dptinfosvr.svrdepart');
  cdsdepart.RemoteServer := SvrDepotInfo;
  cdssetting.RemoteServer := SvrDepotInfo;
end;

procedure TFrmSecInfo.FormShow(Sender: TObject);
begin
  inherited;
  newfresh;
end;

procedure TFrmSecInfo.vstreeBeforeItemErase(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect;
  var ItemColor: TColor; var EraseAction: TItemEraseAction);
begin
   if odd(Node.Index) then
     begin
       ItemColor := $FFEEEE;
       EraseAction := eaColor;
     end;
end;

procedure TFrmSecInfo.vstreeGetNodeDataSize(Sender: TBaseVirtualTree;
  var NodeDataSize: Integer);
begin
   nodedatasize:=sizeof(tdptinfo);
end;

procedure TFrmSecInfo.vstreeGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
   data:pnodedata;
begin
  CellText := '';
  Data := Sender.GetNodeData(Node);
  case Column of
    0:cellText := Data^.DepartNo;
    1:cellText := Data^.DepartName;
  end;
end;

procedure TFrmSecInfo.vstreeDblClick(Sender: TObject);
begin
  ModalResult:=mrOK;
end;

initialization
  RegisterClass(TFrmSecInfo);
Finalization
  UnRegisterClass(TFrmSecInfo);

end.

⌨️ 快捷键说明

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