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

📄 uframgrid.pas

📁 一个会议签到系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*              有的地方需要 很多个表格 一个窗体上
*              看来不得不用Frame 框架了
*oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*              在引用 FramGrid的窗体 在OnCreate or ONShow 事件中一定要调用
*              PInitFramGrid(); 不然会出现地址防问错误 20030408 符林
*oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*              Grid 的配置文件看来要改动了
*oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*              表格的绑定控件 的最大列数为         15
*              如果超过 15 列 就要不能用这种方式 >>>>>>编辑浏览分开
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*              一切都追求最简化
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*              编辑筐的长度问题 有两种方法 1 = 立即验证不能长度就是有限
*              2  保存时在验证 看来选择 第二种方法
*              1 在验证时可以 更简洁 可以少掉一个函数 用第二编程时候又过于繁琐
*              选择哪个??????  20030410
*ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*              PFillfxGrid 后自动加上 验证长度 选  1  看来是最好的  20030411
*oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*              致命的弱点  最恶心的是 表中如果有数据没有被读出来 就不行了 
*oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
8              对一样东西 只有反复的时间 才能得到要领
*oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*             闪烁问题  解决了 绑定控件的原因
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*             点极 添加 初始直不正确问题 今天无意中改好了
*             PSetFxGridAddState  中先后问题  ------------20031125   
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
unit uFramGrid;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  OleCtrls, MSFlexGridLib_TLB, Buttons, ComCtrls, StdCtrls, Db,
  Menus, AppEvnts;

