?? uoptvars.pas
字號(hào):
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';
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;
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.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -