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

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

?? tntcontrols.pas

?? TNT Components Source
?? PAS
?? 第 1 頁 / 共 3 頁
字號(hào):
  with TWMChar(Message) do begin
    Assert(Msg = WM_CHAR);
    if not _IsShellProgramming then
      Assert(Unused = 0)
    else begin
      Assert((Unused = 0) or (CharCode <= Word(High(AnsiChar))));
      // When a Unicode control is embedded under non-Delphi Unicode
      //   window something strange happens
      if (Unused <> 0) then begin
        CharCode := (Unused shl 8) or CharCode;
      end;
    end;
    if (CharCode > Word(High(AnsiChar))) then begin
      Unused := CharCode;
      CharCode := ANSI_UNICODE_HOLDER;
    end;
  end;
end;

procedure RestoreWMCharMsg(var Message: TMessage);
begin
  with TWMChar(Message) do begin
    Assert(Message.Msg = WM_CHAR);
    if (Unused > 0)
    and (CharCode = ANSI_UNICODE_HOLDER) then
      CharCode := Unused;
    Unused := 0;
  end;
end;

function GetWideCharFromWMCharMsg(Message: TWMChar): WideChar;
begin
  if (Message.CharCode = ANSI_UNICODE_HOLDER)
  and (Message.Unused <> 0) then
    Result := WideChar(Message.Unused)
  else
    Result := WideChar(Message.CharCode);
end;

procedure SetWideCharForWMCharMsg(var Message: TWMChar; Ch: WideChar);
begin
  Message.CharCode := Word(Ch);
  Message.Unused := 0;
  MakeWMCharMsgSafeForAnsi(TMessage(Message));
end;

//-----------------------------------------------------------------------------------
type
  TWinControlTrap = class(TComponent)
  private
    WinControl_ObjectInstance: Pointer;
    ObjectInstance: Pointer;
    DefObjectInstance: Pointer;
    function IsInSubclassChain(Control: TWinControl): Boolean;
    procedure SubClassWindowProc;
  private
    FControl: TAccessWinControl;
    Handle: THandle;
    PrevWin32Proc: Pointer;
    PrevDefWin32Proc: Pointer;
    PrevWindowProc: TWndMethod;
  private
    LastWin32Msg: UINT;
    Win32ProcLevel: Integer;
    IDEWindow: Boolean;
    DestroyTrap: Boolean;
    TestForNull: Boolean;
    FoundNull: Boolean;
    {$IFDEF TNT_VERIFY_WINDOWPROC}
    LastVerifiedWindowProc: TWndMethod;
    {$ENDIF}
    procedure Win32Proc(var Message: TMessage);
    procedure DefWin32Proc(var Message: TMessage);
    procedure WindowProc(var Message: TMessage);
  private
    procedure SubClassControl(Params_Caption: PAnsiChar);
    procedure UnSubClassUnicodeControl;
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

constructor TWinControlTrap.Create(AOwner: TComponent);
begin
  FControl := TAccessWinControl(AOwner as TWinControl);
  inherited Create(nil);
  FControl.FreeNotification(Self);

  WinControl_ObjectInstance := Classes.MakeObjectInstance(FControl.MainWndProc);
  ObjectInstance := Classes.MakeObjectInstance(Win32Proc);
  DefObjectInstance := Classes.MakeObjectInstance(DefWin32Proc);
end;

destructor TWinControlTrap.Destroy;
begin
  Classes.FreeObjectInstance(ObjectInstance);
  Classes.FreeObjectInstance(DefObjectInstance);
  Classes.FreeObjectInstance(WinControl_ObjectInstance);
  inherited;
end;

procedure TWinControlTrap.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if (AComponent = FControl) and (Operation = opRemove) then begin
    FControl := nil;
    if Win32ProcLevel = 0 then
      Free
    else
      DestroyTrap := True;
  end;
end;

procedure TWinControlTrap.SubClassWindowProc;
begin
  if not IsInSubclassChain(FControl) then begin
    PrevWindowProc := FControl.WindowProc;
    FControl.WindowProc := Self.WindowProc;
  end;
  {$IFDEF TNT_VERIFY_WINDOWPROC}
  LastVerifiedWindowProc := FControl.WindowProc;
  {$ENDIF}
