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

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

?? tntdialogs.pas

?? Delphi知道現在也沒有提供Unicode支持
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
  end;
  if Win32PlatformIsUnicode
  and (Message.Msg = WM_NOTIFY) then begin
    case (POFNotify(Message.LParam)^.hdr.code) of
      CDN_FILEOK:
        if not CanCloseW(POFNotifyW(Message.LParam)^.lpOFN^) then
        begin
          Message.Result := 1;
          SetWindowLong(Handle, DWL_MSGRESULT, Message.Result);
          Exit;
        end;
    end;
  end;
  inherited WndProc(Message);
end;

function TTntOpenDialog.DoExecuteW(Func: Pointer): Bool;
begin
  Result := DoExecuteW(Func, GetModalParentWnd);
end;

function TTntOpenDialog.DoExecuteW(Func: Pointer; ParentWnd: HWND): Bool;
var
  OpenFilename: TOpenFilenameW;

  function GetResNamePtr(var ScopedStringStorage: WideString; lpszName: PAnsiChar): PWideChar;
  // duplicated from TntTrxResourceUtils.pas
  begin
    if Tnt_Is_IntResource(PWideChar(lpszName)) then
      Result := PWideChar(lpszName)
    else begin
      ScopedStringStorage := lpszName;
      Result := PWideChar(ScopedStringStorage);
    end;
  end;

  function AllocFilterStr(const S: WideString): WideString;
  var
    P: PWideChar;
  begin
    Result := '';
    if S <> '' then
    begin
      Result := S + #0#0;  // double null terminators (an additional zero added in case Description/Filter pair not even.)
      P := WStrScan(PWideChar(Result), '|');
      while P <> nil do
      begin
        P^ := #0;
        Inc(P);
        P := WStrScan(P, '|');
      end;
    end;
  end;

var
  TempTemplate, TempFilter, TempFilename, TempExt: WideString;
begin
  FFiles.Clear;

  // 1. Init inherited dialog defaults.
  // 2. Populate OpenFileName record with ansi defaults
  ProxyExecuteDialog := Self;
  try
    DoExecute(@ProxyGetOpenFileNameA);
  finally
    ProxyExecuteDialog := nil;
  end;
  OpenFileName := TOpenFilenameW(FProxiedOpenFilenameA);

  with OpenFilename do
  begin
    if not IsWindow(hWndOwner) then begin
      hWndOwner := ParentWnd;
    end;
    // Filter (PChar -> PWideChar)
    TempFilter := AllocFilterStr(Filter);
    lpstrFilter := PWideChar(TempFilter);
    // FileName (PChar -> PWideChar)
    SetLength(TempFilename, nMaxFile + 2);
    lpstrFile := PWideChar(TempFilename);
    FillChar(lpstrFile^, (nMaxFile + 2) * SizeOf(WideChar), 0);
    WStrLCopy(lpstrFile, PWideChar(FileName), nMaxFile);
    // InitialDir (PChar -> PWideChar)
    if (InitialDir = '') and ForceCurrentDirectory then
      lpstrInitialDir := '.'
    else
      lpstrInitialDir := PWideChar(InitialDir);
    // Title (PChar -> PWideChar)
    lpstrTitle := PWideChar(Title);
    // DefaultExt (PChar -> PWideChar)
    TempExt := DefaultExt;
    if (TempExt = '') and (Flags and OFN_EXPLORER = 0) then
    begin
      TempExt := WideExtractFileExt(Filename);
      Delete(TempExt, 1, 1);
    end;
    if TempExt <> '' then
      lpstrDefExt := PWideChar(TempExt);
    // resource template (PChar -> PWideChar)
    lpTemplateName := GetResNamePtr(TempTemplate, Template);
    // start modal dialog
    Result := TaskModalDialog(Func, OpenFileName);
    if Result then
    begin
      GetFileNamesW(OpenFilename);
      if (Flags and OFN_EXTENSIONDIFFERENT) <> 0 then
        Options := Options + [ofExtensionDifferent]
      else
        Options := Options - [ofExtensionDifferent];
      if (Flags and OFN_READONLY) <> 0 then
        Options := Options + [ofReadOnly]
      else
        Options := Options - [ofReadOnly];
      FilterIndex := nFilterIndex;
    end;
  end;
end;

