亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dxjs_dbvalidation.pas

?? Well known and usefull component for delphi 7
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
////////////////////////////////////////////////////////////////////////////
//    Component: TDXJS_DBValidation
//       Author: Alexander Baranovsky (ab@virtlabor.donbass.com)
//               G.E. Ozz Nixon Jr. (staff@bpdx.com)
// ========================================================================
// Source Owner: DX, Inc. 2002, 2004
//    Copyright: All code is the property of DX, Inc. Licensed for
//               resell by Brain Patchwork DX (tm) and part of the
//               DX (r) product lines, which are (c) 1999-2002
//               DX, Inc. Source may not be distributed without
//               written permission from both Brain Patchwork DX,
//               and DX, Inc.
//      License: (Reminder), None of this code can be added to other
//               developer products without permission. This includes
//               but not limited to DCU's, DCP's, DLL's, OCX's, or
//               any other form of merging our technologies. All of
//               your products released to a public consumer be it
//               shareware, freeware, commercial, etc. must contain a
//               license notification somewhere visible in the
//               application.
// Code Version: (3rd Generation)
// ========================================================================
//  Description: on-the-fly implementation of validation hooks for all
//  data-aware components on the form. Implements a Frm OnCreate event,
//  slips a JavaScript OnEnter() and OnExit() hook into the components. If
//  an existing event already existing, the address is stored, and upon a
//  successful JavaScript validation, the old address is then called.
// ========================================================================
////////////////////////////////////////////////////////////////////////////
unit DXJS_DBValidation;
interface

{$I DXJavaScript.def}

uses
{$ifdef VARIANTS}
   variants,
{$endif}
   DB,
   Dialogs,
   Classes,
   Forms;

{$DEFINE DUMP_BASE_SCRIPT}

type
   TDXJS_DBValidation = class(TComponent)
   private
    { Private declarations }
      fParent: TForm;
      fLoaded: Boolean;
      fSuspend: Boolean;
   protected
    { Protected declarations }
      procedure InternalExitValidate(Sender: TObject);
      procedure InternalEnterValidate(Sender: TObject);
      procedure InternalBeforePostValidate(DataSet: TDataSet);
      procedure SetfSuspend(value:boolean);
   public
    { Public declarations }
      constructor Create(AOwner: TComponent); override;
      destructor Destroy; override;
      procedure LinkFieldsandDatasets(SourceCode: TStream);
      procedure OnActivateRehook;
   published
    { Published declarations }
      property LoadedAndReady: Boolean read fLoaded write fLoaded;
      property Suspend:Boolean read fSuspend write SetfSuspend;
   end;

procedure Register;

implementation

uses
   Controls, {setfocus}
   DBCtrls, TypInfo, SysUtils, {TMethod}
   DXString,
   DXJavaScript,
   DXBinaryTree;

type
   PDXLinkList = ^TDXLinkList;
   TDXLinkList = record
      ComponentName: string;
      DataFieldName: string;
      OriginalInstance: Pointer;
      OldOnExit: TNotifyEvent;
      OldOnEnter: TNotifyEvent;
      OldBeforePostHooked:Boolean;
      OldBeforePost: TDataSetNotifyEvent;
      DBAncestorLike: Integer;
         // -1= NOT ASSIGNED
         // 0 = like TDBEdit
         // 1 = like TDBText
         // 2 = like TDBComboBox
         // 3 = like TDBListBox
         // 4 = like TDDRadioGroup
   end;

   TOzzPersist = class(TComponent)
   private
      Suspended:Boolean;
      ComponentList: TStringList;
      fOnExitValidation: TNotifyEvent;
      fOnEnterValidation: TNotifyEvent;
      fBeforePostValidation: TDataSetNotifyEvent;
      procedure ApplyJavaScript(Component: TObject; ComponentName: string;
         RunTimeMethod, RunTimeMethod2: TMethod);
      procedure RemoveJavaScript(Component: TObject; ComponentName: string);
      procedure ApplyDatasetJavaScript(Component: TObject; ComponentName: string;
         RunTimeMethod3: TMethod);
      procedure RemoveDatasetJavaScript(Component: TObject; ComponentName: string);
   protected
      JavaScript: TDXJavaScript;
   public
      constructor Create(Owner: TComponent); override;
      destructor Destroy; override;
   published
      property OnExitValidate: TNotifyEvent read fOnExitValidation
         write fOnExitValidation;
      property OnEnterValidate: TNotifyEvent read fOnEnterValidation
         write fOnEnterValidation;
      property BeforePostValidate: TDataSetNotifyEvent read fBeforePostValidation
         write fBeforePostValidation;
   end;