end;

procedure TWinControlTrap.SubClassControl(Params_Caption: PAnsiChar);
begin
  // initialize trap object
  Handle := FControl.Handle;
  PrevWin32Proc := Pointer(GetWindowLongW(FControl.Handle, GWL_WNDPROC));
  PrevDefWin32Proc := FControl.DefWndProc;

  // subclass Window Procedures
  SetWindowLongW(FControl.Handle, GWL_WNDPROC, Integer(ObjectInstance));
  FControl.DefWndProc := DefObjectInstance;
  SubClassWindowProc;

  // For some reason, caption gets garbled after calling SetWindowLongW(.., GWL_WNDPROC).
  TntControl_SetText(FControl, TntControl_GetStoredText(FControl, Params_Caption));
end;

function SameWndMethod(A, B: TWndMethod): Boolean;
begin
  Result := @A = @B;
end;

var
  PendingRecreateWndTrapList: TComponentList = nil;

procedure TWinControlTrap.UnSubClassUnicodeControl;
begin
  // remember caption for future window creation
  if not (csDestroying in FControl.ComponentState) then
    TntControl_SetStoredText(FControl, TntControl_GetText(FControl));

  // restore window procs (restore WindowProc only if we are still the direct subclass)
  if SameWndMethod(FControl.WindowProc, Self.WindowProc) then
    FControl.WindowProc := PrevWindowProc;
  TAccessWinControl(FControl).DefWndProc := PrevDefWin32Proc;
  SetWindowLongW(FControl.Handle, GWL_WNDPROC, Integer(PrevWin32Proc));

  if IDEWindow then
    DestroyTrap := True
  else if not (csDestroying in FControl.ComponentState) then
    // control not being destroyed, probably recreating window
    PendingRecreateWndTrapList.Add(Self);
end;