procedure TTntOpenDialog.GetFileNamesW(var OpenFileName: TOpenFileNameW);
var
  Separator: WideChar;

  procedure ExtractFileNamesW(P: PWideChar);
  var
    DirName, FileName: TWideFileName;
    FileList: TWideStringDynArray;
    i: integer;
  begin
    FileList := ExtractStringsFromStringArray(P, Separator);
    if Length(FileList) = 0 then 
      FFiles.Add('')
    else begin
      DirName := FileList[0];
      if Length(FileList) = 1 then
        FFiles.Add(DirName)
      else begin
        // prepare DirName
        if WideLastChar(DirName) <> WideString(PathDelim) then
          DirName := DirName + PathDelim;
        // add files
        for i := 1 {second item} to High(FileList) do begin
          FileName := FileList[i];
          // prepare FileName
          if (FileName[1] <> PathDelim)
          and ((Length(FileName) <= 3) or (FileName[2] <> DriveDelim) or (FileName[3] <> PathDelim))
          then
            FileName := DirName + FileName;
          // add to list
          FFiles.Add(FileName);
        end;
      end;
    end;
  end;

var
  P: PWideChar;
begin
  Separator := #0;
  if (ofAllowMultiSelect in Options) and
    ((ofOldStyleDialog in Options) or not NewStyleControls) then
    Separator := ' ';
  with OpenFileName do
  begin
    if ofAllowMultiSelect in Options then
    begin
      ExtractFileNamesW(lpstrFile);
      FileName := FFiles[0];
    end else
    begin
      P := lpstrFile;
      FileName := ExtractStringFromStringArray(P, Separator);
      FFiles.Add(FileName);
    end;
  end;

  // Sync inherited Files
  inherited Files.Assign(FFiles);
end;

function TTntOpenDialog.Execute: Boolean;
begin
  if (not Win32PlatformIsUnicode) then
    Result := DoExecute(@GetOpenFileNameA)
  else
    Result := DoExecuteW(@GetOpenFileNameW);
end;

{$IFDEF COMPILER_9_UP}
function TTntOpenDialog.Execute(ParentWnd: HWND): Boolean;
begin
  if (not Win32PlatformIsUnicode) then
    Result := DoExecute(@GetOpenFileNameA, ParentWnd)
  else
    Result := DoExecuteW(@GetOpenFileNameW, ParentWnd);
end;
{$ENDIF}

{ TTntSaveDialog }

function TTntSaveDialog.Execute: Boolean;
begin
  if (not Win32PlatformIsUnicode) then
    Result := DoExecute(@GetSaveFileNameA)
  else
    Result := DoExecuteW(@GetSaveFileNameW);
end;

{$IFDEF COMPILER_9_UP}
function TTntSaveDialog.Execute(ParentWnd: HWND): Boolean;
begin
  if (not Win32PlatformIsUnicode) then
    Result := DoExecute(@GetSaveFileNameA, ParentWnd)
  else
    Result := DoExecuteW(@GetSaveFileNameW, ParentWnd);
end;
{$ENDIF}

{ Message dialog }

function GetAveCharSize(Canvas: TCanvas): TPoint;
var
  I: Integer;
  Buffer: array[0..51] of WideChar;
  tm: TTextMetric;
begin
  for I := 0 to 25 do Buffer[I] := WideChar(I + Ord('A'));
  for I := 0 to 25 do Buffer[I + 26] := WideChar(I + Ord('a'));
  GetTextMetrics(Canvas.Handle, tm);
  GetTextExtentPointW(Canvas.Handle, Buffer, 52, TSize(Result));
  Result.X := (Result.X div 26 + 1) div 2;
  Result.Y := tm.tmHeight;
end;

type
  TTntMessageForm = class(TTntForm)
  private
    Message: TTntLabel;
    procedure HelpButtonClick(Sender: TObject);
  protected
    procedure CustomKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    function GetFormText: WideString;
  public
    constructor CreateNew(AOwner: TComponent); reintroduce;
  end;

constructor TTntMessageForm.CreateNew(AOwner: TComponent);
var
  NonClientMetrics: TNonClientMetrics;
begin
  inherited CreateNew(AOwner);
  NonClientMetrics.cbSize := sizeof(NonClientMetrics);
  if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then
    Font.Handle := CreateFontIndirect(NonClientMetrics.lfMessageFont);
end;

procedure TTntMessageForm.HelpButtonClick(Sender: TObject);
begin
  Application.HelpContext(HelpContext);
end;

procedure TTntMessageForm.CustomKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (Key = Word('C')) then
  begin
    Beep;
    TntClipboard.AsWideText := GetFormText;
  end;
end;

function TTntMessageForm.GetFormText: WideString;
var
  DividerLine, ButtonCaptions: WideString;
  I: integer;