var
   fOzzHook: TOzzPersist;
   BinTree: TDXBinarySearchTree;

procedure Register;
begin
   RegisterComponents('BPDX JavaScript', [TDXJS_DBValidation]);
end;

function __GetText(Instance: TObject; const Parameters: array of Variant): Variant;
begin
   result := TDBEdit(Instance).Text;
end;

function __SetText(Instance: TObject; const Parameters: array of Variant): Variant;
var
   S: string;
   BinTreeItem: PDXLinkList;
   DBE: TDBEdit;
   Query: PDXLinkList;

begin
   S := Parameters[0];
   New(Query);
   Query^.ComponentName := TComponent(Instance).Name;
   BinTreeItem := BinTree.Find(Query);
   Dispose(Query);
   if Assigned(BinTreeItem) then begin
      DBE := TDBEdit.Create(nil);
      DBE.DataField := BinTreeItem^.DataFieldName;
      SetObjectProp(DBE, 'Datasource', TDataSource(BinTreeItem^.OriginalInstance));
      DBE.DataSource.DataSet.FieldByName(BinTreeItem^.DataFieldName).AsString := S;
      DBE.Free;
   end;
//   SendKeys(S);
   Application.ProcessMessages;
////   SimulateKeystroke(VK_TAB, 0);
end;

function __GetFieldValue(const Parameters: array of Variant): Variant;
var
   BinTreeItem: PDXLinkList;
   DBE: TDBEdit;
   Query: PDXLinkList;

begin
   Result := '';
   if Length(Parameters) = 1 then begin
      New(Query);
      Query^.ComponentName := TDXJavaScript.ToString(Parameters[0]);
      BinTreeItem := BinTree.Find(Query);
      Dispose(Query);
      if Assigned(BinTreeItem) then begin
         DBE := TDBEdit.Create(nil);
         DBE.DataField := BinTreeItem^.DataFieldName;
         SetObjectProp(DBE, 'Datasource', TDataSource(BinTreeItem^.OriginalInstance));
         Result := DBE.DataSource.DataSet.FieldByName(BinTreeItem^.DataFieldName).AsString;
         DBE.Free;
      end;
   end;
end;

function __SetFocus(const Parameters: array of Variant): Variant;
var
   Ws: string;
   I: Integer;
   BinTreeItem: PDXLinkList;
   Query: PDXLinkList;
   fParent: TForm;

begin
   New(Query);
   Query^.ComponentName := 'PARENT_FORM';
   BinTreeItem := BinTree.Find(Query);
   Dispose(Query);
   if Assigned(BinTreeItem) then begin
      fParent := BinTreeItem.OriginalInstance;
      Ws := TDXJavaScript.ToString(Parameters[0]);
      for I := 0 to fParent.ComponentCount - 1 do
         if fParent.Components[I].Name = Ws then begin
            TWinControl(fParent.Components[I]).SetFocus;
            Exit;
         end;
   end;
end;

function __RaiseError(const Parameters: array of Variant): Variant;
var
   Ws: string;

begin
   Ws := TDXJavaScript.ToString(Parameters[0]);
   raise Exception.create(Ws);
end;

constructor TOzzPersist.Create;
begin
   inherited Create(Owner);
   JavaScript := nil;
end;

destructor TOzzPersist.Destroy;
begin
   if Assigned(JavaScript) then JavaScript.Free;
   inherited Destroy;
end;

procedure TOzzPersist.ApplyJavaScript(Component: TObject; ComponentName: string;
   RunTimeMethod, RunTimeMethod2: TMethod);
var
   PropInfo: PPropInfo;
   DesignTimeMethod: TMethod;
   DesignTimeMethod2: TMethod;
   BinTreeItem: PDXLinkList;
   Query: PDXLinkList;

