📄 uframgrid.pas
字号:
{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 + -