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

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

?? tntmenus.pas

?? TNT Components Source
?? 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一区二区三区免费野_久草精品视频
性做久久久久久久久| 欧美日本一区二区三区四区| 国产女人18毛片水真多成人如厕| 伦理电影国产精品| 精品国产制服丝袜高跟| 免费不卡在线观看| 精品少妇一区二区三区在线播放| 国内精品写真在线观看| 中文字幕高清不卡| 色综合天天天天做夜夜夜夜做| 亚洲精选在线视频| 在线播放中文一区| 精品一区二区三区久久| 国产精品传媒入口麻豆| 99国内精品久久| 亚洲一区在线观看视频| 日韩你懂的在线观看| 成人高清视频在线| 亚洲国产精品久久艾草纯爱| 久久一夜天堂av一区二区三区| 岛国av在线一区| 亚洲大尺度视频在线观看| 精品裸体舞一区二区三区| 成人app在线| 日本人妖一区二区| 精品国产伦一区二区三区观看体验| 国产乱码精品1区2区3区| 久久综合视频网| 99国产欧美久久久精品| 视频一区在线播放| 国产精品动漫网站| 精品福利av导航| 在线一区二区观看| 国产精品一区二区久久精品爱涩| 亚洲一区二区三区三| 国产日韩欧美激情| 欧美日韩精品福利| caoporn国产一区二区| 日韩精品视频网| 亚洲精品视频一区| 国产日韩欧美电影| 欧美美女bb生活片| av在线不卡电影| 久久国产精品无码网站| 洋洋成人永久网站入口| 国产亚洲综合性久久久影院| 欧美亚洲国产一区二区三区va| 国产高清亚洲一区| 日本午夜精品视频在线观看 | 51久久夜色精品国产麻豆| 成人一区二区三区中文字幕| 蜜臀av一区二区在线观看| 一区二区三区四区在线| 国产欧美精品国产国产专区| 日韩精品一区国产麻豆| 欧美私人免费视频| 色视频一区二区| aaa欧美日韩| 盗摄精品av一区二区三区| 国产传媒一区在线| 成人avav影音| 蜜臀av性久久久久蜜臀aⅴ四虎| 中文字幕亚洲综合久久菠萝蜜| 日韩一区二区三| 欧美日韩精品一区二区三区蜜桃| av日韩在线网站| 成人免费看的视频| 国产成人精品亚洲午夜麻豆| 国精产品一区一区三区mba桃花| 青青草视频一区| 免费高清不卡av| 欧美a一区二区| 蜜桃久久久久久久| 蜜臀av性久久久久蜜臀aⅴ| 免费成人av资源网| 久久99在线观看| 国产在线播放一区三区四| 寂寞少妇一区二区三区| 国产一区二区精品在线观看| 亚洲在线成人精品| 国产精品麻豆久久久| 欧美国产1区2区| 国产精品嫩草影院av蜜臀| 中文文精品字幕一区二区| 国产精品女主播av| 最新高清无码专区| 一区二区三区在线观看网站| 一区二区成人在线视频| 亚洲一区二区三区四区在线| 午夜精品久久久久久久久| 日韩国产一二三区| 久久97超碰色| 成人一级片在线观看| aaa亚洲精品| 欧美日韩视频在线第一区| 91精品国产aⅴ一区二区| 欧美成人午夜电影| 国产欧美日韩综合精品一区二区| 国产精品久久久久久久午夜片| 亚洲女子a中天字幕| 午夜激情综合网| 精品一区二区三区视频| 成人免费毛片app| 欧美亚洲国产一区在线观看网站| 欧美老肥妇做.爰bbww视频| av电影在线观看不卡| 国产成人精品aa毛片| 色婷婷国产精品| 日韩亚洲欧美在线观看| 国产欧美日韩中文久久| 一区二区三区在线观看欧美| 麻豆成人av在线| av爱爱亚洲一区| 欧美不卡视频一区| 亚洲人成在线观看一区二区| 日本视频一区二区三区| 粉嫩av亚洲一区二区图片| 欧美亚洲国产bt| 久久五月婷婷丁香社区| 一个色综合网站| 精品一二三四区| 欧美伊人精品成人久久综合97| www一区二区| 亚洲va国产天堂va久久en| 国产黄人亚洲片| 91精品国产综合久久精品| 国产精品每日更新在线播放网址| 日韩国产精品久久久久久亚洲| 成人一区二区三区在线观看| 欧美一区二区三区视频免费播放| 国产精品区一区二区三| 奇米影视一区二区三区小说| 99免费精品在线观看| 精品久久久影院| 丝袜美腿亚洲一区二区图片| 成人精品在线视频观看| 日韩精品在线一区二区| 亚洲自拍欧美精品| 丁香啪啪综合成人亚洲小说| 717成人午夜免费福利电影| 国产精品福利影院| 极品美女销魂一区二区三区免费| 欧美日韩在线三级| 亚洲日本va午夜在线电影| 国产精品自在在线| 日韩一区二区三区av| 首页综合国产亚洲丝袜| 在线观看欧美精品| 中文字幕亚洲一区二区av在线| 国产精品一区二区三区乱码| 精品毛片乱码1区2区3区| 蜜臀精品一区二区三区在线观看| 欧美精品久久久久久久多人混战| 亚洲免费看黄网站| av色综合久久天堂av综合| 欧美国产国产综合| 国产盗摄一区二区| 国产亚洲女人久久久久毛片| 国内偷窥港台综合视频在线播放| 欧美电影免费观看完整版| 久久99深爱久久99精品| 精品国产麻豆免费人成网站| 国产资源在线一区| 久久亚洲欧美国产精品乐播| 国产一区在线精品| 国产婷婷色一区二区三区四区| 国产乱码精品一区二区三区五月婷| 精品国内片67194| 久久99国产精品尤物| 欧美精品一区二区三区在线播放 | 国产精品水嫩水嫩| 国产91高潮流白浆在线麻豆| 国产精品私人自拍| 99精品久久99久久久久| 亚洲免费观看高清| 欧美午夜电影一区| 亚洲gay无套男同| 337p亚洲精品色噜噜噜| 久久aⅴ国产欧美74aaa| 久久精子c满五个校花| 成人av第一页| 亚洲一区二区3| 日韩丝袜美女视频| 国产酒店精品激情| 亚洲日本va在线观看| 欧美夫妻性生活| 国内精品伊人久久久久av影院| 国产日本一区二区| 91麻豆精品在线观看| 香蕉成人伊视频在线观看| 日韩免费一区二区三区在线播放| 国产成人精品亚洲777人妖| 1区2区3区精品视频| 欧美精品视频www在线观看| 狠狠色狠狠色综合| **网站欧美大片在线观看| 欧美精品久久一区二区三区| 国产成人在线视频免费播放| 亚洲精品videosex极品| 日韩三级在线免费观看|