type
  TFramGrid = class(TFrame)
    FxGrid: TMSFlexGrid;
    EdtStrA: TEdit;
    EdtStrB: TEdit;
    EdtStrC: TEdit;
    EdtInt: TEdit;
    EdtFloatA: TEdit;
    EdtFloatB: TEdit;
    CmbStrA: TComboBox;
    CmbStrB: TComboBox;
    CmbInt: TComboBox;
    DTPA: TDateTimePicker;
    DTPB: TDateTimePicker;
    SBtnEdtA: TSpeedButton;
    EdtBtnA: TEdit;
    EdtBtnB: TEdit;
    SBtnEdtB: TSpeedButton;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N5: TMenuItem;
    N9: TMenuItem;
    N4: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    procedure FxGridClick(Sender: TObject);
    procedure FxGridEnter(Sender: TObject);
    procedure FxGridEnterCell(Sender: TObject);
    procedure FxGridScroll(Sender: TObject);
    procedure EdtStrCChange(Sender: TObject);
    procedure EdtStrBChange(Sender: TObject);
    procedure EdtIntChange(Sender: TObject);
    procedure EdtFloatAChange(Sender: TObject);
    procedure EdtFloatBChange(Sender: TObject);
    procedure CmbStrAChange(Sender: TObject);
    procedure CmbStrBChange(Sender: TObject);
    procedure CmbIntChange(Sender: TObject);
    procedure EdtStrAChange(Sender: TObject);
    procedure EdtStrAEnter(Sender: TObject);
    procedure EdtStrBEnter(Sender: TObject);
    procedure EdtStrCEnter(Sender: TObject);
    procedure EdtFloatBEnter(Sender: TObject);
    procedure EdtFloatAEnter(Sender: TObject);
    procedure EdtStrCExit(Sender: TObject);
    procedure EdtStrBExit(Sender: TObject);
    procedure EdtStrAExit(Sender: TObject);
    procedure EdtIntExit(Sender: TObject);
    procedure EdtFloatAExit(Sender: TObject);
    procedure EdtFloatBExit(Sender: TObject);
    procedure CmbStrAExit(Sender: TObject);
    procedure CmbStrBExit(Sender: TObject);
    procedure CmbIntExit(Sender: TObject);
    procedure CmbStrAEnter(Sender: TObject);
    procedure CmbStrBEnter(Sender: TObject);
    procedure CmbIntEnter(Sender: TObject);
    procedure DTPBEnter(Sender: TObject);
    procedure DTPAEnter(Sender: TObject);
    procedure DTPBExit(Sender: TObject);
    procedure DTPAExit(Sender: TObject);
    procedure EdtStrAKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdtStrBKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdtStrCKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdtIntKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdtFloatAKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdtFloatBKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure CmbStrAKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure CmbStrBKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure CmbIntKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DTPBKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DTPAKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdtIntEnter(Sender: TObject);
    procedure EdtIntKeyPress(Sender: TObject; var Key: Char);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure EdtBtnAChange(Sender: TObject);
    procedure EdtBtnBChange(Sender: TObject);
    procedure EdtBtnAEnter(Sender: TObject);
    procedure EdtBtnBEnter(Sender: TObject);
    procedure EdtBtnAExit(Sender: TObject);
    procedure EdtBtnBExit(Sender: TObject);
    procedure EdtBtnAKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdtBtnBKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdtFloatAKeyPress(Sender: TObject; var Key: Char);
    procedure EdtFloatBKeyPress(Sender: TObject; var Key: Char);
    procedure N4Click(Sender: TObject);
    procedure EdtStrAKeyPress(Sender: TObject; var Key: Char);
    procedure EdtStrBKeyPress(Sender: TObject; var Key: Char);
    procedure EdtStrCKeyPress(Sender: TObject; var Key: Char);
    procedure CmbStrAKeyPress(Sender: TObject; var Key: Char);
    procedure CmbStrBKeyPress(Sender: TObject; var Key: Char);
    procedure CmbIntKeyPress(Sender: TObject; var Key: Char);
    procedure DTPAKeyPress(Sender: TObject; var Key: Char);
    procedure DTPBKeyPress(Sender: TObject; var Key: Char);
    procedure EdtBtnAKeyPress(Sender: TObject; var Key: Char);
    procedure EdtBtnBKeyPress(Sender: TObject; var Key: Char);
    procedure N7Click(Sender: TObject);
    procedure CmbIntContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
    procedure AppEvtMessage(var Msg: tagMSG; var Handled: Boolean);
    procedure N8Click(Sender: TObject);

  private
    { Private declarations }
  public
    {****用于绑定控件******}
    GridControl:array of TGridColCon;
    iClickLastRowAddOneRow:Integer; //点记 最后一行时 再增加一行; 888 不增加
     {ooooooooooooooooooooooooooooooooooooooooooooooooooooo}
    //保存每列的最大长度用于限制输入//要保存字端对应的顺序好fxgrid
    iaMaxLength,iaSaveCol,iaNotStrCol:array of Integer;
    saFramFields,saSaveFd:array of String;//保存每列对应字段//要保存的字端
    saFramCaption:array of String;        //保存表格的标题
    {ooooooooooooooooooooooooooooooooooooooooooooooooooooo}
    procedure PSetControlInGridVisible(bV: Boolean);
    Procedure PConfigIO(bRead:Boolean);
    Procedure PBingDingBtnToEdit();
   
    {ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
    {****下面这个几个函数是有顺序的应该一气呵成  不然就会觉得繁琐***}
    {*****建议都写在 Form OnShow 事件中****************************************}
    Procedure PInitFramGrid();

    Procedure PFillCaption(saBiaoTi:array of String);    // 外部必须调用 ---2---
    Procedure PSetFieldForCol(saFields:array of String); //外部必须调用----3-----------
    Procedure PBingDingCtrlA(iaColNo:array of Integer; caControl:Array of TWincontrol);//---4---
    Procedure PBingDingCtrlB(caControl:Array of TWincontrol);//---外部必须调用---4 推荐使用---
    Procedure PFillfxGrid(DBQry:TDataSet);                   //外部必须调用----5-----//
    {*******************在这个函数后面自动加上编辑筐长度限制*******************}

    {*************************保存语句****************************}
    function  FGetFramGridInSertSQL(sTableName:String):String;
    Procedure PSetFramGridReadOnly();

    {*************************添加****************************}
    Procedure PSetFxGridAddState(iFocusCol:Integer);
    Procedure PSetAPpendRow(bBiaoShi:Boolean);

    function  FControlISNil():Boolean;
    
    { Public declarations }
  end;

implementation

uses uFuntionSys;

{$R *.DFM}

{ TFramGrid }

{oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
{oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
procedure TFramGrid.PSetControlInGridVisible(bV: Boolean);
var
 I:integer;
begin
  for I:=0 to FxGrid.ControlCount-1 do begin
      FxGrid.Controls[I].Visible:=bV;
  end;
end;

procedure TFramGrid.FxGridClick(Sender: TObject);
var
  I:Integer;
  Str:String;
begin
  //是否处于编辑状态;
  Str:='';
  for I:=0 to High(self.GridControl) do begin
      if Self.GridControl[I].conName  <> nil then Str:='AAA'; 
  end;
  if Str = '' then Exit;

  Str:='';
  for I:=0 to FxGrid.Cols-1 do begin
      if FxGrid.Row-1 < FxGrid.FixedRows then begin
         Str:='';
         Break;
      end;   
      Str:=Str+FxGrid.TextMatrix[FxGrid.Row-1,I];
  end;
  Str:=Trim(Str);
  {***点极 最后一行时 没有动静***}
  if (FxGrid.Row = FxGrid.Rows-1) and (Str <> '') and (iClickLastRowAddOneRow <> 888 )then begin
     FxGrid.Rows:=FxGrid.Rows+1;
     FxGrid.Row:=FxGrid.Rows-2;
  end;   
  if MyGridClick(Self.GridControl) then
     FxGrid.OnEnterCell(Sender);
end;

procedure TFramGrid.FxGridEnter(Sender: TObject);
begin
  if Self.FxGrid.Rows<3 then
     Self.FxGrid.Rows:=3;
end;

procedure TFramGrid.FxGridEnterCell(Sender: TObject);
begin
  if FControlISNil then Exit;//选中的滚动问题20030711 Add fulin
  MyGridEnterCell(Self.GridControl,Self.FxGrid);
end;

procedure TFramGrid.FxGridScroll(Sender: TObject);
begin
  if FControlISNil then Exit;//选中的滚动问题20030711
  MyGridScroll(Self.GridControl,Self.FxGrid);
end;
{==============================================================================}

procedure TFramGrid.EdtStrCChange(Sender: TObject);
begin
  Self.FxGrid.Text:=Self.EdtStrC.text;
  if High(iaMaxLength) < FxGrid.Col then Exit;
  if iaMaxLength[FxGrid.Col] = 0 then Exit;
  EdtStrC.MaxLength:=iaMaxLength[FxGrid.Col];
end;

procedure TFramGrid.EdtStrBChange(Sender: TObject);
begin
  Self.FxGrid.Text:=Self.EdtStrB.text;
  if High(iaMaxLength) < FxGrid.Col then Exit;
  if iaMaxLength[FxGrid.Col] = 0    then Exit;
  EdtStrB.MaxLength:=iaMaxLength[FxGrid.Col];
end;

procedure TFramGrid.EdtIntChange(Sender: TObject);
begin
 Self.FxGrid.Text:=Self.EdtInt.text;
end;

procedure TFramGrid.EdtFloatAChange(Sender: TObject);
begin
 Self.FxGrid.Text:=Self.EdtFloatA.text;
end;

procedure TFramGrid.EdtFloatBChange(Sender: TObject);
begin
 Self.FxGrid.Text:=Self.EdtFloatB.text;
end;

procedure TFramGrid.CmbStrAChange(Sender: TObject);
begin
 Self.FxGrid.Text:=Self.CmbStrA.text;
 if High(iaMaxLength) < FxGrid.Col then Exit;
 if iaMaxLength[FxGrid.Col] = 0 then Exit;
 CmbStrA.MaxLength:=iaMaxLength[FxGrid.Col]; 
end;

procedure TFramGrid.CmbStrBChange(Sender: TObject);
begin
 Self.FxGrid.Text:=Self.CmbStrB.text;
 if High(iaMaxLength) < FxGrid.Col then Exit;
 if iaMaxLength[FxGrid.Col] = 0 then Exit;
 CmbStrB.MaxLength:=iaMaxLength[FxGrid.Col]; 
end;

procedure TFramGrid.CmbIntChange(Sender: TObject);
begin
  Self.FxGrid.Text:=Self.CmbInt.text;
end;

procedure TFramGrid.EdtStrAChange(Sender: TObject);
begin
  Self.FxGrid.Text:=Self.EdtStrA.text;
  if High(iaMaxLength) < FxGrid.Col then Exit;
  if iaMaxLength[FxGrid.Col] = 0 then Exit;
  EdtStrA.MaxLength:=iaMaxLength[FxGrid.Col];  
end;

procedure TFramGrid.EdtStrAEnter(Sender: TObject);
begin
  MyConEnter(TEdit(Sender),Self.FxGrid);
end;

procedure TFramGrid.EdtStrBEnter(Sender: TObject);
begin
  inherited;
  MyConEnter(TEdit(Sender),Self.FxGrid);
end;

procedure TFramGrid.EdtStrCEnter(Sender: TObject);
begin
  inherited;
  MyConEnter(TEdit(Sender),Self.FxGrid);
end;

⌨️ 快捷键说明

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