begin
  DividerLine := StringOfChar('-', 27) + sLineBreak;
  for I := 0 to ComponentCount - 1 do
    if Components[I] is TTntButton then
      ButtonCaptions := ButtonCaptions + TTntButton(Components[I]).Caption +
        StringOfChar(' ', 3);
  ButtonCaptions := Tnt_WideStringReplace(ButtonCaptions,'&','', [rfReplaceAll]);
  Result := DividerLine + Caption + sLineBreak + DividerLine + Message.Caption + sLineBreak
          + DividerLine + ButtonCaptions + sLineBreak + DividerLine;
end;

function GetMessageCaption(MsgType: TMsgDlgType): WideString;
begin
  case MsgType of
    mtWarning:      Result := SMsgDlgWarning;
    mtError:        Result := SMsgDlgError;
    mtInformation:  Result := SMsgDlgInformation;
    mtConfirmation: Result := SMsgDlgConfirm;
    mtCustom:       Result := '';
    else
      raise ETntInternalError.Create('Unexpected MsgType in GetMessageCaption.');
  end;
end;

function GetButtonCaption(MsgDlgBtn: TMsgDlgBtn): WideString;
begin
  case MsgDlgBtn of
    mbYes:         Result := SMsgDlgYes;
    mbNo:          Result := SMsgDlgNo;
    mbOK:          Result := SMsgDlgOK;
    mbCancel:      Result := SMsgDlgCancel;
    mbAbort:       Result := SMsgDlgAbort;
    mbRetry:       Result := SMsgDlgRetry;
    mbIgnore:      Result := SMsgDlgIgnore;
    mbAll:         Result := SMsgDlgAll;
    mbNoToAll:     Result := SMsgDlgNoToAll;
    mbYesToAll:    Result := SMsgDlgYesToAll;
    mbHelp:        Result := SMsgDlgHelp;
    else
      raise ETntInternalError.Create('Unexpected MsgDlgBtn in GetButtonCaption.');
  end;
end;

var
  IconIDs: array[TMsgDlgType] of PAnsiChar = (IDI_EXCLAMATION, IDI_HAND,
    IDI_ASTERISK, IDI_QUESTION, nil);
  ButtonNames: array[TMsgDlgBtn] of WideString = (
    'Yes', 'No', 'OK', 'Cancel', 'Abort', 'Retry', 'Ignore', 'All', 'NoToAll',
    'YesToAll', 'Help');
  ModalResults: array[TMsgDlgBtn] of Integer = (
    mrYes, mrNo, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrAll, mrNoToAll,
    mrYesToAll, 0);