var
  Finalized: Boolean; { If any tnt controls are still around after finalization it must be due to a memory leak.
                        Windows will still try to send a WM_DESTROY, but we will just ignore it if we're finalized. }

procedure TWinControlTrap.Win32Proc(var Message: TMessage);
begin
  if (not Finalized) then begin
    Inc(Win32ProcLevel);
    try
      with Message do begin
        {$IFDEF TNT_VERIFY_WINDOWPROC}
        if not SameWndMethod(FControl.WindowProc, LastVerifiedWindowProc) then begin
          SubClassWindowProc;
          LastVerifiedWindowProc := FControl.WindowProc;
        end;
        {$ENDIF}
        LastWin32Msg := Msg;
        Result := CallWindowProcW(PrevWin32Proc, Handle, Msg, wParam, lParam);
      end;
    finally
      Dec(Win32ProcLevel);
    end;
    if (Win32ProcLevel = 0) and (DestroyTrap) then
      Free;
  end else if (Message.Msg = WM_DESTROY) or (Message.Msg = TNT_WM_DESTROY) then
    FControl.WindowHandle := 0
end;

procedure TWinControlTrap.DefWin32Proc(var Message: TMessage);

  function IsChildEdit(AHandle: HWND): Boolean;
  var
    AHandleClass: WideString;
  begin
    Result := False;
    if (FControl.Handle = GetParent(Handle)) then begin
      // child control
      SetLength(AHandleClass, 255);
      SetLength(AHandleClass, GetClassNameW(AHandle, PWideChar(AHandleClass), Length(AHandleClass)));
      Result := WideSameText(AHandleClass, 'EDIT');
    end;
  end;

begin
  with Message do begin
    if Msg = WM_NOTIFYFORMAT then
      Result := WMNotifyFormatResult(HWND(Message.wParam))
    else begin
      if (Msg = WM_CHAR) then begin
        RestoreWMCharMsg(Message)
      end;
      if (Msg = WM_IME_CHAR) and (not _IsShellProgramming) and (not Win32PlatformIsXP) then
      begin
        { In Windows XP, DefWindowProc handles WM_IME_CHAR fine for VCL windows. }
        { Before XP, DefWindowProc will sometimes produce incorrect, non-Unicode WM_CHAR. }
        { Also, using PostMessageW on Windows 2000 didn't always produce the correct results. }
        Message.Result := SendMessageW(Handle, WM_CHAR, wParam, lParam)
      end else if (Msg = WM_IME_CHAR) and (_IsShellProgramming) then begin
        { When a Tnt control is hosted by a non-delphi control, DefWindowProc doesn't always work even on XP. }
        if IsChildEdit(Handle) then
          Message.Result := Integer(PostMessageW(Handle, WM_CHAR, wParam, lParam)) // native edit child control
        else
          Message.Result := SendMessageW(Handle, WM_CHAR, wParam, lParam);
      end else begin
        if (Msg = WM_DESTROY) then begin
          UnSubClassUnicodeControl; {The reason for doing this in DefWin32Proc is because in D9, TWinControl.WMDestroy() does a perform(WM_TEXT) operation. }
        end;
        { Normal DefWindowProc }
        Result := CallWindowProcW(PrevDefWin32Proc, Handle, Msg, wParam, lParam);
      end;
    end;
  end;
end;

procedure ProcessCMHintShowMsg(var Message: TMessage);
begin
  if Win32PlatformIsUnicode then begin
    with TCMHintShow(Message) do begin
      if (HintInfo.HintWindowClass = THintWindow)
      or (HintInfo.HintWindowClass.InheritsFrom(TTntCustomHintWindow)) then begin
        if (HintInfo.HintWindowClass = THintWindow) then
          HintInfo.HintWindowClass := TTntCustomHintWindow;
        HintInfo.HintData := HintInfo;
        HintInfo.HintStr := WideGetShortHint(WideGetHint(HintInfo.HintControl));
      end;
    end;
  end;
end;

function TWinControlTrap.IsInSubclassChain(Control: TWinControl): Boolean;
var
  Message: TMessage;
begin
  if SameWndMethod(Control.WindowProc, TAccessWinControl(Control).WndProc) then
    Result := False { no subclassing }
  else if SameWndMethod(Control.WindowProc, Self.WindowProc) then
    Result := True { directly subclassed }
  else begin
    TestForNull := True;
    FoundNull := False;
    ZeroMemory(@Message, SizeOf(Message));
    Message.Msg := WM_NULL;
    Control.WindowProc(Message);
    Result := FoundNull; { indirectly subclassed }
  end;
end;

procedure TWinControlTrap.WindowProc(var Message: TMessage);
var
  CameFromWindows: Boolean;
begin
  if TestForNull and (Message.Msg = WM_NULL) then
    FoundNull := True;

  if (not FControl.HandleAllocated) then
    FControl.WndProc(Message)
  else begin
    CameFromWindows := LastWin32Msg <> WM_NULL;
    LastWin32Msg := WM_NULL;
    with Message do begin
      if Msg = CM_HINTSHOW then
        ProcessCMHintShowMsg(Message);
      if (not CameFromWindows)
      and (IsTextMessage(Msg)) then
        Result := SendMessageA(Handle, Msg, wParam, lParam)
      else begin
        if (Msg = WM_CHAR) then begin
          MakeWMCharMsgSafeForAnsi(Message);
        end;
        PrevWindowProc(Message)
      end;
      if (Msg = TNT_WM_DESTROY) then 
        UnSubClassUnicodeControl; {The reason for doing this in DefWin32Proc is because in D9, TWinControl.WMDestroy() does a perform(WM_TEXT) operation. }
    end;
  end;
end;

//----------------------------------------------------------------------------------

function FindOrCreateWinControlTrap(Control: TWinControl): TWinControlTrap;
var
  i: integer;
begin
  // find or create trap object
  Result := nil;
  for i := PendingRecreateWndTrapList.Count - 1 downto 0 do begin
    if TWinControlTrap(PendingRecreateWndTrapList[i]).FControl = Control then begin
      Result := TWinControlTrap(PendingRecreateWndTrapList[i]);
      PendingRecreateWndTrapList.Delete(i);
      break; { found it }
    end;
  end;
  if Result = nil then
    Result := TWinControlTrap.Create(Control);
end;

procedure SubClassUnicodeControl(Control: TWinControl; Params_Caption: PAnsiChar; IDEWindow: Boolean = False);
var
  WinControlTrap: TWinControlTrap;
begin
  if not IsWindowUnicode(Control.Handle) then
    raise ETntInternalError.Create('Internal Error: SubClassUnicodeControl.Control is not Unicode.');

  WinControlTrap := FindOrCreateWinControlTrap(Control);
  WinControlTrap.SubClassControl(Params_Caption);
  WinControlTrap.IDEWindow := IDEWindow;
end;


//----------------------------------------------- CREATE/DESTROY UNICODE HANDLE

var
  WindowAtom: TAtom;
  ControlAtom: TAtom;
  WindowAtomString: AnsiString;
  ControlAtomString: AnsiString;

type
  TWndProc = function(HWindow: HWnd; Message, WParam, LParam: Longint): Longint; stdcall;

function InitWndProcW(HWindow: HWnd; Message, WParam, LParam: Longint): Longint; stdcall;

    function GetObjectInstance(Control: TWinControl): Pointer;
    var
      WinControlTrap: TWinControlTrap;
    begin
      WinControlTrap := FindOrCreateWinControlTrap(Control);
      PendingRecreateWndTrapList.Add(WinControlTrap);
      Result := WinControlTrap.WinControl_ObjectInstance;
    end;

var
  ObjectInstance: Pointer;
begin
  TAccessWinControl(CreationControl).WindowHandle := HWindow;
  ObjectInstance := GetObjectInstance(CreationControl);
  {Controls.InitWndProc converts control to ANSI here by calling SetWindowLongA()!}
  SetWindowLongW(HWindow, GWL_WNDPROC, Integer(ObjectInstance));

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品主播直播| 国产91清纯白嫩初高中在线观看| 国产亚洲欧美在线| 欧美亚洲动漫精品| 成人午夜视频福利| 久久99精品久久久久久| 亚洲精品免费一二三区| 久久久久9999亚洲精品| 日韩亚洲欧美在线| 在线观看一区二区精品视频| 国产精品一区二区在线观看网站| 五月天亚洲婷婷| 亚洲影视在线观看| 亚洲免费资源在线播放| 国产欧美一区二区精品仙草咪| 欧美一级在线视频| 欧美日韩国产不卡| 91电影在线观看| 91在线国产观看| 成年人午夜久久久| 国产精品一区二区x88av| 免费在线看成人av| 日韩高清电影一区| 亚洲午夜免费福利视频| 亚洲日本成人在线观看| 国产日韩av一区二区| 日韩美女一区二区三区| 欧美一区二区三区成人| 欧美男同性恋视频网站| 欧美性猛片xxxx免费看久爱| 色婷婷av一区二区三区大白胸| av成人老司机| 99久久99久久久精品齐齐| 成人激情小说乱人伦| 成人午夜电影小说| 成人午夜免费视频| 成人av网站免费观看| 成人福利视频在线看| 欧美成人女星排行榜| 欧美伊人久久久久久久久影院| 香蕉加勒比综合久久| 日本一区二区视频在线观看| 国产又黄又大久久| 亚洲成人在线观看视频| 日韩视频一区二区三区在线播放 | 国产乱人伦偷精品视频不卡| 久久精品视频网| 色哟哟一区二区三区| 成人av在线电影| 秋霞午夜鲁丝一区二区老狼| 亚洲精品乱码久久久久久| 精品福利视频一区二区三区| 欧美日韩一卡二卡三卡| 成人自拍视频在线观看| 亚洲综合一二三区| 亚洲国产精品黑人久久久| 91麻豆精品国产91久久久使用方法 | 韩国精品久久久| 一区二区三区四区不卡在线 | 色诱视频网站一区| 亚洲成人免费影院| 精品久久久久久久久久久久包黑料| 蜜臀国产一区二区三区在线播放 | 欧美综合视频在线观看| hitomi一区二区三区精品| 激情综合亚洲精品| 精品一区二区影视| 亚洲v中文字幕| 性感美女久久精品| 北条麻妃一区二区三区| 国产成人精品综合在线观看| 精品国产精品一区二区夜夜嗨| 久久久国产一区二区三区四区小说| 国产视频一区在线观看| 日韩成人午夜电影| 国产一区二区不卡| 99精品国产99久久久久久白柏 | 日韩国产欧美视频| 九色porny丨国产精品| 成人午夜av在线| 欧美男女性生活在线直播观看| 精品国产凹凸成av人导航| 亚洲欧洲精品一区二区精品久久久| 亚洲va在线va天堂| 国产成人精品亚洲午夜麻豆| 欧美亚洲自拍偷拍| 久久精品欧美一区二区三区不卡 | 国产精品久久午夜| 丝袜国产日韩另类美女| 国产成人三级在线观看| 欧美日韩午夜影院| 国产精品久线观看视频| 青青草97国产精品免费观看无弹窗版| 国产很黄免费观看久久| 欧美日本乱大交xxxxx| 中文字幕制服丝袜成人av| 蜜桃一区二区三区在线| 91成人在线免费观看| 国产网站一区二区三区| 免费人成精品欧美精品 | aaa国产一区| 欧美一区二区福利视频| 亚洲激情五月婷婷| 成人少妇影院yyyy| 精品国产一区二区三区四区四| 一区二区在线电影| 大胆亚洲人体视频| 日韩欧美国产综合一区| 亚洲一二三专区| jiyouzz国产精品久久| 精品国产人成亚洲区| 亚洲3atv精品一区二区三区| 97久久精品人人澡人人爽| 久久夜色精品国产欧美乱极品| 午夜视频一区二区| 在线视频你懂得一区| 国产精品毛片久久久久久| 国产一区二区三区免费看 | 欧美主播一区二区三区美女| 国产欧美日韩视频在线观看| 久久国产精品72免费观看| 91.com在线观看| 亚洲成人精品影院| 欧美亚洲禁片免费| 亚洲一区二区在线免费观看视频| 91影院在线观看| 成人欧美一区二区三区在线播放| 国产91对白在线观看九色| 久久这里只精品最新地址| 久久草av在线| 欧美精品一区二区蜜臀亚洲| 美女在线视频一区| 日韩欧美资源站| 另类小说一区二区三区| 欧美不卡一区二区三区| 久久97超碰色| 久久久99精品免费观看不卡| 国产成人在线视频播放| 欧美激情在线观看视频免费| 国产精品一级在线| 欧美国产激情一区二区三区蜜月| 国产成人精品网址| 中文字幕一区av| 欧美午夜在线一二页| 偷拍一区二区三区| 日韩一区二区三区在线| 韩国成人福利片在线播放| 久久精子c满五个校花| 国产成人欧美日韩在线电影| 国产精品久久久久久久久图文区| jlzzjlzz国产精品久久| 亚洲黄色性网站| 欧美年轻男男videosbes| 蜜臀va亚洲va欧美va天堂| 久久精品一区二区三区av| 国产成人自拍在线| 一区二区三区不卡视频| 欧美肥妇free| 精品无人码麻豆乱码1区2区| 欧美国产欧美综合| 色偷偷久久人人79超碰人人澡| 亚洲激情在线播放| 日韩欧美高清一区| 高清成人免费视频| 一区二区三区影院| 日韩女同互慰一区二区| 成人精品小蝌蚪| 午夜在线成人av| 久久久久久综合| 在线视频你懂得一区| 久草在线在线精品观看| 国产精品久久国产精麻豆99网站| 欧美视频三区在线播放| 国内精品久久久久影院薰衣草| 亚洲青青青在线视频| 欧美一区二区三区人| 99久久久久免费精品国产 | 色综合中文字幕国产 | 日韩一区二区在线免费观看| 国产乱子伦视频一区二区三区| 亚洲三级免费电影| 日韩欧美色综合| 色呦呦网站一区| 韩国一区二区视频| 亚洲黄色免费电影| 欧美精品一区二区三区很污很色的 | 国产精品青草久久| 欧美伦理视频网站| 成人免费视频视频| 日本不卡在线视频| 亚洲欧美日韩国产综合在线| 日韩欧美一区中文| 在线中文字幕不卡| 国产成人免费网站| 秋霞国产午夜精品免费视频| 亚洲丝袜美腿综合| 久久亚洲影视婷婷| 日韩欧美国产一区二区三区| 91成人在线免费观看| 成人的网站免费观看|