begin
   try
      PropInfo := GetPropInfo(Component.ClassInfo, 'OnExit');
      if PropInfo <> nil then begin
         DesignTimeMethod := GetMethodProp(Component, 'OnExit');
         DesignTimeMethod2 := GetMethodProp(Component, 'OnEnter');
         if fOzzHook.ComponentList.IndexOf(ComponentName + 'OnExit()') > -1 then
            if Assigned(DesignTimeMethod.Code) or
               Assigned(DesignTimeMethod.Data) then begin
               New(Query);
               Query^.ComponentName := ComponentName;
               BinTreeItem := BinTree.Find(Query);
               Dispose(Query);
               if Assigned(BinTreeItem) then begin
                  BinTreeItem^.OldOnExit := TDBEdit(Component).OnExit;
               end;
               SetMethodProp(Component, 'OnExit', RunTimeMethod);
            end
            else
               SetMethodProp(Component, 'OnExit', RunTimeMethod);
         if fOzzHook.ComponentList.IndexOf(ComponentName + 'OnEnter()') > -1 then
            if Assigned(DesignTimeMethod2.Code) or
               Assigned(DesignTimeMethod2.Data) then begin
               New(Query);
               Query^.ComponentName := ComponentName;
               BinTreeItem := BinTree.Find(Query);
               Dispose(Query);
               if Assigned(BinTreeItem) then begin
                  BinTreeItem^.OldOnEnter := TDBEdit(Component).OnEnter;
               end;
               SetMethodProp(Component, 'OnEnter', RunTimeMethod2);
            end
            else
               SetMethodProp(Component, 'OnEnter', RunTimeMethod2);
      end;
   except
      ;
   end;
end;

procedure TOzzPersist.ApplyDatasetJavaScript(Component: TObject; ComponentName: string;
   RunTimeMethod3: TMethod);
var
   PropInfo: PPropInfo;
   DesignTimeMethod: TMethod;
   BinTreeItem: PDXLinkList;
   Query: PDXLinkList;

begin
   try
      PropInfo := GetPropInfo(Component.ClassInfo, 'BeforePost');
      if PropInfo <> nil then begin
         if fOzzHook.ComponentList.IndexOf(ComponentName + 'BeforePost()') > -1 then begin
            DesignTimeMethod := GetMethodProp(Component, 'BeforePost');
            if Assigned(DesignTimeMethod.Code) or
               Assigned(DesignTimeMethod.Data) then begin
               New(Query);
               Query^.ComponentName := ComponentName;
               BinTreeItem := BinTree.Find(Query);
               Dispose(Query);
               if Assigned(BinTreeItem) then Exit;
               New(BinTreeItem);
               BinTreeItem^.ComponentName := ComponentName;
               BinTreeItem^.OriginalInstance := TDataSet(Component);
               BinTreeItem^.OldBeforePostHooked:=Assigned(TDataSet(Component).BeforePost);
               BinTreeItem^.OldBeforePost := TDataSet(Component).BeforePost;
               BinTree.Insert(BinTreeItem);
               SetMethodProp(Component, 'BeforePost', RunTimeMethod3);
            end
            else
               SetMethodProp(Component, 'BeforePost', RunTimeMethod3);
         end;
      end;
   except
      ;
   end;
end;

procedure TOzzPersist.RemoveJavaScript(Component: TObject; ComponentName: string);
var
   PropInfo: PPropInfo;
   DesignTimeMethod: TMethod;
   DesignTimeMethod2: TMethod;
   BinTreeItem: PDXLinkList;
   Query: PDXLinkList;

begin
   try
      PropInfo := GetPropInfo(Component.ClassInfo, 'OnExit');
      if PropInfo <> nil then begin
         DesignTimeMethod := GetMethodProp(Component, 'OnExit');
         DesignTimeMethod2 := GetMethodProp(Component, 'OnEnter');
         if fOzzHook.ComponentList.IndexOf(ComponentName + 'OnExit()') > -1 then
            if Assigned(DesignTimeMethod.Code) or
               Assigned(DesignTimeMethod.Data) then begin
               New(Query);
               Query^.ComponentName := ComponentName;
               BinTreeItem := BinTree.Find(Query);
               Dispose(Query);
               if Assigned(BinTreeItem) then begin
                  TDBEdit(Component).OnExit := BinTreeItem^.OldOnExit;
               end;
            end;
         if fOzzHook.ComponentList.IndexOf(ComponentName + 'OnEnter()') > -1 then
            if Assigned(DesignTimeMethod2.Code) or
               Assigned(DesignTimeMethod2.Data) then begin
               New(Query);
               Query^.ComponentName := ComponentName;
               BinTreeItem := BinTree.Find(Query);
               Dispose(Query);
               if Assigned(BinTreeItem) then begin
                  TDBEdit(Component).OnEnter := BinTreeItem^.OldOnEnter;
               end;
            end;
      end;
   except
      ;
   end;
