⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uoptvars.pas

📁 Delphi编写的一个支持语法高亮显示和很多语言的文本编辑器
💻 PAS
字号:
unit uOptVars;

interface

uses Graphics, Classes, ShellAPI, SysUtils, Windows, jclStrings, uTypes;
type
PProjRec = ^TProjRec;
TProjRec = record
  FName: string;
  iType: Integer;
end;
function FileToString(const FileName: String): String;
procedure GetFileExts(const AFilter: string; AExts: TStringList);
function GetIconIndexFromFile(const AFileName: string; const ASmall: boolean): integer;
procedure DrawRaisedEdge (DC: HDC; R: TRect; const FillInterior: Boolean);
function IsWhiteSpaceEx(c: AnsiChar): boolean;
function ScrollBarSize(const AHor: boolean): integer;
procedure ConvLinebreak(var AString: string; const AStyle: TLinebreak);
function GetLinebreak(const ASource: string): TLinebreak;
function ReplaceAcc(const s: string): string;
function GetNormalIcon(Path: string): integer;
function AddSlash(Path: string): string;
function GetSelectedIcon(Path: string): Integer;
function WindowsDirectory: string;
function TempDir: string;
function SystemDirectory: string;

function GetDefIconFromFile(const AFileName: string;
  const ASmall: boolean): integer;
function GetIconHandle(const AFileName: string;
  const ASmall: boolean): hIcon;
     const
  HH_DISPLAY_TOPIC        = $0000;
  HH_DISPLAY_TOC          = $0001;
  HH_CLOSE_ALL            = $0012;

function HtmlHelp(hwndCaller: HWND;
  pszFile: PChar; uCommand: UINT;
  dwData: DWORD): HWND; stdcall;
  external 'HHCTRL.OCX' name 'HtmlHelpA';

const
  cEditEditKey = 'Edit_with_cEdit';
  cEditPrintKey = 'Print_with_cEdit';
  SFilterAllFiles = 'All files (*.*)|*.*';
  sAppTitle = 'cEdit Profesional 5';

  SSpellNoSugg                 = 'No Suggestions';
  SDicNotFound                 = 'Dictionary ("%s") not found.';

  { Some Constants for the different Dirs :) }
  SVarProjectPathShort         = '$[ProjectPathShort]';
  SVarProjectPathLong          = '$[ProjectPathLong]';    
  SVarActiveDocFileShort       = '$[ActiveDocShort]';     
  SVarActiveDocFileLong        = '$[ActiveDocLong]';      
  SVarProjectFileShort         = '$[ProjectFileShort]';
  SVarProjectFileLong          = '$[ProjectFileLong]';
  SVarFileNamePromptShort      = '$[FileNameShort:?%d]';  
  SVarFileNamePromptLong       = '$[FileNameLong:?%d]';   
  SVarModFileNames             = '$[ModFiles]';
  // Partial filenames
  SVarActiveDocWithoutExtShort = '$[ActiveDocShortNoExt]';
  SVarActiveDocWithoutExtLong  = '$[ActiveDocLongNoExt]';
  SVarActiveDocTitleShort      = '$[ActiveDocTitleShort]';
  SVarActiveDocTitleLong       = '$[ActiveDocTitleLong]';
  SVarActiveDocTitleShortNoExt = '$[ActiveDocTitleShortNoExt]';
  SVarActiveDocTitleLongNoExt  = '$[ActiveDocTitleLongNoExt]';
  SVarActiveDocExt             = '$[ActiveDocExt]';
  // Paths
  SVarActiveDocPathShort       = '$[ActiveDocPathShort]'; 
  SVarActiveDocPathLong        = '$[ActiveDocPathLong]';  
  SVarProgramPathShort         = '$[ProgramPathShort]';   
  SVarProgramPathLong          = '$[ProgramPathLong]';    
  // System Paths
  SVarWinDirShort              = '$[WinDirShort]';        
  SVarSysDirShort              = '$[SysDirShort]';        
  SVarTempDirShort             = '$[TempDirShort]';       
  // Misc
  SVarCurWord                  = '$[CurWord]';
  SVarPrompt                   = '$[Prompt:%d]';
  SVarFormFileFirst            = '$[FromFile:';

  CrLf   = #13#10;
  CrLf2  = #13#10#13#10;
  Cr     = #13;
  Lf     = #10;

// Some global resource strings
ResourceString
  SNewTool                     = 'New Tool';
