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

📄 main.pas

📁 某大型医院护士站
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  fcStatusBar, Menus, ComCtrls, Buttons, ExtCtrls, ImgList, StdCtrls,
  wwdblook, ActnList ,DB;

type
  TfrmMain = class(TForm)
    PopupBed: TPopupMenu;
    ppPatientIn: TMenuItem;
    ppPatientOut: TMenuItem;
    ppBedChange: TMenuItem;
    ppBedChangeDept: TMenuItem;
    N36: TMenuItem;
    ppBedOrderIn: TMenuItem;
    ppBedOrderPrint: TMenuItem;
    ppFeeCheck: TMenuItem;
    N38: TMenuItem;
    ppPatientData: TMenuItem;
    N14: TMenuItem;
    ppOpenGreenpass: TMenuItem;
    PopupWard: TPopupMenu;
    ppWardLook: TMenuItem;
    ppWardLookLargeIcon: TMenuItem;
    ppWardLookSmallIcon: TMenuItem;
    ppWardLookList: TMenuItem;
    ppWardLookReport: TMenuItem;
    ppRefresh: TMenuItem;
    N41: TMenuItem;
    ppWardAdd: TMenuItem;
    ppWardSendMsg: TMenuItem;
    ppWardMedSt: TMenuItem;
    N39: TMenuItem;
    ppWardInfo: TMenuItem;
    mmMain: TMainMenu;
    mmOrder: TMenuItem;
    mmBedOrderIn: TMenuItem;
    mmOrderPrint: TMenuItem;
    N4: TMenuItem;
    mmqryOldOrder: TMenuItem;
    mmPatient: TMenuItem;
    mmPatientIn: TMenuItem;
    mmPatientOut: TMenuItem;
    mmBedChange: TMenuItem;
    mmBedChangeDept: TMenuItem;
    N10: TMenuItem;
    mmFindPat: TMenuItem;
    N47: TMenuItem;
    mmPatientData: TMenuItem;
    N16: TMenuItem;
    N17: TMenuItem;
    mmWard: TMenuItem;
    mmWardAdd: TMenuItem;
    J1: TMenuItem;
    N1: TMenuItem;
    N8: TMenuItem;
    N25: TMenuItem;
    mmWardMed: TMenuItem;
    mmWork: TMenuItem;
    N19: TMenuItem;
    N20: TMenuItem;
    N2: TMenuItem;
    ICU1: TMenuItem;
    N3: TMenuItem;
    N5: TMenuItem;
    mmSys: TMenuItem;
    mmSysChangePasswd: TMenuItem;
    mmSysExit: TMenuItem;
    mmReLogin: TMenuItem;
    mmSysHelp: TMenuItem;
    mmSysAbort: TMenuItem;
    HisMsgBar: TfcStatusBar;
    ListViewWard: TListView;
    ImageListOther: TImageList;
    ImageListSmallBed: TImageList;
    ImageListBed: TImageList;
    ControlBar1: TControlBar;
    ToolPanel: TPanel;
    AreaPanel: TPanel;
    BtnBedOrderIn: TSpeedButton;
    BtnPatientIn: TSpeedButton;
    BtnPatientOut: TSpeedButton;
    BtnWardSendmsg: TSpeedButton;
    BtnRefresh: TSpeedButton;
    Label1: TLabel;
    MainActionList: TActionList;
    InWardAction: TAction;
    BedRefreshAction: TAction;
    PatientOutAction: TAction;
    N6: TMenuItem;
    N7: TMenuItem;
    N18: TMenuItem;
    N21: TMenuItem;
    N22: TMenuItem;
    N23: TMenuItem;
    N24: TMenuItem;
    SendMsgAction: TAction;
    OpenOrderAction: TAction;
    ppBlankBed: TMenuItem;
    ppEmergency: TMenuItem;
    ppOutRecall: TMenuItem;
    ChgChargeAction: TAction;
    N29: TMenuItem;
    ppPatBorn: TMenuItem;
    BabyBornAction: TAction;
    PatientProperty: TAction;
    btnPrnOrder: TSpeedButton;
    PrnOrderAction: TAction;
    N31: TMenuItem;
    ppPrnOutNote: TMenuItem;
    dbcb_mDeptSub: TwwDBLookupCombo;
    BlankBedAction: TAction;
    mmInfoQry: TMenuItem;
    mmBedProperty: TMenuItem;
    ppIncludeRecp: TMenuItem;
    ppExcludeRecp: TMenuItem;
    OutRecallAction: TAction;
    ppLocalWard: TMenuItem;
    procedure mmSysExitClick(Sender: TObject);
    procedure ListViewWardChange(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure FormCreate(Sender: TObject);
    procedure mmReLoginClick(Sender: TObject);
    procedure ListViewWardMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure InWardActionExecute(Sender: TObject);
    procedure BedRefreshActionExecute(Sender: TObject);
    procedure PatientOutActionExecute(Sender: TObject);
    procedure OpenOrderActionExecute(Sender: TObject);
    procedure ChgChargeActionExecute(Sender: TObject);
    procedure BabyBornActionExecute(Sender: TObject);
    procedure PatientPropertyExecute(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure ListViewWardDblClick(Sender: TObject);
    procedure ListViewWardDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ListViewWardDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListViewWardEndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure N31Click(Sender: TObject);
    procedure ppEmergencyClick(Sender: TObject);
    procedure PrnOrderActionExecute(Sender: TObject);
    procedure SendMsgActionExecute(Sender: TObject);
    procedure PopupBedPopup(Sender: TObject);
    procedure BlankBedActionExecute(Sender: TObject);
    procedure mmSysChangePasswdClick(Sender: TObject);
    procedure mmBedPropertyClick(Sender: TObject);
    procedure mmWardMedClick(Sender: TObject);
    procedure ppIncludeRecpClick(Sender: TObject);
    procedure ppExcludeRecpClick(Sender: TObject);
    procedure mmInfoQryClick(Sender: TObject);
    procedure dbcb_mDeptSubCloseUp(Sender: TObject; LookupTable,
      FillTable: TDataSet; modified: Boolean);
    procedure ppPrnOutNoteClick(Sender: TObject);
    procedure OutRecallActionExecute(Sender: TObject);
    procedure ppLocalWardClick(Sender: TObject);
  private
    { Private declarations }
  public
    function  ChangeBed(SourceBed, TargetBed : String) : Boolean;  //换床
    procedure PatCheckfee(IsLocalWard :Smallint);
  end;

var
  frmMain: TfrmMain;

implementation

uses DataModule, HisUtilitis, Login, PatientIn, PatientOut, OrderItem,
  ChgCharge, Babyborn, PatiData, PatientAO, QryPrn, PRNDataModule, Sendmsg,
  Passwd, bedProperty, WardMed, patdayfeedtl, baseinfo, LeftNote, OutRecall;

{$R *.DFM}

procedure TfrmMain.mmSysExitClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmMain.ListViewWardChange(Sender: TObject; Item: TListItem;
  Change: TItemChange);
begin
 if Change = ctState then
  begin
    if ((Item <> nil) and (Item.SubItems.Count >= 2)) then
    begin
      if StrToInt(Item.SubItems[7]) >= 1 then  //如果定义出院的病人
      begin
        ListViewWard.OnDragDrop := nil;
        ListViewWard.OnEndDrag  := nil;
        ListViewWard.OnDragOver := nil;
      end
      else
      begin
        ListViewWard.OnDragDrop := ListViewWardDragDrop;
        ListViewWard.OnEndDrag  := ListViewWardEndDrag;
        ListViewWard.OnDragOver := ListViewWardDragOver;
      end;
    end;
  end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Screen.Cursor := crHourGlass;
  with TfrmLogin.Create(Application) do
  begin
    Reload := 0;
    ShowModal;                           //显示登录窗口 frmLogin
    if ( ModalResult = mrOK ) then
    begin
      Application.ShowMainForm := True;   //显示主窗口
      DM.SetSystemTime;                   //设置系统时间
      DM.LoadSysParams;                   //设置系统参数
    end
    else
    begin //用户单击《取消》按钮
      Application.ShowMainForm := False; //不显示主窗口
      Application.Terminate;             //退出程序
    end;
    Free; //释放登录窗口 frmLogin
    Screen.Cursor := crDefault;
  end;
end;

procedure TfrmMain.PatCheckfee(IsLocalWard :Smallint);
var
  tmpInid  :integer;
  tmpTimes :Smallint;
begin
  tmpInid  := 0;
  tmpTimes := 0;

  if ListViewWard.Selected <> Nil then
  begin
    tmpInid := StrtoInt(ListViewWard.Selected.SubItems[2]);
    tmpTimes:= StrtoInt(ListViewWard.Selected.SubItems[6]);
  end else
  begin
    HisErrorPrompt('没有选中病人!');
    SysUtils.Abort;
  end;

  //首先生成清单日期以前的床位费
  with DM.spBedfeecrt do
  begin
    close;
    Params[0].AsInteger := tmpInid;
    params[1].AsDate := Date - 1;
    ExecProc;
  end;

  PRN_DM.clr_DayfeeDtl.ExecSQL;

  with PRN_DM.qryDayfeeDtl do
  begin
    Params[0].AsInteger  := tmpInid;
    Params[1].AsSmallint := tmpTimes;
    if (IsLocalWard = 1) then Params[2].AsString := DM.currWardid;
    Open;
  end;

  PRN_DM.bmDayfeeDtl.Execute;

  PRN_DM.qryPRN_Patientsub.Close;
  PRN_DM.qryPRN_Patientsub.Params[0].AsString := DM.currWardid;
  PRN_DM.qryPRN_Patientsub.Open;
  PRN_DM.bmPatientSub.Execute;

  PRN_DM.bmInvitem.Execute;

  try
    frmPatDayfeeDtl := TfrmPatDayfeeDtl.Create(Self);
    with frmPatDayfeeDtl do
    begin
      qrlbBillDate.Caption := '清单日期:在住期间';

      qryPatDayfeeDtl.Open;
      if qryPatDayfeeDtl.RecordCount > 0 then
      begin
         QuickRep1.Prepare;
         QuickRep1.Preview;
      end
      else
         HisInfoPrompt('没有清单明细数据!!');
    end;
  finally
    Screen.Cursor := crDefault;
    frmPatDayfeeDtl.qryPatDayfeeDtl.Close;
    frmPatDayfeeDtl.Free;
  end;

end;

procedure TfrmMain.mmReLoginClick(Sender: TObject);
begin
  with TfrmLogin.Create(Application) do
  begin
    Reload := 1;
    ShowModal;
    BedRefreshActionExecute(Nil);
    free;
  end;
end;

function TfrmMain.ChangeBed(SourceBed, TargetBed : String) :Boolean;
begin
  if SourceBed = TargetBed then
  begin
    Result := False;
    exit;
  end;

  try
    if DM.ProjHisadt.InTransaction then
      DM.ProjHisadt.Commit;
    DM.ProjHisadt.StartTransaction;
    DM.spchangeBed.Close;
    DM.spChangeBed.Params[0].AsString := DM.currWardid;
    DM.spChangeBed.Params[1].AsString := SourceBed;
    DM.spChangeBed.Params[2].AsString := TargetBed;
    DM.spChangeBed.ExecProc;
    Result := DM.spChangeBed.Params[3].AsInteger > 0;
    DM.spChangeBed.Close;
    DM.ProjHisadt.Commit;
  except
    DM.ProjHisadt.Rollback;
    Result := False;
  end;
end;

procedure TfrmMain.ListViewWardMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    if ListViewWard.GetItemAt(X ,Y) = Nil then
       ListViewWard.OnDblClick := Nil
    else begin
       DM.currBedNo := ListViewWard.Selected.SubItems[1];
       ListViewWard.OnDblClick := ListViewWardDblClick;
    end;
  end;

  if Button = mbRight then
  begin
    if ListViewWard.GetItemAt(X ,Y) = Nil then
       PopupWard.Popup(X + 3, Y + 72)
    else begin
       DM.currBedNo := ListViewWard.Selected.SubItems[1];
       PopupBed.Popup( X + 3,Y + 72);
    end;
  end;

end;

procedure TfrmMain.InWardActionExecute(Sender: TObject);
begin
  with TfrmPatientIn.Create(Self) do
  begin
    if ListViewWard.Selected <> nil then
      DefaultBed := ListViewWard.Selected.SubItems[1];
    ShowModal;
    btnRefresh.Click;
    Free;
  end;
end;

procedure TfrmMain.BedRefreshActionExecute(Sender: TObject);
var
  ListItem: TListItem;
begin
  // Create a ListView item for each image in the ImageList
  with ListViewWard do
  begin
    OnChange := nil;
    Items.Clear;

    dbcb_mDeptSub.Text := Trim(DM.qryDeptSubDeptName.Value);

    with DM.qryWardBed do
    begin
      if Active then Close;
      ParamByName('wardid').AsString := DM.currWardid;
      Open;
      First;
      while not EOF do
      begin
        ListItem := Items.Add;
        if ((FieldByName('inid').isNull) or
            (trim(FieldByName('inid').AsString)=''))  then
            Listitem.Caption :=   FieldByName('Bed').AsString
        else
            Listitem.Caption :=   FieldByName('Bed').AsString + #13
                                 + FieldByName('name').AsString;

        ListItem.SubItems.Add(FieldByName('WardID').AsString);  //SubItems[0]
        ListItem.SubItems.Add(FieldByName('Bed').AsString);     //SubItems[1]
        ListItem.SubItems.Add(FieldByName('Inid').AsString);    //SubItems[2]
        ListItem.SubItems.Add(FieldByName('Name').AsString);    //SubItems[3]

        case FieldByName('sex').AsInteger of                    //SubItems[4]
          0 : begin ListItem.SubItems.Add('女') end;
          1 : begin ListItem.SubItems.Add('男') end;
          else begin ListItem.SubItems.Add('') end;
        end;
        case FieldByName('nurclass').AsInteger of               //SubItems[5]
          1 : begin ListItem.SubItems.Add('一级') end;
          2 : begin ListItem.SubItems.Add('二级') end;
          3 : begin ListItem.SubItems.Add('三级') end;
          else begin ListItem.SubItems.Add('') end;
        end;

        ListItem.SubItems.Add(FieldByName('Times').AsString);     //SubItems[6]
        ListItem.SubItems.Add(FieldByName('Preout').AsString);    //SubItems[7]
        ListItem.SubItems.Add(FieldByName('DeptNum').AsString);   //SubItems[8]
        ListItem.SubItems.Add(FieldByName('Payed').AsString);     //SubItems[9]
        ListItem.SubItems.Add(FieldByName('InDate').AsString);   //SubItems[10]
        ListItem.SubItems.Add(FieldByName('OutDate').AsString);   //SubItems[11]

        if ((FieldByName('inid').isNull) or
            (trim(FieldByName('inid').AsString)=''))  then
          ListItem.ImageIndex := 0     //0 表示空床图标
        else
        begin
          if (FieldByName('Sex').AsInteger = 1) then //男性病人
          begin
             if FieldByName('preout').AsInteger = 1 then
                 ListItem.ImageIndex := 7          //out
             else
               case FieldByName('Nurclass').AsInteger of
                 1 : begin  ListItem.ImageIndex := 1 end;//一级护理
                 2 : begin  ListItem.ImageIndex := 2 end;//二级护理
                 3 : begin  ListItem.ImageIndex := 3 end;//三级护理
                 4 : begin  ListItem.ImageIndex := 9 end;
                 5 : begin  ListItem.ImageIndex := 10 end;
                 6 : begin  ListItem.ImageIndex := 13 end;
                 end;
          end
          else                                    //女性病人
          if (FieldByName('Sex').AsInteger = 0) then
          begin
             if FieldByName('preout').AsInteger = 1 then
                 ListItem.ImageIndex := 8          //out
             else
               case FieldByName('Nurclass').AsInteger of
                 1 : begin  ListItem.ImageIndex := 4 end;//一级护理
                 2 : begin  ListItem.ImageIndex := 5 end;//二级护理
                 3 : begin  ListItem.ImageIndex := 6 end;//三级护理
                 4 : begin  ListItem.ImageIndex := 11 end;
                 5 : begin  ListItem.ImageIndex := 12 end;
                 6 : begin  ListItem.ImageIndex := 14 end;
               end;
          end;
        end;
        Next;
      end;
      Close; //Close qryWardBed
    end;
    OnChange := ListViewWardChange;
  end;

  HisMsgBar.Panels[0].Text := DM.currOperatorName;
  HisMsgBar.Panels[1].Text := DM.currWardName+'('+DM.currWardid+')';
  Caption := '护士工作站管理系统';
  ListViewWard.ViewStyle := vsSmallIcon;
  ListViewWard.ViewStyle := vsIcon;
  frmmain.WindowState := wsmaximized;
end;

procedure TfrmMain.PatientOutActionExecute(Sender: TObject);
begin
  try
    frmPatientOut := TfrmPatientOut.Create(Self);
    if frmPatientOut.ShowModal = mrOK then
       BedRefreshActionExecute(Sender);
  finally
    Screen.Cursor := crDefault;
    frmPatientOut.Free;
  end;
end;

procedure TfrmMain.OpenOrderActionExecute(Sender: TObject);
begin
  OpenOrder;  //打开医嘱 ,过程内容在frmOrderItem
end;

procedure TfrmMain.ChgChargeActionExecute(Sender: TObject);
begin
  try
    frmChgCharge := TfrmChgCharge.Create(Self);
    frmChgCharge.ShowModal;
    BedRefreshActionExecute(Sender);
  finally

⌨️ 快捷键说明

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