end;

procedure TOzzPersist.RemoveDataSetJavaScript(Component: TObject; ComponentName: string);
var
   PropInfo: PPropInfo;
   DesignTimeMethod: TMethod;
   BinTreeItem: PDXLinkList;
   Query: PDXLinkList;

begin
   try
      PropInfo := GetPropInfo(Component.ClassInfo, 'BeforePost');
      if PropInfo <> nil then begin
         DesignTimeMethod := GetMethodProp(Component, 'BeforePost');
         if fOzzHook.ComponentList.IndexOf(ComponentName + 'BeforePost()') > -1 then
            if Assigned(DesignTimeMethod.Code) or
               Assigned(DesignTimeMethod.Data) then begin
               New(Query);
               Query^.ComponentName := ComponentName;
               BinTreeItem := BinTree.Find(Query);
               Dispose(Query);
               if Assigned(BinTreeItem) then begin
                  TDataSet(Component).BeforePost := BinTreeItem^.OldBeforePost;
               end
               else TDataSet(Component).BeforePost := nil;
            end;
      end;
   except
      ;
   end;
end;

procedure DXDisposeProc(aData: pointer);
begin
//   FreeMem(PDXLinkList(aData)^.Data,PDXLinkList(aData)^.DataSize);
   Dispose(PDXLinkList(aData));
end;

function DXCompareFunc(aData1, aData2: pointer): integer;
begin
   if PDXLinkList(aData1)^.ComponentName < PDXLinkList(aData2)^.ComponentName
      then Result := -1
   else
      if PDXLinkList(aData1)^.ComponentName > PDXLinkList(aData2)^.ComponentName
      then Result := 1
      else Result := 0;
end;