var
  { Editor - General Options }
  bAutoIndent: Boolean;
  bDragDropEditing: Boolean;
  bDragDropFiles: boolean;
  bAltSetsColumnMode: Boolean;
  bMaintainCaretColumn: Boolean;
  bWantTabs: Boolean;
  bSmartTabs: Boolean;
  bSmartTabDelete: Boolean;
  bRightMouseMovesCursor: Boolean;
  bEnhanceHomeKey: Boolean;
  bHideScrollBarsAsNeeded: Boolean;
  bHalfPageScroll: Boolean;
  bScrollbyOneLess: Boolean;
  bScrollPastEndofFile: Boolean;
  bScrollPastEndofLine: Boolean;
  bShowScrollHint: Boolean;
  bScrollHintFollowsMouse: Boolean;
  bTabsToSpaces: Boolean;
  bTrimTrailingSpaces: Boolean;
  bGroupUndo: Boolean;
  bDisableScrollArrows: Boolean;
  iInsertCaretMode: Integer;
  iOverwriteCaretMode: Integer;
  bMaximize: Boolean;
  bHighlightTabs: Boolean;
  gcHighlightTabs: Integer;

  { Editor - Gutter Options }
  bGutterVisible: Boolean;
  bGutterAutosize: Boolean;
  bGutterShowLineNumbers: Boolean;
  bGutterStartAtZero: Boolean;
  bGutterShowLeadingZeros: Boolean;
  bGutterUseGutterFont: Boolean;
  fGutterFont: TFont;
  cGutterColor: TColor;

  { Editor - Right Edge Options }
  iEdgeColumn: Integer;
  iEdgeColor: TColor;

  { Editor - Line/Tab Spacing Options }
  iExtraLines: Integer;
  iTabWidth: Integer;

  { Editor - Bookmark Options }
  bBookmarkKeys: Boolean;
  bBookmarksVisible: Boolean;

  { Editor - Main }
  fEditorFont: TFont;

  { Editor - Bracket Highlighting }
  gcMatchBracketColor: Integer;
  gcBadBracketColor: Integer;
  gcMatchBracketColorBack: Integer;
  gcBadBracketColorBack: Integer;

  gbHighlightBrackets: Boolean;
  gbHighlightBadBrackets: Boolean;

  { External Browser }
  sExternalBrowser: String;

  { Default Language}
  sDefaultHighlighter: String;
  bUseDefault: Boolean;

  { Global Close var }
  bCloseAll: Boolean;

  { Spell Checking Vars }
  strDictionary: String;
  bAutoCheck: Boolean;
  bFromCursor: Boolean;
  bIgnoreSingleCharacters: Boolean;
  bIgnoreNumbers: Boolean;
  iHashLength: Integer;
  gcPenColor: Integer;
  sCheckWhat: String;

  { Window }
  bMDITabs: Boolean;
  bStatusBar: Boolean;

  { AutoCorrect }
  bAEnabled: Boolean;
  bAMouseDown: BOolean;
  bABeep: Boolean;
  bAIgnore: Boolean;
  bAMaintain: Boolean;

  bSingleClick: Boolean;

  bReplaceAll: Boolean;
type
  TExportType = (etHTML, etRTF);


  // Tools
  TToolKind = (tkLaunchProgram, tkInsertString, tkEditCommand, tkDOSCommand);
  PToolType = ^TToolType;
  TToolType = record
    Name         : string;
    Arguments    : string;
    ExecuteCmd   : string;
  end;
implementation

procedure ConvLinebreak(var AString: string; const AStyle: TLinebreak);
begin
  case AStyle of
    lbUNIX    : StrReplace(AString, CrLf, Lf, [rfReplaceAll]);
    lbWindows : AString := AdjustLineBreaks(AString);
    lbMac     : StrReplace(AString, CrLf, Cr, [rfReplaceAll]);
  end;
end;



procedure GetFileExts(const AFilter: string; AExts: TStringList);
var
  CurLine, te: string;
  p, p2: integer;
begin
  p := Pos('|', AFilter) + 1;
  CurLine := Copy(AFilter, p, (Length(AFilter) - p) + 1);
  repeat
    p2 := Pos(';', CurLine);
    if p2 = 0 then
      p2 := Length(CurLine) + 1;
    te := Copy(CurLine, 1, p2 - 1);
    Delete(CurLine, 1, p2);
    p := Pos('.', te);
    if p = 0 then
      te := '.' + te
    else
      Delete(te, 1, p - 1);
    AExts.Add(te);
  until CurLine = '';
end;

function GetIconIndexFromFile(const AFileName: string;
  const ASmall: boolean): integer;
const
  small: array[Boolean] of Integer = (SHGFI_LARGEICON, SHGFI_SMALLICON);
var
  SHFileInfo: TSHFileInfo;
begin
  SHGetFileInfo(PChar(AFileName), 0, SHFileInfo, SizeOf(SHFileInfo),
    SHGFI_SYSICONINDEX or small[ASmall]);
  Result := SHFileInfo.iIcon;

end;

function GetNormalIcon(Path: string): integer;
var
  sfi: TShFileInfo;
