亚洲欧美第一页_禁久久精品乱码_粉嫩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麻豆精品久久久久蜜臀| 国产美女一区二区三区| 蜜臀av一区二区在线观看 | 欧美亚洲图片小说| 色婷婷久久综合| 欧美在线免费播放| 欧美日韩三级视频| 日韩欧美视频在线| 久久综合九色综合97婷婷| 国产欧美日韩在线视频| 中文字幕在线一区免费| 一区二区三区四区av| 亚洲大片在线观看| 美女在线视频一区| 国产一区二区在线观看视频| 国产91丝袜在线播放| jlzzjlzz国产精品久久| 欧美系列一区二区| 日韩你懂的电影在线观看| 久久久久国产精品人| 亚洲欧洲一区二区三区| 亚洲综合精品自拍| 日本不卡一区二区三区高清视频| 久久国产剧场电影| av成人老司机| 欧美高清视频在线高清观看mv色露露十八| 日韩一区二区免费高清| 国产日产欧美精品一区二区三区| 亚洲男女毛片无遮挡| 午夜日韩在线电影| 国产精品1024| 91豆麻精品91久久久久久| 3d成人h动漫网站入口| 国产亚洲自拍一区| 亚洲国产日韩精品| 国产精一区二区三区| 91国产免费看| 亚洲精品在线三区| 一区二区三区四区视频精品免费 | 亚洲天堂中文字幕| 日一区二区三区| 国产伦精品一区二区三区在线观看| 北岛玲一区二区三区四区| 欧美日韩国产首页| 国产欧美一区二区精品仙草咪 | 色综合天天做天天爱| 日韩丝袜情趣美女图片| 亚洲欧洲国产日本综合| 日韩二区三区在线观看| 成人美女在线观看| 日韩一区二区视频| 综合久久久久久| 麻豆久久久久久| 欧美在线你懂的| 久久久久久综合| 午夜精品久久久久久久久久| 国产成人亚洲精品青草天美| 欧美日韩国产色站一区二区三区| 国产精品青草综合久久久久99| 天堂va蜜桃一区二区三区漫画版| 成人美女视频在线观看18| 日韩欧美在线1卡| 一区二区三区在线视频播放| 大陆成人av片| 精品国产1区二区| 亚洲午夜成aⅴ人片| 成人97人人超碰人人99| 日韩欧美国产高清| 亚洲成av人影院| 色视频一区二区| 日本一二三不卡| 美国十次综合导航| 91高清在线观看| 中文字幕佐山爱一区二区免费| 国内一区二区视频| 日韩免费电影网站| 亚洲成人激情社区| 日本丰满少妇一区二区三区| 国产精品毛片高清在线完整版| 激情丁香综合五月| 欧美大片日本大片免费观看| 亚洲风情在线资源站| 色诱视频网站一区| 国产精品国产三级国产三级人妇| 国内精品在线播放| 欧美成人vps| 免费人成在线不卡| 欧美精品高清视频| 亚洲va国产va欧美va观看| 色婷婷亚洲综合| 亚洲男人的天堂一区二区| 91亚洲精华国产精华精华液| 国产欧美1区2区3区| 国产高清久久久久| 久久品道一品道久久精品| 极品瑜伽女神91| 久久天堂av综合合色蜜桃网| 精品在线视频一区| 久久婷婷成人综合色| 国产一区二区三区久久久 | 日本亚洲天堂网| 欧美高清精品3d| 视频一区视频二区中文字幕| 欧美在线免费观看亚洲| 亚洲国产成人精品视频| 欧美视频一区二区在线观看| 亚欧色一区w666天堂| 欧美午夜电影网| 午夜精品久久久久久久99水蜜桃 | 亚洲精品一区二区三区99| 另类小说图片综合网| 久久这里只有精品6| 国产精品一区2区| 日本一区免费视频| 99国产精品久久久久久久久久久| 亚洲欧美一区二区三区久本道91| 色综合天天性综合| 午夜欧美电影在线观看| 日韩欧美区一区二| 国产精品系列在线播放| 中文字幕视频一区二区三区久| 色综合中文字幕| 午夜电影久久久| 精品国产乱码久久久久久牛牛| 国产成人精品1024| 亚洲青青青在线视频| 欧美体内she精视频| 美脚の诱脚舐め脚责91| 亚洲国产精品成人久久综合一区| 91色综合久久久久婷婷| 天天影视色香欲综合网老头| 精品久久久久久久久久久久久久久久久 | 亚洲第一电影网| 欧美草草影院在线视频| 国产999精品久久| 一区二区三区在线观看国产| 日韩欧美精品在线| 成人免费视频国产在线观看| 一区二区三区欧美日| 日韩视频国产视频| 成人白浆超碰人人人人| 午夜精品视频一区| 国产女同性恋一区二区| 91福利精品视频| 精品一区二区三区欧美| 亚洲三级理论片| 欧美va亚洲va香蕉在线| 91首页免费视频| 另类人妖一区二区av| 中文字幕佐山爱一区二区免费| 欧美一区二区三区免费观看视频| 成人不卡免费av| 婷婷开心久久网| 国产精品久久一级| 欧美精品一级二级三级| 成人午夜电影久久影院| 首页国产欧美日韩丝袜| 中文字幕欧美区| 欧美一区二区三区播放老司机| 不卡一区中文字幕| 免费看日韩a级影片| 亚洲欧美日韩人成在线播放| 精品捆绑美女sm三区| 欧美调教femdomvk| av一区二区三区黑人| 精品一区二区影视| 亚洲福利视频一区二区| 国产精品久久夜| 久久亚洲综合色一区二区三区| 欧美三区在线视频| 99国内精品久久| 国产成人亚洲精品青草天美| 日韩vs国产vs欧美| 亚洲女与黑人做爰| 亚洲国产成人自拍| 精品国产免费一区二区三区四区| 欧美性色欧美a在线播放| 成人午夜在线播放| 久久99国产精品久久99果冻传媒| 亚洲电影一级黄| 亚洲视频一二区| 国产精品国产三级国产专播品爱网 | 不卡的看片网站| 国产一区在线观看视频| 日本中文一区二区三区| 亚洲曰韩产成在线| 樱桃视频在线观看一区| 亚洲欧美自拍偷拍| 国产日韩精品久久久| 久久亚洲精精品中文字幕早川悠里| 在线电影一区二区三区| 精品视频999| 欧美中文一区二区三区| 色94色欧美sute亚洲13| 97久久超碰精品国产| 99精品国产视频| 99精品视频免费在线观看| a级高清视频欧美日韩| 成人一区二区视频|