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

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

?? tntmenus.pas

?? TNTUniCtrlsWithExceptions UniCode 國際化語言
?? PAS
?? 第 1 頁 / 共 3 頁
字號:

{*****************************************************************************}
{                                                                             }
{    Tnt Delphi Unicode Controls                                              }
{      http://www.tntware.com/delphicontrols/unicode/                         }
{        Version: 2.3.0                                                       }
{                                                                             }
{    Copyright (c) 2002-2007, Troy Wolbrink (troy.wolbrink@tntware.com)       }
{                                                                             }
{*****************************************************************************}

unit TntMenus;

{$INCLUDE TntCompilers.inc}

interface

uses
  Windows, Classes, Menus, Graphics, Messages;

type
{TNT-WARN TMenuItem}
  TTntMenuItem = class(TMenuItem{TNT-ALLOW TMenuItem})
  private
    FIgnoreMenuChanged: Boolean;
    FCaption: WideString;
    FHint: WideString;
    FKeyboardLayout: HKL;
    function GetCaption: WideString;
    procedure SetInheritedCaption(const Value: AnsiString);
    procedure SetCaption(const Value: WideString);
    function IsCaptionStored: Boolean;
    procedure UpdateMenuString(ParentMenu: TMenu);
    function GetAlignmentDrawStyle: Word;
    function MeasureItemTextWidth(ACanvas: TCanvas; const Text: WideString): Integer;
    function GetHint: WideString;
    procedure SetInheritedHint(const Value: AnsiString);
    procedure SetHint(const Value: WideString);
    function IsHintStored: Boolean;
  protected
    procedure DefineProperties(Filer: TFiler); override;
    function GetActionLinkClass: TMenuActionLinkClass; override;
    procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
    procedure MenuChanged(Rebuild: Boolean); override;
    procedure AdvancedDrawItem(ACanvas: TCanvas; ARect: TRect;
      State: TOwnerDrawState; TopLevel: Boolean); override;
    procedure DoDrawText(ACanvas: TCanvas; const ACaption: WideString;
      var Rect: TRect; Selected: Boolean; Flags: Integer);
    procedure MeasureItem(ACanvas: TCanvas; var Width, Height: Integer); override; 
  public
    procedure InitiateAction; override;
    procedure Loaded; override;
    function Find(ACaption: WideString): TMenuItem{TNT-ALLOW TMenuItem};
  published
    property Caption: WideString read GetCaption write SetCaption stored IsCaptionStored;
    property Hint: WideString read GetHint write SetHint stored IsHintStored;
  end;

{TNT-WARN TMainMenu}
  TTntMainMenu = class(TMainMenu{TNT-ALLOW TMainMenu})
  protected
    procedure DoChange(Source: TMenuItem{TNT-ALLOW TMenuItem}; Rebuild: Boolean); override;
  public
    {$IFDEF COMPILER_9_UP}
    function CreateMenuItem: TMenuItem{TNT-ALLOW TMenuItem}; override;
    {$ENDIF}
  end;

{TNT-WARN TPopupMenu}
  TTntPopupMenu = class(TPopupMenu{TNT-ALLOW TPopupMenu})
  protected
    procedure DoChange(Source: TMenuItem{TNT-ALLOW TMenuItem}; Rebuild: Boolean); override;
  public
    constructor Create(AOwner: TComponent); override;
    {$IFDEF COMPILER_9_UP}
    function CreateMenuItem: TMenuItem{TNT-ALLOW TMenuItem}; override;
    {$ENDIF}
    destructor Destroy; override;
    procedure Popup(X, Y: Integer); override;
  end;

{TNT-WARN NewSubMenu}
function WideNewSubMenu(const ACaption: WideString; hCtx: THelpContext;
  const AName: TComponentName; const Items: array of TTntMenuItem;
    AEnabled: Boolean): TTntMenuItem;
{TNT-WARN NewItem}
function WideNewItem(const ACaption: WideString; AShortCut: TShortCut;
  AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent; hCtx: THelpContext;
    const AName: TComponentName): TTntMenuItem;

function MessageToShortCut(Msg: TWMKeyDown): TShortCut;

{TNT-WARN ShortCutToText}
function WideShortCutToText(WordShortCut: Word): WideString;
{TNT-WARN TextToShortCut}
function WideTextToShortCut(Text: WideString): TShortCut;
{TNT-WARN GetHotKey}
function WideGetHotkey(const Text: WideString): WideString;
{TNT-WARN StripHotkey}
function WideStripHotkey(const Text: WideString): WideString;
{TNT-WARN AnsiSameCaption}
function WideSameCaption(const Text1, Text2: WideString): Boolean;

function WideGetMenuItemCaption(MenuItem: TMenuItem{TNT-ALLOW TMenuItem}): WideString;
function WideGetMenuItemHint(MenuItem: TMenuItem{TNT-ALLOW TMenuItem}): WideString;

procedure NoOwnerDrawTopLevelItems(Menu: TMainMenu{TNT-ALLOW TMainMenu});

procedure FixMenuBiDiProblem(Menu: TMenu);

function MenuItemHasBitmap(MenuItem: TMenuItem{TNT-ALLOW TMenuItem}): Boolean;

type
  TTntPopupList = class(TPopupList)
  private
    SavedPopupList: TPopupList;
  protected
    procedure WndProc(var Message: TMessage); override;
  end;

var
  TntPopupList: TTntPopupList;

implementation

uses
  Forms, SysUtils, Consts, ActnList, ImgList, TntControls, TntGraphics,
  TntActnList, TntClasses, TntForms, TntSysUtils, TntWindows;

function WideNewSubMenu(const ACaption: WideString; hCtx: THelpContext;
  const AName: TComponentName; const Items: array of TTntMenuItem;
    AEnabled: Boolean): TTntMenuItem;
var
  I: Integer;
begin
  Result := TTntMenuItem.Create(nil);
  for I := Low(Items) to High(Items) do
    Result.Add(Items[I]);
  Result.Caption := ACaption;
  Result.HelpContext := hCtx;
  Result.Name := AName;
  Result.Enabled := AEnabled;
end;

function WideNewItem(const ACaption: WideString; AShortCut: TShortCut;
  AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent; hCtx: THelpContext;
    const AName: TComponentName): TTntMenuItem;
begin
  Result := TTntMenuItem.Create(nil);
  with Result do
  begin
    Caption := ACaption;
    ShortCut := AShortCut;
    OnClick := AOnClick;
    HelpContext := hCtx;
    Checked := AChecked;
    Enabled := AEnabled;
    Name := AName;
  end;
end;

function MessageToShortCut(Msg: TWMKeyDown): TShortCut;
var
  ShiftState: TShiftState;
begin
  ShiftState := Forms.KeyDataToShiftState(TWMKeyDown(Msg).KeyData);
  Result := Menus.ShortCut(TWMKeyDown(Msg).CharCode, ShiftState);
end;

function WideGetSpecialName(WordShortCut: Word): WideString;
var
  ScanCode: Integer;
  KeyName: array[0..255] of WideChar;
begin
  Assert(Win32PlatformIsUnicode);
  Result := '';
  ScanCode := MapVirtualKeyW(WordRec(WordShortCut).Lo, 0) shl 16;
  if ScanCode <> 0 then
  begin
    GetKeyNameTextW(ScanCode, KeyName, SizeOf(KeyName));
    Result := KeyName;
  end;
end;

function WideGetKeyboardChar(Key: Word): WideChar;
var
  LatinNumChar: WideChar;
begin
  Assert(Win32PlatformIsUnicode);
  Result := WideChar(MapVirtualKeyW(Key, 2));
  if (Key in [$30..$39]) then
  begin
    // Check to see if "0" - "9" can be used if all that differs is shift state
    LatinNumChar := WideChar(Key - $30 + Ord('0'));
    if (Result <> LatinNumChar)
    and (Byte(Key) = WordRec(VkKeyScanW(LatinNumChar)).Lo) then  // .Hi would be the shift state
      Result := LatinNumChar;
  end;
end;

function WideShortCutToText(WordShortCut: Word): WideString;
var
  Name: WideString;
begin
  if (not Win32PlatformIsUnicode)
  or (WordRec(WordShortCut).Lo in [$08..$09 {BKSP, TAB}, $0D {ENTER}, $1B {ESC}, $20..$28 {Misc Nav},
                               $2D..$2E {INS, DEL}, $70..$87 {F1 - F24}])
  then
    Result := ShortCutToText{TNT-ALLOW ShortCutToText}(WordShortCut)
  else begin
    case WordRec(WordShortCut).Lo of
      $30..$39: Name := WideGetKeyboardChar(WordRec(WordShortCut).Lo); {1-9,0}
      $41..$5A: Name := WideGetKeyboardChar(WordRec(WordShortCut).Lo); {A-Z}
      $60..$69: Name := WideGetKeyboardChar(WordRec(WordShortCut).Lo); {numpad 1-9,0}
    else
      Name := WideGetSpecialName(WordShortCut);
    end;
    if Name <> '' then
    begin
      Result := '';
      if WordShortCut and scShift <> 0 then Result := Result + SmkcShift;
      if WordShortCut and scCtrl <> 0 then Result := Result + SmkcCtrl;
      if WordShortCut and scAlt <> 0 then Result := Result + SmkcAlt;
      Result := Result + Name;
    end
    else Result := '';
  end;
end;

{ This function is *very* slow.  Use sparingly.  Return 0 if no VK code was
  found for the text }

function WideTextToShortCut(Text: WideString): TShortCut;

  { If the front of Text is equal to Front then remove the matching piece
    from Text and return True, otherwise return False }

  function CompareFront(var Text: WideString; const Front: WideString): Boolean;
  begin
    Result := (Pos(Front, Text) = 1);
    if Result then
      Delete(Text, 1, Length(Front));
  end;

var
  Key: TShortCut;
  Shift: TShortCut;
begin
  Result := 0;
  Shift := 0;
  while True do
  begin
    if      CompareFront(Text, SmkcShift) then Shift := Shift or scShift
    else if CompareFront(Text, '^')       then Shift := Shift or scCtrl
    else if CompareFront(Text, SmkcCtrl)  then Shift := Shift or scCtrl
    else if CompareFront(Text, SmkcAlt)   then Shift := Shift or scAlt
    else Break;
  end;
  if Text = '' then Exit;
  for Key := $08 to $255 do { Copy range from table in ShortCutToText }
    if WideSameText(Text, WideShortCutToText(Key)) then
    begin
      Result := Key or Shift;
      Exit;
    end;
end;

function WideGetHotkeyPos(const Text: WideString): Integer;
var
  I, L: Integer;
begin
  Result := 0;
  I := 1;
  L := Length(Text);
  while I <= L do
  begin
    if (Text[I] = cHotkeyPrefix) and (L - I >= 1) then
    begin
      Inc(I);
      if Text[I] <> cHotkeyPrefix then
        Result := I; // this might not be the last
    end;
    Inc(I);
  end;
end;

function WideGetHotkey(const Text: WideString): WideString;
var
  I: Integer;
begin
  I := WideGetHotkeyPos(Text);
  if I = 0 then
    Result := ''
  else
    Result := Text[I];
end;

function WideStripHotkey(const Text: WideString): WideString;
var
  I: Integer;
begin
  Result := Text;
  I := 1;
  while I <= Length(Result) do
  begin
    if Result[I] = cHotkeyPrefix then
      if SysLocale.FarEast
      and ((I > 1) and (Length(Result) - I >= 2)
      and (Result[I - 1] = '(') and (Result[I + 2] = ')')) then begin
        Delete(Result, I - 1, 4);
        Dec(I, 2);
      end else
        Delete(Result, I, 1);
    Inc(I);
  end;
end;

function WideSameCaption(const Text1, Text2: WideString): Boolean;
begin
  Result := WideSameText(WideStripHotkey(Text1), WideStripHotkey(Text2));
end;

function WideSameCaptionStr(const Text1, Text2: WideString): Boolean;
begin
  Result := WideSameStr(WideStripHotkey(Text1), WideStripHotkey(Text2));
end;

function WideGetMenuItemCaption(MenuItem: TMenuItem{TNT-ALLOW TMenuItem}): WideString;
begin
  if MenuItem is TTntMenuItem then
    Result := TTntMenuItem(MenuItem).Caption
  else
    Result := MenuItem.Caption;
end;

function WideGetMenuItemHint(MenuItem: TMenuItem{TNT-ALLOW TMenuItem}): WideString;
begin
  if MenuItem is TTntMenuItem then
    Result := TTntMenuItem(MenuItem).Hint
  else
    Result := MenuItem.Hint;
end;

procedure NoOwnerDrawTopLevelItems(Menu: TMainMenu{TNT-ALLOW TMainMenu});
{If top-level items are created as owner-drawn, they will not appear as raised
buttons when the mouse hovers over them. The VCL will often create top-level
items as owner-drawn even when they don't need to be (owner-drawn state can be
set on an item-by-item basis). This routine turns off the owner-drawn flag for
top-level items if it appears unnecessary}

  function ItemHasValidImage(Item: TMenuItem{TNT-ALLOW TMenuItem}): boolean;
  var
    Images: TCustomImageList;
  begin
    Assert(Item <> nil, 'TNT Internal Error: ItemHasValidImage: item = nil');
    Images := Item.GetImageList;
    Result := (Assigned(Images) and (Item.ImageIndex >= 0) and (Item.ImageIndex < Images.Count))
           or (MenuItemHasBitmap(Item) and (not Item.Bitmap.Empty))
  end;

