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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tntcontrols.pas

?? Delphi知道現在也沒有提供Unicode支持
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
  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));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区精品久久久| 成人免费视频一区| 国产一区二区中文字幕| 日本韩国欧美国产| 久久综合精品国产一区二区三区| 一区二区在线观看av| 国产激情一区二区三区| 欧美高清激情brazzers| 亚洲人快播电影网| 国产成人超碰人人澡人人澡| 欧美卡1卡2卡| 夜夜操天天操亚洲| 国产成人99久久亚洲综合精品| 欧美一级日韩不卡播放免费| 一区二区欧美在线观看| 成人avav影音| 国产精品沙发午睡系列990531| 男人的j进女人的j一区| 欧美特级限制片免费在线观看| 国产精品色婷婷久久58| 亚洲一区二区在线播放相泽| 99免费精品在线观看| www激情久久| 蜜桃av一区二区三区电影| 欧美日韩电影一区| 伊人夜夜躁av伊人久久| 在线亚洲高清视频| 亚洲色图欧洲色图| 不卡的电影网站| 国产精品久99| 99精品黄色片免费大全| 亚洲视频网在线直播| 色综合天天天天做夜夜夜夜做| 国产女同性恋一区二区| 福利一区福利二区| 日本一区二区三区免费乱视频| 国产精品一二三| 国产欧美日韩激情| 99免费精品视频| 专区另类欧美日韩| 色拍拍在线精品视频8848| 亚洲在线视频网站| 欧美卡1卡2卡| 久久国产精品色婷婷| 久久婷婷久久一区二区三区| 国产精品影视网| 综合在线观看色| 在线精品国精品国产尤物884a| 亚洲在线视频网站| 日韩免费在线观看| 国产aⅴ综合色| 亚洲综合999| 日韩欧美电影一区| 国产精品系列在线观看| 国产精品久久久久久久久晋中 | 亚洲国产精品激情在线观看| 成人app在线观看| 亚洲国产成人av网| 日韩三级免费观看| 不卡视频免费播放| 亚洲成人激情综合网| 91精品欧美福利在线观看| 国产美女精品在线| 夜夜精品视频一区二区 | 国产午夜精品一区二区三区四区| 国产成人午夜99999| 亚洲最新视频在线观看| 日韩美女天天操| 91污在线观看| 久久精品国产澳门| 亚洲久草在线视频| 精品91自产拍在线观看一区| 91麻豆精东视频| 裸体歌舞表演一区二区| 亚洲少妇30p| 精品欧美久久久| 91麻豆精品视频| 国产高清不卡一区| 亚洲成人在线观看视频| 中文字幕欧美区| 欧美变态tickling挠脚心| 91免费观看视频在线| 久久精品国内一区二区三区| 成人免费在线视频| 日韩免费观看2025年上映的电影| 日本二三区不卡| 国产一区激情在线| 日韩高清欧美激情| 亚洲免费视频成人| 中文字幕不卡的av| 久久这里只精品最新地址| 88在线观看91蜜桃国自产| 99re8在线精品视频免费播放| 蜜桃av一区二区| 亚洲成人自拍一区| 一区二区三区日韩精品视频| 国产精品午夜在线| 国产精品视频一区二区三区不卡| 97久久精品人人做人人爽50路| 久久成人羞羞网站| 亚洲成人777| 亚洲欧美区自拍先锋| 欧美经典一区二区三区| 欧美不卡一区二区| 欧美一区二区私人影院日本| 欧美性大战久久| 91蜜桃在线免费视频| 成人黄色综合网站| 成人av影视在线观看| 国产91在线|亚洲| 国产精品一级黄| 国产一二精品视频| 国产一区二区三区观看| 国产一区二区精品久久| 国产乱人伦偷精品视频免下载| 久久精品久久精品| 久久国产精品99久久人人澡| 蜜桃久久精品一区二区| 麻豆一区二区三| 国产综合久久久久久久久久久久| 麻豆高清免费国产一区| 国内精品视频一区二区三区八戒| 精品一区二区在线观看| 国产成人精品影视| 成人涩涩免费视频| 91丨九色丨蝌蚪丨老版| 日本精品视频一区二区| 欧美高清www午色夜在线视频| 欧美日韩国产美| 欧美大片免费久久精品三p| 久久亚洲精品国产精品紫薇| 国产午夜亚洲精品理论片色戒| 国产精品三级电影| 亚洲人123区| 五月婷婷激情综合| 久久国产乱子精品免费女| 成人永久免费视频| 91啪九色porn原创视频在线观看| 色爱区综合激月婷婷| 337p亚洲精品色噜噜狠狠| 欧美电影免费观看高清完整版在线| 精品久久久网站| 麻豆国产91在线播放| 一区二区三区在线视频播放| 视频一区欧美精品| 国产在线麻豆精品观看| www.亚洲色图| 欧美一区二区三区播放老司机| 欧美精品一区二区三区四区 | 91婷婷韩国欧美一区二区| 欧美日韩免费视频| 精品国产成人在线影院| 中文字幕一区二区在线播放| 亚洲午夜免费视频| 国产精品一区二区x88av| 91国偷自产一区二区三区观看| 欧美一区二区人人喊爽| 国产精品久久久久久久久免费桃花| 亚洲一区二区3| 国产不卡在线一区| 欧美一区二区美女| 日韩毛片在线免费观看| 老司机精品视频线观看86| 99久久久无码国产精品| 日韩欧美一级精品久久| 亚洲欧美另类小说| 久久成人av少妇免费| 欧美中文字幕一区二区三区亚洲 | 欧美视频在线一区二区三区| 日韩av一区二区三区四区| 国产成人在线视频免费播放| 欧美日韩在线综合| 国产欧美1区2区3区| 久久国产精品第一页| 欧美体内she精视频| 国产精品久久久久影院亚瑟| 久久精品国产99国产精品| 欧美色图片你懂的| 自拍偷拍欧美激情| 懂色av噜噜一区二区三区av| 日韩三级在线观看| 午夜久久久久久电影| 色综合欧美在线视频区| 国产日韩欧美亚洲| 国产麻豆精品theporn| 精品免费国产二区三区| 日本va欧美va精品发布| 69av一区二区三区| 亚洲一区在线观看免费| 91捆绑美女网站| 国产精品妹子av| 从欧美一区二区三区| 国产日韩欧美高清| 国产福利一区二区三区视频在线 | 日韩av中文字幕一区二区 | 午夜精彩视频在线观看不卡| 91麻豆swag| 一区二区三区四区在线播放 | 亚洲国产cao| 26uuu久久天堂性欧美|