begin
  SHGetFileInfo(Pchar(Path), 0, sfi, SizeOf(TSHFileInfo),
    SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  Result := sfi.iIcon;
end; {GetNormalIcon}


function GetDefIconFromFile(const AFileName: string;
  const ASmall: boolean): integer;
const
  small: array[Boolean] of Integer = (SHGFI_LARGEICON, SHGFI_SMALLICON);
var
  SHFileInfo: TSHFileInfo;
begin
    SHGetFileInfo(PChar(AFileName), 0, SHFileInfo, SizeOf(SHFileInfo),
      SHGFI_SYSICONINDEX or small[ASmall] or SHGFI_USEFILEATTRIBUTES);
    Result := SHFileInfo.iIcon;
end;

function GetIconHandle(const AFileName: string;
  const ASmall: boolean): hIcon;
const
  small: array[Boolean] of Integer = (SHGFI_LARGEICON, SHGFI_SMALLICON);
var
  SHFileInfo: TSHFileInfo;
begin
    SHGetFileInfo(PChar(AFileName), 0, SHFileInfo, SizeOf(SHFileInfo),
      $400 or $200 or $100 or 4 or 1 or SHGFI_USEFILEATTRIBUTES); //SHGFI_SYSICONINDEX or small[ASmall] or SHGFI_USEFILEATTRIBUTES);
    Result := SHFileInfo.hIcon;
end;

function ScrollBarSize(const AHor: boolean): integer;
const
  scrl: array[boolean] of integer = (SM_CXHSCROLL, SM_CXVSCROLL);
begin
  Result := GetSystemMetrics(scrl[AHor])
end;

procedure DrawRaisedEdge (DC: HDC; R: TRect; const FillInterior: Boolean);
  const
    FillMiddle: array[Boolean] of UINT = (0, BF_MIDDLE);
  begin
    DrawEdge (DC, R, BDR_RAISEDINNER, BF_RECT or FillMiddle[FillInterior]);
  end;

function AddSlash(Path: string): string;
begin
  if Path = '' then exit;
  if Path[Length(Path)] <> '\' then
    Result := Path + '\'
  else
    Result := Path;
end; {AddSlash}

function GetSelectedIcon(Path: string): Integer;
var
  sfi: TShFileInfo;
begin
  SHGetFileInfo(Pchar(Path), 0, sfi, sizeOf(TSHFileInfo),
    SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_OPENICON);
  Result := sfi.iIcon;
end; {GetSelectedIcon}

function WindowsDirectory: string;
var
  buf: array[0..MAX_PATH] of Char;
  size: integer;
begin
  Result := '';
  size := GetWindowsDirectory(buf, MAX_PATH);
  if size > 0 then
    Result := string(buf) + '\';
end;

function SystemDirectory: string;
var
  buf: array[0..MAX_PATH] of Char;
  size: integer;
begin
  Result := '';
  size := GetSystemDirectory(buf, MAX_PATH);
  if size > 0 then
    Result := string(buf) + '\';
end;

function TempDir: string;
var
  buf: array[0..MAX_PATH] of Char;
begin
  GetTempPath(Sizeof(buf), buf);
  Result := buf;
  If Result[Length(Result)] = '\' Then
    Result := Copy(Result, 1, Length(Result) - 1);
end;

function IsWhiteSpaceEx(c: AnsiChar): boolean;
const
  WhiteSpaceEx = [AnsiTab, AnsiLineFeed, AnsiVerticalTab, AnsiFormFeed,
    AnsiCarriageReturn, AnsiSpace, #34, #33, #39, #40, #41, #44, #46, #47,
    #58, #59, #60, #62, #63, #91, #92, #93, #123, #125, #171, #187];
begin
  Result := c in WhiteSpaceEx;
end;

function ReplaceAcc(const s: string): string;
begin
  // remove the accelerator from captions
  Result := s;
  while Pos('&', Result) > 0 do
    Delete(Result, Pos('&', Result), 1);
end;

function GetLinebreak(const ASource: string): TLinebreak;
var
  p: integer;
begin
  p := Pos(Lf, ASource);
  if p > 0 then begin
    if (p > 1) and (ASource[p - 1] = Cr) then
      Result := lbWindows
    else
      Result := lbUNIX;
  end else begin
    p := Pos(Cr, ASource);
    if p > 0 then
      Result := lbMac
    else
      Result := lbNoChange;
  end;
end;

function FileToString(const FileName: String): String;
var
  fs: TFileStream;
  len: Integer;
begin
  fs := TFileStream.Create(FileName, fmOpenRead {or fmShareDenyWrite});
  try
    len := fs.Size;
    SetLength(Result, len);
    if len > 0 then
      fs.ReadBuffer(Result[1], len);
  finally
    fs.Free;
  end;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -