亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
蜜臀久久久久久久| 国产目拍亚洲精品99久久精品| 久久99国产精品免费网站| 中文字幕乱码亚洲精品一区 | 天天综合天天综合色| 久久精品日产第一区二区三区高清版 | 91精品国产一区二区三区香蕉| 国产一区在线视频| 亚洲123区在线观看| 亚洲国产成人在线| 2024国产精品| 日韩亚洲欧美成人一区| 欧美在线色视频| 91亚洲男人天堂| 国产aⅴ精品一区二区三区色成熟| 国产精品综合一区二区| 亚洲午夜久久久| 亚洲午夜国产一区99re久久| 国产精品久久福利| 久久精品一区二区三区四区| 日韩欧美二区三区| 欧美变态tickling挠脚心| 8x8x8国产精品| 日韩午夜中文字幕| 精品剧情v国产在线观看在线| 欧美高清www午色夜在线视频| 91黄色激情网站| 欧美日韩美女一区二区| 欧美天堂一区二区三区| 欧美色精品在线视频| 欧美日韩亚洲综合一区| 91精品国产91久久久久久一区二区| 欧美三级乱人伦电影| 久久综合色综合88| 色老综合老女人久久久| 久久成人综合网| 国产一区二区三区国产| 99久久精品免费看| 在线精品视频小说1| 欧美一区二区三区日韩视频| 日韩三级电影网址| 国产精品电影一区二区| 亚洲综合在线电影| 国产最新精品免费| 色哟哟精品一区| 精品久久久久久久久久久久久久久久久 | 美腿丝袜一区二区三区| 久久国产精品露脸对白| 欧洲av在线精品| 欧美成人国产一区二区| 国产精品欧美经典| 日韩中文欧美在线| 国产91对白在线观看九色| 精品视频在线看| 久久久综合精品| 亚洲3atv精品一区二区三区| 国产精品一区二区久久精品爱涩 | 日韩视频在线永久播放| 国产欧美视频一区二区| 国产成人精品综合在线观看| av中文字幕一区| 久久嫩草精品久久久精品| 亚洲国产日韩av| 一本在线高清不卡dvd| 国产日韩欧美精品在线| 蜜乳av一区二区| 777午夜精品免费视频| 亚洲愉拍自拍另类高清精品| 99久久精品国产导航| 久久婷婷一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 欧美写真视频网站| 一区二区三区日韩欧美| 99久久国产免费看| 亚洲天堂久久久久久久| 欧美在线免费视屏| 亚洲午夜久久久久久久久电影网| 在线观看欧美精品| 亚洲成a人在线观看| 欧美一区二区三区视频在线| 日韩成人av影视| 精品国产sm最大网站免费看| 久久99久久久欧美国产| 久久蜜臀精品av| av一区二区三区四区| 亚洲午夜日本在线观看| 久久久久久亚洲综合影院红桃 | 麻豆精品国产91久久久久久| 欧美一级理论性理论a| 美女视频免费一区| 国产女人水真多18毛片18精品视频| 国产乱国产乱300精品| 亚洲日韩欧美一区二区在线| 色综合天天综合网天天狠天天 | 韩国精品一区二区| 国产精品毛片无遮挡高清| 欧美日韩亚洲综合一区二区三区| 日本va欧美va瓶| 亚洲欧洲av在线| 精品美女被调教视频大全网站| 国产精品一区在线| 亚洲v中文字幕| 综合分类小说区另类春色亚洲小说欧美| 色悠悠久久综合| 成人免费va视频| 裸体健美xxxx欧美裸体表演| 亚洲欧美日韩综合aⅴ视频| 日韩精品一区二区三区三区免费| 99久久精品一区| 国产乱理伦片在线观看夜一区| 一区二区免费在线| 久久综合视频网| 欧美大肚乱孕交hd孕妇| 欧美中文字幕一二三区视频| 成人av资源在线| 国产一本一道久久香蕉| 男男视频亚洲欧美| 日本伊人精品一区二区三区观看方式| 亚洲精品欧美综合四区| 欧美一级黄色片| 精品国产三级a在线观看| 综合欧美亚洲日本| 成人免费观看视频| 午夜精品久久久久| 久久午夜老司机| 欧美一区二区三区视频免费播放| 91福利区一区二区三区| 91丨九色丨国产丨porny| 93久久精品日日躁夜夜躁欧美| 国产很黄免费观看久久| 国产成人超碰人人澡人人澡| 国产精品正在播放| 国产乱色国产精品免费视频| 国产美女娇喘av呻吟久久| 国产精品996| 97aⅴ精品视频一二三区| 日本精品视频一区二区三区| 欧美日韩在线播放一区| 欧美日韩二区三区| 日韩一区二区三区高清免费看看| 欧美岛国在线观看| 中文字幕亚洲视频| 亚洲二区在线视频| 国产精品99精品久久免费| 91尤物视频在线观看| 在线观看精品一区| 在线观看精品一区| 欧美日韩视频在线第一区| 欧美色网站导航| 91精品国产一区二区人妖| 91精品久久久久久久91蜜桃| 日韩精品一区二区三区视频播放 | 在线影视一区二区三区| 在线影院国内精品| 精品国产免费人成在线观看| 久久精品一区二区三区av | 欧美丝袜丝交足nylons| 在线观看91av| 久久久国产午夜精品| 国产精品福利av| 亚洲大片在线观看| 午夜欧美电影在线观看| 国产一区二三区好的| 成人一区二区三区视频在线观看| 91污片在线观看| 日韩美女啊v在线免费观看| 亚洲成a人片在线观看中文| 视频在线观看一区二区三区| 99r国产精品| 久久久噜噜噜久久中文字幕色伊伊| 1区2区3区欧美| 高清不卡在线观看av| 欧美一区二区三区影视| 综合激情成人伊人| 成人精品国产一区二区4080| 色噜噜久久综合| 国产精品久久久久久久久久久免费看| 亚洲mv大片欧洲mv大片精品| 99久久99久久精品免费看蜜桃| 欧美精品一区二区三区在线| 五月激情综合色| 欧美日韩成人一区| 一区二区三区四区在线| 99riav一区二区三区| 国产精品久久久久永久免费观看| 国产一本一道久久香蕉| 久久综合色鬼综合色| 日韩成人av影视| 日韩欧美中文字幕精品| 日韩国产高清在线| 91精品国产综合久久小美女| 亚洲一区二区三区美女| 欧美日韩一区二区三区不卡| 亚洲亚洲人成综合网络| 欧美精品1区2区| 免费人成在线不卡| 欧美精品一区二区久久婷婷| 精品在线播放免费| 亚洲国产精品成人综合| 免费av网站大全久久|