constructor TDXJS_DBValidation.Create(AOwner: TComponent);
begin
   inherited Create(AOwner);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本久久一区二区三区| 91麻豆精品国产91久久久资源速度| 久久99蜜桃精品| 石原莉奈在线亚洲二区| 亚洲福利国产精品| 亚洲午夜一区二区| 亚洲国产中文字幕在线视频综合| 亚洲人成影院在线观看| 亚洲免费观看视频| 亚洲精品视频免费观看| 亚洲女厕所小便bbb| 亚洲男人的天堂av| 亚洲美女视频在线| 亚洲成人综合视频| 青青草97国产精品免费观看 | 五月婷婷欧美视频| 亚洲成人动漫在线免费观看| 午夜视频在线观看一区二区| 日韩精品1区2区3区| 久久成人免费电影| 国产精品资源在线| 成人久久视频在线观看| 色综合久久久网| 欧美欧美午夜aⅴ在线观看| 综合久久久久久久| 首页亚洲欧美制服丝腿| 久久精品国内一区二区三区 | 欧美不卡视频一区| 久久久久久久性| 日韩伦理av电影| 五月天亚洲婷婷| 精品一区二区国语对白| 国产成a人亚洲| 日本精品一区二区三区四区的功能| 欧美性猛交xxxx乱大交退制版| 91精品国产欧美一区二区18| 久久嫩草精品久久久精品一| 1024成人网| 日韩精品乱码免费| 国产精品一区二区无线| 91理论电影在线观看| 欧美精品777| 国产欧美中文在线| 亚洲国产美女搞黄色| 精品亚洲porn| 91原创在线视频| 日韩一级大片在线| 国产精品国产三级国产有无不卡 | 国产激情91久久精品导航 | 亚洲精品中文字幕乱码三区| 日本vs亚洲vs韩国一区三区二区 | 欧美体内she精视频| 精品国产免费视频| 亚洲欧美另类久久久精品| 久久99在线观看| 99精品1区2区| 欧美不卡123| 亚洲国产精品一区二区久久恐怖片| 激情五月播播久久久精品| 在线观看日韩av先锋影音电影院| 精品少妇一区二区三区免费观看| 日韩一区中文字幕| 久久精品国产一区二区| 在线精品视频免费观看| 久久久久9999亚洲精品| 五月综合激情日本mⅴ| 91在线云播放| 久久久亚洲高清| 午夜一区二区三区视频| 成人av小说网| 久久久精品国产99久久精品芒果 | 成人黄页毛片网站| 在线综合+亚洲+欧美中文字幕| 国产精品久久久久久亚洲伦| 毛片不卡一区二区| 欧美日韩精品欧美日韩精品一| 国产精品久久毛片a| 激情综合色综合久久综合| 欧美美女网站色| 亚洲精品视频在线| gogo大胆日本视频一区| 久久久蜜桃精品| 极品美女销魂一区二区三区免费 | 亚洲国产精品天堂| 国产日产亚洲精品系列| 免费在线看成人av| 欧美男女性生活在线直播观看| 中文字幕在线不卡一区| 国产一区二区三区免费播放| 欧美一区二区在线播放| 亚洲成av人在线观看| 色88888久久久久久影院野外| 国产精品理论在线观看| 成人午夜视频免费看| 精品成人佐山爱一区二区| 蜜乳av一区二区| 日韩一区二区在线看片| 三级精品在线观看| 欧美老人xxxx18| 亚洲123区在线观看| 在线看不卡av| 亚洲二区在线视频| 欧美主播一区二区三区美女| 亚洲裸体在线观看| 99视频一区二区三区| 最新成人av在线| 91视频你懂的| 亚洲精品国产第一综合99久久 | 粉嫩在线一区二区三区视频| 久久亚洲综合色一区二区三区 | 亚洲高清免费在线| 欧美亚洲尤物久久| 亚洲午夜激情av| 欧美日韩www| 日本vs亚洲vs韩国一区三区二区| 日韩一区二区在线播放| 精品一区二区在线看| 2021国产精品久久精品| 国产呦精品一区二区三区网站| 久久蜜桃av一区二区天堂 | 久久综合九色综合97婷婷女人| 韩国av一区二区三区| 国产欧美视频一区二区| av一区二区三区黑人| 亚洲精品网站在线观看| 色av成人天堂桃色av| 亚洲成人av在线电影| 日韩欧美一区中文| 国产麻豆一精品一av一免费| 国产精品美女久久久久久久| 9i在线看片成人免费| 亚洲午夜三级在线| 91精品国产高清一区二区三区蜜臀 | 国产精品理论片在线观看| a4yy欧美一区二区三区| 午夜av一区二区三区| 精品国产亚洲在线| 不卡av在线免费观看| 亚洲制服欧美中文字幕中文字幕| 欧美酷刑日本凌虐凌虐| 久久99九九99精品| 国产精品高潮呻吟| 91精品在线观看入口| 国产精品资源网站| 亚洲另类一区二区| 亚洲电影第三页| 精品处破学生在线二十三| 不卡一卡二卡三乱码免费网站| 亚洲小少妇裸体bbw| 国产亚洲一区二区三区| 99久精品国产| 青青草原综合久久大伊人精品优势| 久久婷婷国产综合精品青草| 99久久精品免费看| 免费日韩伦理电影| 中国色在线观看另类| 欧美日韩在线亚洲一区蜜芽| 免费的成人av| 1区2区3区精品视频| 日韩免费成人网| 一本色道a无线码一区v| 免费成人av资源网| 中文字幕成人av| 91精品国产色综合久久不卡电影| 国产1区2区3区精品美女| 亚洲高清一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 欧美日韩中文字幕一区二区| 国产成人自拍网| 日本亚洲天堂网| 亚洲欧美另类小说| 国产日产欧美精品一区二区三区| 欧美日韩精品免费| 91社区在线播放| 成人综合在线观看| 免费欧美高清视频| 亚洲一区影音先锋| 中文字幕一区二| 欧美一区二区三区免费大片 | 久久精品国产久精国产| 亚洲三级在线播放| 久久免费美女视频| 欧美一区午夜视频在线观看| 色婷婷香蕉在线一区二区| 国产高清不卡一区| 另类小说综合欧美亚洲| 亚洲一二三四久久| 1000精品久久久久久久久| 久久综合狠狠综合久久激情| 欧美精品黑人性xxxx| 色综合色狠狠天天综合色| 成人av综合在线| 成人综合婷婷国产精品久久蜜臀| 蜜桃av一区二区三区| 日韩在线一区二区| 亚洲图片一区二区| 亚洲福利一二三区| 亚洲综合一区二区| 亚洲男女一区二区三区| 亚洲精品午夜久久久|