function WideCreateMessageDialog(const Msg: WideString; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; DefaultButton: TMsgDlgBtn): TTntForm;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu国产在线精品一区二区| 欧美日韩不卡一区二区| 奇米色777欧美一区二区| 亚洲一区二区三区四区的| 亚洲少妇30p| 亚洲女爱视频在线| 亚洲欧美日韩在线| 亚洲国产日日夜夜| 蜜臀av一区二区在线观看 | 国产精品第四页| 国产精品午夜久久| 1区2区3区欧美| 亚洲美女视频在线| 亚洲国产va精品久久久不卡综合| 亚洲一区二区三区中文字幕在线| 亚洲不卡一区二区三区| 麻豆中文一区二区| 国产v日产∨综合v精品视频| 成人午夜又粗又硬又大| 欧美日韩在线精品一区二区三区激情| 日韩欧美国产麻豆| 国产精品理论在线观看| 水野朝阳av一区二区三区| 久久99精品久久久久婷婷| 成人国产精品免费观看视频| 欧美亚洲日本国产| 日韩精品在线一区二区| 中文字幕一区二区三区四区 | 一区二区三区在线视频免费| 亚洲va国产va欧美va观看| 麻豆国产精品官网| 国产成人精品免费在线| 色8久久精品久久久久久蜜| 日韩一级黄色片| 国产精品久久午夜| 蜜桃久久久久久| 一本大道久久a久久精品综合| 日韩一区二区高清| 中文字幕亚洲在| 裸体歌舞表演一区二区| 日本精品免费观看高清观看| 欧美大片在线观看一区二区| 亚洲欧美日韩精品久久久久| 国产一区二区三区在线观看精品| 欧美三区在线观看| 综合精品久久久| 国产一区 二区| 欧美一区二区三区性视频| 亚洲色图一区二区| 国产a区久久久| 中文av一区二区| 日韩成人一区二区三区在线观看| 日本精品视频一区二区三区| 美国毛片一区二区| 色婷婷国产精品| 国产午夜三级一区二区三| 青青草91视频| 欧美撒尿777hd撒尿| 日本一区二区三区久久久久久久久不| 日本午夜一区二区| 欧美日韩卡一卡二| 亚洲精选一二三| av午夜精品一区二区三区| 久久尤物电影视频在线观看| 日韩不卡在线观看日韩不卡视频| 欧美熟乱第一页| 亚洲色图清纯唯美| 色偷偷成人一区二区三区91| 自拍av一区二区三区| 99视频精品全部免费在线| 国产精品视频免费看| 成人精品电影在线观看| 最新日韩在线视频| 91视频91自| 亚洲自拍偷拍麻豆| 欧美精品18+| 蜜臀99久久精品久久久久久软件| 日韩午夜在线观看| 免费观看成人av| 久久久久国产一区二区三区四区 | 成人在线视频首页| 国产农村妇女毛片精品久久麻豆| 国产乱子伦视频一区二区三区| 久久久99免费| 91玉足脚交白嫩脚丫在线播放| 亚洲精品老司机| 欧美日韩性生活| 极品尤物av久久免费看| 久久精品亚洲国产奇米99| 成人av网站免费观看| 亚洲另类春色国产| 欧美日韩精品三区| 久草中文综合在线| 国产精品色哟哟| 欧美亚洲自拍偷拍| 久久精品免费看| 亚洲免费色视频| 日韩欧美国产午夜精品| 不卡一区二区三区四区| 亚洲成精国产精品女| 久久精品一级爱片| 欧洲一区二区三区免费视频| 麻豆国产欧美日韩综合精品二区 | 在线成人免费观看| 国模大尺度一区二区三区| 亚洲视频网在线直播| 欧美日韩aaaaa| 国产成人亚洲综合a∨婷婷图片| 亚洲视频你懂的| 日韩午夜在线播放| 日本道免费精品一区二区三区| 日韩av一区二区在线影视| 国产亚洲欧美在线| 欧美日韩一本到| 成人国产精品免费| 日韩福利视频导航| 最新不卡av在线| 精品国免费一区二区三区| 成年人午夜久久久| 韩国中文字幕2020精品| 亚洲韩国精品一区| 国产精品网友自拍| 精品国产一区二区三区四区四| 日本高清不卡一区| 成人一级片在线观看| 美腿丝袜在线亚洲一区| 亚洲已满18点击进入久久| 国产精品日产欧美久久久久| 欧美一级日韩免费不卡| 91成人免费网站| 成人蜜臀av电影| 国产99久久久国产精品潘金| 日本不卡123| 丝袜亚洲另类欧美综合| 一区二区免费在线| 中文字幕一区二区三区视频 | 欧美人伦禁忌dvd放荡欲情| 99精品视频在线播放观看| 国产精品一区二区三区99| 久久精品国产亚洲a| 蜜臀av一区二区在线免费观看| 亚洲一区二区三区激情| 一区二区免费视频| 一区二区免费看| 亚洲精选免费视频| 亚洲一区二区三区不卡国产欧美| 亚洲欧美另类综合偷拍| 国产精品视频看| 亚洲天堂精品视频| 亚洲色欲色欲www在线观看| 亚洲色图欧洲色图| 一区二区成人在线视频| 亚洲精品第1页| 一区二区三区欧美日韩| 亚洲一二三四在线观看| 午夜精品久久久久| 日韩极品在线观看| 久久精品国产99国产| 黄色资源网久久资源365| 国产乱子伦视频一区二区三区 | 日本久久电影网| 精品视频资源站| 日韩午夜精品视频| 久久久久国产一区二区三区四区| 亚洲国产精品99久久久久久久久| 国产亚洲精品久| 成人免费在线视频观看| 一区二区成人在线视频| 日本不卡在线视频| 国产精品一区免费视频| 色综合天天在线| 欧美挠脚心视频网站| 久久久国际精品| 亚洲男帅同性gay1069| 日韩电影一二三区| 成人午夜免费av| 欧美日韩在线播放| 久久久久久久久久久电影| 亚洲老妇xxxxxx| 久久国产尿小便嘘嘘尿| 99精品欧美一区| 欧美放荡的少妇| 国产女主播视频一区二区| 亚洲一区二区三区不卡国产欧美| 久久99精品国产| 一本色道久久综合亚洲精品按摩| 91精品久久久久久久91蜜桃| 久久久亚洲国产美女国产盗摄 | 国产精品美女一区二区| 亚洲综合激情另类小说区| 国产一区视频在线看| 欧美视频一区二区在线观看| 久久久亚洲国产美女国产盗摄 | 亚洲国产精品二十页| 日日夜夜精品免费视频| 国产精品一二三四五| 色94色欧美sute亚洲线路二| 精品国产91久久久久久久妲己 | 久久福利视频一区二区| 一本色道**综合亚洲精品蜜桃冫|