var
  HM: HMenu;
  i: integer;
  Info: TMenuItemInfoA;
  Item: TMenuItem{TNT-ALLOW TMenuItem};
  Win98Plus: boolean;
begin
  if Assigned(Menu) then begin
    Win98Plus:= (Win32MajorVersion > 4)
      or((Win32MajorVersion = 4) and (Win32MinorVersion > 0));
    if not Win98Plus then
      Exit; {exit if Windows 95 or NT 4.0}
    HM:= Menu.Handle;
    Info.cbSize:= sizeof(Info);
    for i := 0 to GetMenuItemCount(HM) - 1 do begin
      Info.fMask:= MIIM_FTYPE or MIIM_ID;
      if not GetMenuItemInfo(HM, i, true, Info) then
        Break;
      if Info.fType and MFT_OWNERDRAW <> 0 then begin
        Item:= Menu.FindItem(Info.wID, fkCommand);
        if not Assigned(Item) then
          continue;
        if Assigned(Item.OnDrawItem)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久久| 日韩精品一区二区三区蜜臀| 国产精品美女久久久久久久 | 97se亚洲国产综合自在线观| 久久久一区二区| 99国产欧美久久久精品| 亚洲视频你懂的| 欧美日韩国产一级片| 免费在线观看不卡| 久久久精品黄色| 在线视频国产一区| 轻轻草成人在线| 国产嫩草影院久久久久| 色婷婷综合久久久中文字幕| 午夜a成v人精品| 久久综合九色综合欧美就去吻| 成人中文字幕合集| 亚洲线精品一区二区三区| 日韩午夜中文字幕| 成人av网站在线| 五月婷婷综合在线| 国产午夜精品一区二区| 欧美调教femdomvk| 国产成人无遮挡在线视频| 亚洲人123区| 日韩一区二区麻豆国产| 成人午夜伦理影院| 日韩成人av影视| 中文字幕一区二区三| 91精品国产综合久久精品图片| 国产精品一级在线| 日韩在线卡一卡二| 国产精品系列在线| 欧美一区二区女人| 色综合中文综合网| 美国一区二区三区在线播放| 国产精品久久久久久久久动漫| 欧美日韩黄色影视| yourporn久久国产精品| 日韩精品电影在线观看| 国产精品国产三级国产| 欧美成人一区二区三区在线观看| 不卡欧美aaaaa| 久久www免费人成看片高清| 亚洲女人的天堂| 国产喷白浆一区二区三区| 91麻豆精品国产91久久久久久| 成人国产精品免费| 国精产品一区一区三区mba桃花 | 欧美写真视频网站| 99re66热这里只有精品3直播| 久久99久久99| 香蕉加勒比综合久久| 日韩理论片中文av| 久久精品一区二区三区四区| 欧美成人在线直播| 欧美一区二区三区免费大片| 色先锋资源久久综合| 成人免费视频国产在线观看| 玖玖九九国产精品| 日本伊人精品一区二区三区观看方式| 亚洲精品视频在线看| 国产精品久久久久四虎| 国产日韩欧美综合在线| 26uuu久久天堂性欧美| 日韩一区二区三区av| 欧美一区午夜精品| 欧美一区二区三区影视| 91精品在线麻豆| 欧美精选在线播放| 欧美伦理电影网| 欧美日韩精品一区二区天天拍小说 | 91精品婷婷国产综合久久 | 麻豆精品新av中文字幕| 日韩精品色哟哟| 天堂在线一区二区| 无码av免费一区二区三区试看 | 欧美剧情电影在线观看完整版免费励志电影 | 成人国产一区二区三区精品| 国产精品456| 粉嫩13p一区二区三区| 成人美女视频在线观看18| 国产91丝袜在线观看| 大白屁股一区二区视频| 99热99精品| 色成人在线视频| 欧美日韩美少妇| 欧美一级午夜免费电影| 日韩亚洲欧美一区| 久久久九九九九| 国产精品国产精品国产专区不蜜| 国产精品美女久久久久久2018| 日韩理论片网站| 亚洲成a人v欧美综合天堂下载| 婷婷成人综合网| 韩国在线一区二区| 成人国产在线观看| 欧美午夜寂寞影院| 欧美xxx久久| 中文字幕一区二区三区不卡 | 亚洲精品成a人| 亚洲成av人影院在线观看网| 免费日韩伦理电影| 国产精品69毛片高清亚洲| 色综合中文字幕| 日韩午夜激情免费电影| 国产色产综合产在线视频| 亚洲男人的天堂av| 青青草国产精品亚洲专区无| 国产精品香蕉一区二区三区| 色综合久久久久| 欧美电影免费观看高清完整版在线观看| 精品美女被调教视频大全网站| 欧美激情资源网| 亚洲电影第三页| 国产精品影音先锋| 欧美探花视频资源| 国产欧美一区视频| 亚洲第一福利一区| 国产成人精品在线看| 欧美精品三级在线观看| 国产情人综合久久777777| 天涯成人国产亚洲精品一区av| 国产精品一品二品| 欧美猛男男办公室激情| 中文字幕av免费专区久久| 日韩国产欧美在线观看| 成人aa视频在线观看| 日韩一本二本av| 亚洲综合久久久久| 国产99久久久国产精品免费看| 91精品国产欧美一区二区成人| 亚洲欧洲精品一区二区精品久久久| 青青草97国产精品免费观看 | 91麻豆文化传媒在线观看| 精品久久久久久综合日本欧美 | 国产喷白浆一区二区三区| 琪琪一区二区三区| 欧美色窝79yyyycom| 国产精品成人午夜| 国内精品国产成人国产三级粉色| 欧美日韩欧美一区二区| 亚洲欧美日韩国产中文在线| 国产成人精品亚洲日本在线桃色| 欧美成人性战久久| 日本人妖一区二区| 欧美日韩国产系列| 一区二区三区鲁丝不卡| 粉嫩一区二区三区性色av| 精品伦理精品一区| 久久99蜜桃精品| 欧美精品色综合| 亚洲h动漫在线| 欧洲生活片亚洲生活在线观看| 国产精品国产馆在线真实露脸| 国产精品一区专区| 26uuu亚洲| 国产一区二区精品久久| 精品久久免费看| 国产一区二区三区国产| 精品国产乱码久久久久久免费| 免费观看成人av| 欧美大白屁股肥臀xxxxxx| 日本美女一区二区三区| 欧美一区二区三区四区五区| 亚洲国产精品一区二区久久| 成人国产精品免费观看| 中文字幕在线不卡一区| 天堂午夜影视日韩欧美一区二区| 在线视频欧美精品| 夜夜爽夜夜爽精品视频| 琪琪久久久久日韩精品| 欧美久久久久久久久| 日韩激情一区二区| 日韩欧美国产系列| 韩国av一区二区三区| 久久久亚洲国产美女国产盗摄| 久久99国产精品免费| 久久这里只精品最新地址| 国产盗摄女厕一区二区三区| 国产精品久久久久久久久免费相片 | 亚洲3atv精品一区二区三区| 欧美精品在线观看播放| 久久成人免费网站| 国产精品乱码一区二区三区软件 | 欧美在线视频不卡| 视频一区在线视频| 精品国产乱码久久久久久闺蜜| 国产成人精品免费在线| 一区在线观看免费| 欧洲精品一区二区三区在线观看| 午夜欧美一区二区三区在线播放| 91精品在线麻豆| 成人夜色视频网站在线观看| 中文字幕日本乱码精品影院| 欧美伊人精品成人久久综合97 | av资源网一区| 亚州成人在线电影| 久久精品欧美一区二区三区麻豆| 不卡在线视频中文字幕|