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

📄 ufundx.~pas

📁 一个会议签到系统
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
*                     这样可以接受的解决了 虽然不是很完美但是还是实用 
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
Procedure PHanHuaDxDBGridGroupPanel(dxDBGridX:TdxDBGrid);
var
  Str:String;
begin
  if not dxDBGridX.ShowGroupPanel   then   Exit;
  if dxDBGridX.GroupColumnCount > 0 then   Exit;
  Str:='托一列在此,可以按此列分组'
      +'                                     ';
  dxDBGridX.Canvas.TextOut(4,7,Str);
end;
{oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*                打印数据 用于票据等主要是通过 Cell32 的打印功能来打印
*      打印内容 >>    班次 发车时间  座位号 到站名  金额  终点站 
*                     手续费 (退票)
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*     sSitNOs 座位号  一次可以传入多个  这样虚控制些效率高些       20031128
*------------------------------------------------------------------------------
*    为了实现灵活的打印  所以代码不做修改  可以编号对应内容
*    把编号写在Cell文件中 打印时候加载文件  找到编号 替换内容在打印
------------------------编码信息------------------------------------------------
*   *****1 班次 2发车时间   3到站名  4 金额, 5 终点站 6 退票手续费*** 座位号*******
*   班次=01BC       发车时间hh:mm=02FCSJ  到站名=03DZM  金额=04JE
*   终点站=05ZDZ    发车时间YYYY=02YYYY 发车时间MM=02MM 发车时间DD=02DD 
*   退票手续费=06TPSXF
*   座位号=07ZWH        --------20031128------是个很好的办法
--------------------------------------------------------------------------------
*      发车时间要注意 订票 不是当日        
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
Procedure PPrintFromCell32(saTxt:array of String;//字符文本
                           iFlag,iSitCount:Integer;                 //标识
                           sSitNOs:String);//Cell文件名称 主要是预揽保存
var
  I,J,iSitRow,iSitCol:Integer;
  Cell32:TCell;
  sCellFileName,Str,sDateYMD,sDatehhmm:String;
  oleTemp:OleVariant;
begin
  iSitRow:=0;
  iSitCol:=0;
  Cell32:=TCell.Create(nil);
  Cell32.DoLogin(WideString('TOPGROUP INC.'), 182, WideString('A404900198056D05FC031F08A70C'));
  sDateYMD:=MyCutString(True,saTxt[1]);
  sDatehhmm:=MyCutString(False,saTxt[1]);

  {*********************** 处理传入的打印数据 *************************}
  {1 班次 2发车时间   3到站名  4 金额,5 终点站 6 退票手续费** 座位号***}
   //打印 售票车票  预订  补票 售票

   if iFlag = 201 then sCellFileName:=ExtractFilePath(Application.ExeName)+'PrintBill201.cll';
   if iFlag = 202 then sCellFileName:=ExtractFilePath(Application.ExeName)+'PrintBill202.cll';
   if not FileExists(sCellFileName)  then Exit;   
   if Cell32.DoOpenFile(sCellFileName) < 0 then begin
      DlgWarningX('打开文件出错');
      Exit;
   end;   
   for I:=0 to Cell32.Rows-1 do begin ///00000000000000置换车票信息;
      for J:=0 to Cell32.Cols-1 do begin
          Cell32.DoGetCellData(J,I,oleTemp);//Cell 是(列,行)
          Str:=oleTemp;Str:=Trim(Str);
          if Str = '01BC'    then Cell32.DoSetCellString(J,I,saTxt[0]);  //班次=01BC
          if Str = '02FCSJ'  then Cell32.DoSetCellString(J,I,sDatehhmm);  //发车时间hh:mm=02FCSJ
          if Str = '03DZM'   then Cell32.DoSetCellString(J,I,saTxt[2]);  //到站名=03DZM
          if Str = '04JE'    then Cell32.DoSetCellString(J,I,saTxt[3]);  //金额=04JE
          if Str = '05ZDZ'   then Cell32.DoSetCellString(J,I,saTxt[4]);  //终点站=05ZDZ
          if Str = '06TPSXF' then Cell32.DoSetCellString(J,I,saTxt[5]);  //退票手续费=06TPSXF
          //发车时间YYYY=02YYYY 发车时间MM=02MM 发车时间DD=02DD  //时间分3 个位置来打印
          if Str = '02YYYY'  then Cell32.DoSetCellString(J,I,Copy(sDateYMD,1,4));
          if Str = '02MM'    then Cell32.DoSetCellString(J,I,Copy(sDateYMD,6,2));
          if Str = '02DD'    then Cell32.DoSetCellString(J,I,Copy(sDateYMD,9,2));
          if Str = '07ZWH'   then begin//座位号=07ZWH//记录下来 座位可能不只一个
             iSitRow:=I;
             iSitCol:=J;
          end;
      end;
   end;
   for I:=0 to iSitCount-1 do begin//因为可能有空做位号 所以必须传座位号
       Str:=FZGetOrderStr(Trim(sSitNOs),' ',I);
       Cell32.DoSetCellString(iSitCol,iSitRow,Str);
       if not FPrintCell32(Cell32) then begin Cell32.Free;Exit;end;
   end;
  {oooooooooooooooooooooooooooo打印oooooooooooooooooooooooooooooooooooo}
  Cell32.Free;
end;
{***********************************  打印  ***********************************}
function  FPrintCell32(CellX:TCell):Boolean;
begin
  Result:=False; 
  CellX.DoRedrawAll();
  try
   //CellX.DoPrintPreview(False);
    //CellX.DoPrint(False);
    Result:=True; 
  except
    DlgWarningX('打印车票出错');
  end;
end;
{oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*     把 DXDBGrid 设置为只读      用再统计分析
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
Procedure PSetDxDBGridReadOnly(dxDBGrid1:TdxDBGrid);
var
  I:Integer;
begin
  dxDBGrid1.OptionsView:=dxDBGrid1.OptionsView+[edgoRowSelect]; 
  for I:=0 to dxDBGrid1.ColumnCount-1 do begin
      //dxDBGrid1.Columns[I].ReadOnly:=False;  
  end; 
end;
Procedure PSetFormDxDBGridReadOnly(FrmX:TForm);//把整个窗体上的表格设置为只读
var
  I:Integer;
begin
  for I:=0 to  FrmX.ComponentCount-1 do begin
    if FrmX.Components[I] is TdxDBGrid then
       PSetDxDBGridReadOnly(TdxDBGrid(FrmX.Components[I]));
  end; 
end;
{ooooooooooooooooooooooooooooo 导出为Excel  ooooooooooooooooooooooooooooo}
Procedure PExportDxGridToExcel(dxDBGridX:TdxDBGrid);
var
  dlgSave:TSaveDialog;
  Str:String;                  
begin
  dlgSave:=TSaveDialog.Create(nil);
  dlgSave.Filter:='Excel文件|*.xls';
  if not dlgSave.Execute then begin
     dlgSave.Free;
     Exit;
  end;
  Str:=LowerCase(dlgSave.FileName);
  Str:=MyCutOutStringB('.xls',Str)+'.xls';
  dxDBGridX.SaveToXLS(Str, True);
  dlgSave.Free;
end;
{oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*        初始化记录对应的编辑筐 用非感应控件 用感应控件的问题太多了
*        这种情况应该字段数量不多  编辑筐种类应少       20031222
-------------------------------------------------------------------------------
*         只处理字符对应的编辑筐
-------------------------------------------------------------------------------
*         这是三个很成功的函数 建立在 uDBIO 的基础上 失败的基础上
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
Procedure PInitOneRecordCtr(saField:array of String;
                            aCtrX:array of TControl;
                            DataSetX:TDataSet);
var
  Str:String;
  I:Integer;
  FDFind:TField;
begin
  if High(saField) <>  High(aCtrX) then  begin
     DlgWarningA('PInitOneRecordCtr=High(saField) <>  High(aCtrX)');
     Exit; 
  end;
  if not DataSetX.Active then begin
     DlgWarningA('PInitOneRecordCtr=not DataSetX.Active');
     Exit;
  end;
  for I:=0 to High(saField) do  begin
    Str:=saField[I];
    FDFind:=DataSetX.FindField(Str);//找出相应的字段名
    if FDFind = nil then begin
       DlgWarningA('PInitOneRecordCtr=没有:'+Str);
       Exit;
    end;
    {ooooooooooooo只处理字符ooooooooooooo}
    if  (FDFind.DataType = ftWideString) or (FDFind.DataType = ftString)
         or (FDFind.DataType = ftMemo) then begin
         if aCtrX[I] is TEdit then  TEdit(aCtrX[I]).MaxLength:=FDFind.DataSize-1;
         if aCtrX[I] is TMemo then  TMemo(aCtrX[I]).MaxLength:=FDFind.DataSize-1;
         if aCtrX[I] is TComboBox then  TComboBox(aCtrX[I]).MaxLength:=FDFind.DataSize-1;
    end;

  end;

end;
{ooooooooooooooooooooooooooooooo 填充 oooooooooooooooooooooooooooooooooooooooo}
{ooooooooooooooooooooooooooooooo  可以 nil ooooooooooooooooooooooooooooooooooo}
Procedure PFillOneRecordCtr(saField:array of String;
                            aCtrX:array of TControl;
                            DataSetX:TDataSet);
var
  Str,S:String;
  I:Integer;
  FDFind:TField;
begin
  if High(saField) <>  High(aCtrX) then  begin
     DlgWarningA('PInitOneRecordCtr=High(saField) <>  High(aCtrX)');
     Exit; 
  end;
  if not DataSetX.Active then begin
     DlgWarningA('PInitOneRecordCtr=not DataSetX.Active');
     Exit;
  end;

  PInitOneRecordCtr(saField,aCtrX,DataSetX);

  for I:=0 to High(saField) do  begin
      Str:=saField[I];      
      FDFind:=DataSetX.FindField(Str);//找出相应的字段名
      if FDFind = nil then begin
         DlgWarningA('PInitOneRecordCtr=没有:'+Str);
         Exit;
      end;
      S:=Trim(DataSetX.FieldByName(Str).AsString);
      if (DataSetX.State <> dsBrowse) and  (DataSetX.State <> dsEdit) then S:='';
      if aCtrX[I] is TEdit        then  (TEdit(aCtrX[I])).Text:=S;
      if aCtrX[I] is TComboBox    then  begin
         //(TComboBox(aCtrX[I])).Text:=S;
         MySetComBoBoxTXT(TComboBox(aCtrX[I]),S);//200401  Edit Fulin
      end;   
      if aCtrX[I] is TMemo        then  (TMemo(aCtrX[I])).Text:=S;
      if aCtrX[I] is TStaticText  then  (TStaticText(aCtrX[I])).Caption:=S;
      if aCtrX[I] is TLabel       then  TLabel(aCtrX[I]).Caption:=S; 
      if (aCtrX[I] is TDateTimePicker) And (S <> '') then
         (TDateTimePicker(aCtrX[I])).Date:=StrToDate(S);
      if aCtrX[I] is TCheckBox    then begin  //感悟
         if TCheckBox(aCtrX[I]).Hint =  S then TCheckBox(aCtrX[I]).Checked:=True;
         if TCheckBox(aCtrX[I]).Hint <> S then TCheckBox(aCtrX[I]).Checked:=False;
      end;

  end;
  
end;
{**********  把控件的直 付给数据原  不 POSt  ********************}
Procedure POneRecordCtrToDBSoure(saField:array of String;
                              aCtrX:array of TWinControl;
                              DataSetX:TDataSet);
var
  Str,S:String;
  I:Integer;
  FDFind:TField;
begin
  if High(saField) <>  High(aCtrX) then  begin
     DlgWarningA('PInitOneRecordCtr=High(saField) <>  High(aCtrX)');
     Exit; 
  end;
  if not DataSetX.Active then begin
     DlgWarningA('PInitOneRecordCtr=not DataSetX.Active');
     Exit;
  end;

  for I:=0 to High(saField) do  begin
      Str:=saField[I];      
      FDFind:=DataSetX.FindField(Str);//找出相应的字段名
      if FDFind = nil then begin
         DlgWarningA('PInitOneRecordCtr=没有:'+Str);
         Exit;
      end;
      S:=Trim(DataSetX.FieldByName(Str).AsString);
      if (DataSetX.State = dsBrowse)  then Exit;//
      if aCtrX[I] is TEdit        then  S:=(TEdit(aCtrX[I])).Text;
      if aCtrX[I] is TComboBox    then  S:=(TComboBox(aCtrX[I])).Text;
      if aCtrX[I] is TMemo        then  S:=(TMemo(aCtrX[I])).Text;
      if aCtrX[I] is TStaticText  then  S:=(TStaticText(aCtrX[I])).Caption;
      if aCtrX[I] is TDateTimePicker  then
         S:=FZDateStr((TDateTimePicker(aCtrX[I])).Date,False);
      if aCtrX[I] is TCheckBox    then begin  //感悟
         if TCheckBox(aCtrX[I]).Checked then S:=TCheckBox(aCtrX[I]).Hint
         else begin//智能人性  自动找金额一样
              if TCheckBox(aCtrX[I]).Hint = '是'   then S:='不是';
              if TCheckBox(aCtrX[I]).Hint = '属于' then S:='不属于';
              if TCheckBox(aCtrX[I]).Hint = '有'   then S:='没有';
         end;
      end;    
      DataSetX.FieldByName(Str).AsString:=S;
  end;
  
end;
{ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*    焦点跳转很繁琐  用一个 通用的函数来解决  Tag 直来判断上下
*    注意第一个应该是  Tag = 1
-------------------------------------------------------------------------------
*   FrmX.ControlCount 不能枚举出所有的控件  回忆晴百林
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
Procedure PSetFocusUpAndDown(bDown:Boolean;//True  下 False 上
                             EdtCtrl:TWincontrol;     //当前控件
                             FrmX:TForm);           //控件所在窗体  还是写出来 传的时候 Self
var
  I,K,J:Integer;
begin
  K:=-1;
  if bDown     then K:=EdtCtrl.Tag+1; //下一个
  if not bDown then K:=EdtCtrl.Tag-1;//上一个
  for I:=0 to FrmX.ComponentCount-1 do begin
      if FrmX.Components[I].Tag = K then begin  
         if  FrmX.Components[I] is TWincontrol then begin//纠错
             IF  FrmX.Components[I] Is TComboBox then begin//是下拉列表
                 if (TComboBox(FrmX.Components[I]).ItemIndex = 0)
                    And (not bDown) then  begin
                       TWincontrol(FrmX.Components[I]).SetFocus;
                       Exit;
                    end;
                 J:=TComboBox(FrmX.Components[I]).Items.Count-1;
                 if (TComboBox(FrmX.Components[I]).ItemIndex = J)
                    And (bDown) then  begin
                       TWincontrol(FrmX.Components[I]).SetFocus;
                       Exit;
                    end;
             end;
             TWincontrol(FrmX.Components[I]).SetFocus;
             Exit;
         end;    
      end;
  end; 

end;               
{oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
end.

⌨️ 快捷键说明

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