?? unit2.pas.svn-base
字號:
unit unit2;
{$I Easy.inc}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, EasyEditor, StdCtrls, EasyBox, Buttons, EasyEditSource, EasyControls,
EasyClasses, EasyParser, EasyKeyMap, DBCtrls, Db, EasyDBEditor, EasyRuler,
DBTables, ComCtrls, shellapi;
const
LanguagesCount = 39;
type
TfrmContainer = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
TabSheet6: TTabSheet;
TabSheet7: TTabSheet;
TabSheet8: TTabSheet;
TabSheet9: TTabSheet;
TabSheet10: TTabSheet;
GutterMarginPanel: TPanel;
Panel2: TPanel;
gbBreakpointAndBookmarks: TGroupBox;
SpeedButton1: TSpeedButton;
SpeedButton12: TSpeedButton;
gbMargin: TGroupBox;
lbMarginColor: TLabel;
lbMarginPosition: TLabel;
edMarginPosition: TEdit;
EasyColorBox1: TEasyColorBox;
gbGutterMargin: TGroupBox;
lbGutterWidth: TLabel;
lbGutterColor: TLabel;
chbLineNumbers: TCheckBox;
chbLinesOnGutter: TCheckBox;
chbShowGutter: TCheckBox;
cbGutterColor: TEasyColorBox;
edWidth: TEdit;
chbShowMargin: TCheckBox;
WrapPanel: TPanel;
Panel1: TPanel;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
gbWordWrap: TGroupBox;
chbWordWrap: TCheckBox;
chbUseTabCharacter: TCheckBox;
chbWrapAtMargin: TCheckBox;
chbCursorThroughTabs: TCheckBox;
BackgroundPanel: TPanel;
Panel4: TPanel;
gbEdit: TGroupBox;
lbStyleGutter: TLabel;
lbBeginColorGutter: TLabel;
lbEndColorGutter: TLabel;
cbBackgroundOptions: TComboBox;
cbBeginColorStyle: TEasyColorBox;
cbEndColorStyle: TEasyColorBox;
gbGutter: TGroupBox;
lbStyleEdit: TLabel;
lbBeginColorEdit: TLabel;
lbEndColorEdit: TLabel;
cbGutterOptions: TComboBox;
cbBeginColorStyleGutter: TEasyColorBox;
cbEndColorStyleGutter: TEasyColorBox;
SyntaxParsersPanel: TPanel;
lbLanguages: TListBox;
pnSyntaxParser: TPanel;
lbLanguage: TLabel;
lbPress: TLabel;
lbColorMapping: TLabel;
cbColorMapping: TComboBox;
EasyEditorDialogPanel: TPanel;
Panel5: TPanel;
btLoad: TButton;
btSave: TButton;
btFind: TButton;
btCustomize: TButton;
btReplace: TButton;
btGoTo: TButton;
EasyEditorSourcePanel: TPanel;
Panel7: TPanel;
lbSeveralEditor: TLabel;
DBEasyEditorPanel: TPanel;
Panel8: TPanel;
lbEasyEditor: TLabel;
chbActive: TCheckBox;
chbAutoDisplay: TCheckBox;
chbReadOnly: TCheckBox;
DBNavigator1: TDBNavigator;
Panel6: TPanel;
pnStandartMemo: TPanel;
lbStandartMemo: TLabel;
DBMemo1: TDBMemo;
PageTypePanel: TPanel;
Panel9: TPanel;
lbPageType: TLabel;
ComboBox1: TComboBox;
CompanyPanel: TPanel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
pnProject1: TPanel;
Panel10: TPanel;
Panel11: TPanel;
Panel12: TPanel;
Label30: TLabel;
Label32: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
EasyEditSource1: TEasyEditSource;
EasyEditorParser1: TEasyEditorParser;
EasyEditorParser2: TEasyEditorParser;
EasyEditSource2: TEasyEditSource;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
EasyEditorParser3: TEasyEditorParser;
EasyEditSource3: TEasyEditSource;
Panel3: TPanel;
Label14: TLabel;
Label15: TLabel;
Label4: TLabel;
Label5: TLabel;
Label7: TLabel;
Label6: TLabel;
Panel13: TPanel;
Label29: TLabel;
Label2: TLabel;
EasyEdit1: TEasyEdit;
EasyEdit2: TEasyEdit;
EasyEdit4: TEasyEdit;
EasyEdit3: TEasyEdit;
EasyEdit5: TEasyEdit;
EasyEdit6: TEasyEdit;
EasyEdit7: TEasyEdit;
EasyDBEdit1: TEasyDBEdit;
EasyEdit8: TEasyEdit;
TabSheet11: TTabSheet;
Label3: TLabel;
pnProject2: TPanel;
Panel15: TPanel;
Label9: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Panel16: TPanel;
Label26: TLabel;
Panel17: TPanel;
Label28: TLabel;
Label31: TLabel;
Panel18: TPanel;
Label33: TLabel;
Label34: TLabel;
Label35: TLabel;
Label36: TLabel;
TabSheet12: TTabSheet;
PrintPanel: TPanel;
Panel19: TPanel;
btnRtf: TButton;
btnHtml: TButton;
btnPreview: TButton;
btnPrint: TButton;
EasyEdit9: TEasyEdit;
SaveDialog2: TSaveDialog;
btnCollapse: TButton;
Timer1: TTimer;
sbPaintFormattingMarks: TSpeedButton;
cbRulerUnits: TComboBox;
Label27: TLabel;
gbBlockSelMode: TGroupBox;
cbBlockSelMode: TComboBox;
Label37: TLabel;
cbLineBreak: TComboBox;
Label38: TLabel;
cbBlockSelection: TCheckBox;
chbHighlightBrackets: TCheckBox;
Image2: TImage;
Label1: TLabel;
Label8: TLabel;
Label39: TLabel;
btnPrintSettings: TButton;
chbDrawLineBookmarks: TCheckBox;
chbLineReadOnly: TCheckBox;
chbTripleClickLine: TCheckBox;
gbUndoRedo: TGroupBox;
sbtUndo: TSpeedButton;
sbtRedo: TSpeedButton;
chbUndoAfterSave: TCheckBox;
laModified: TLabel;
chbLeaveTabs: TCheckBox;
procedure chbWordWrapClick(Sender: TObject);
procedure chbUseTabCharacterClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure chbCursorThroughTabsClick(Sender: TObject);
procedure cbBackgroundOptionsChange(Sender: TObject);
procedure EasycbBeginColorStyleChange(Sender: TObject);
procedure EasycbEndColorStyleChange(Sender: TObject);
procedure btFindClick(Sender: TObject);
procedure lbLanguagesClick(Sender: TObject);
procedure btCustomizeClick(Sender: TObject);
procedure chbLineNumbersClick(Sender: TObject);
procedure chbLinesOnGutterClick(Sender: TObject);
procedure chbShowGutterClick(Sender: TObject);
procedure edWidthEnter(Sender: TObject);
procedure cbGutterColorChange(Sender: TObject);
procedure chbShowMarginClick(Sender: TObject);
procedure edMarginPositionEnter(Sender: TObject);
procedure EasyColorBox1Change(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton12Click(Sender: TObject);
procedure chbWrapAtMarginClick(Sender: TObject);
procedure cbBeginColorStyleChange(Sender: TObject);
procedure cbEndColorStyleChange(Sender: TObject);
procedure cbGutterOptionsChange(Sender: TObject);
procedure btReplaceClick(Sender: TObject);
procedure btGoToClick(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure cbColorMappingChange(Sender: TObject);
procedure chbActiveClick(Sender: TObject);
procedure chbAutoDisplayClick(Sender: TObject);
procedure chbReadOnlyClick(Sender: TObject);
procedure Label30Click(Sender: TObject);
procedure Label29Click(Sender: TObject);
procedure Label31Click(Sender: TObject);
procedure Label10Click(Sender: TObject);
procedure Label11Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure cbBeginColorStyleGutterChange(Sender: TObject);
procedure cbEndColorStyleGutterChange(Sender: TObject);
procedure btLoadClick(Sender: TObject);
procedure btSaveClick(Sender: TObject);
procedure EasyEdit1WordSpell(Sender: TObject; const s: String;
var Correct: Boolean);
procedure EasyEdit3AutoComplete(Sender: TObject; Strings: TStrings;
AKey: Char; var AllowPopup: Boolean);
procedure EasyEdit3DisplayHint(Sender: TObject; var s: String;
AKey: Char; var AllowPopup: Boolean);
procedure EasyEdit3BeforeInsertPopup(Sender: TObject; var s: String);
procedure btnRtfClick(Sender: TObject);
procedure btnHtmlClick(Sender: TObject);
procedure btnPreviewClick(Sender: TObject);
procedure btnPrintClick(Sender: TObject);
procedure btnCollapseClick(Sender: TObject);
procedure EasyEdit1SourceChanged(Sender: TObject;
State: TEasyEditSourceStates);
procedure Timer1Timer(Sender: TObject);
procedure sbPaintFormattingMarksClick(Sender: TObject);
procedure cbRulerUnitsChange(Sender: TObject);
procedure cbBlockSelModeChange(Sender: TObject);
procedure cbLineBreakChange(Sender: TObject);
procedure cbBlockSelectionClick(Sender: TObject);
procedure chbHighlightBracketsClick(Sender: TObject);
procedure EasyEdit3KeyPress(Sender: TObject; var Key: Char);
procedure btnPrintSettingsClick(Sender: TObject);
procedure chbDrawLineBookmarksClick(Sender: TObject);
procedure EasyEdit2SelectionChanged(Sender: TObject);
procedure chbLineReadOnlyClick(Sender: TObject);
procedure chbTripleClickLineClick(Sender: TObject);
procedure sbtUndoClick(Sender: TObject);
procedure sbtRedoClick(Sender: TObject);
procedure chbUndoAfterSaveClick(Sender: TObject);
procedure EasyEdit5SelectionChanged(Sender: TObject);
procedure chbLeaveTabsClick(Sender: TObject);
private
FCollapse : boolean;
FDisableFlag : boolean;
FLoading : boolean;//am
procedure CollapseChanged;
procedure UpdateCollapse(ACollapse : boolean);
procedure CollapseCode(ACollapse : boolean);
procedure FindInPopupBox(Sender : TObject; AStrings : TStrings; const s : string; var Index : integer; var Handled : boolean);
procedure UpdateModified;//am
public
{ Public declarations }
end;
TLanguagesTextAndRules = array [1..LanguagesCount] of string;
var
frmContainer: TfrmContainer;
const
LanguagesText : TLanguagesTextAndRules = ('aspinhtml.txt', 'assembler.txt', 'awk.txt',
'c.txt', 'csharp.txt', 'cppbuilder.txt', 'clarion.txt', 'clipper.txt', 'cobol.txt',
'css1.txt', 'css2.txt', 'dfm.txt', 'fortran.txt', 'foxpro.txt', 'html.txt', 'ini.txt',
'javabuilder.txt', 'jscript.txt', 'jsinhtml.txt', 'latex.txt', 'midl.txt',
'modula2.txt', 'batch.txt', 'oberon.txt', 'objectpascal.txt', 'perl.txt',
'phpinhtml.txt', 'plsql.txt', 'python.txt', 'rc.txt', 'sql_oracle.txt',
'tcltk.txt', 'shell.txt', 'vbscript.txt', 'vbsinhtml.txt', 'vbasic.txt',
'vb_net.txt','xml.txt', 'xml_scripts.txt');//am
LanguagesRules : TLanguagesTextAndRules = ('asp(vbs)_html.xs', 'assembler.xs', 'awk_script.xs', 'c.xs',
'c#.xs', 'c++builder.xs', 'clarion.xs', 'cliper.xs', 'cobol.xs', 'css_lev1.xs', 'css_lev2.xs',
'dfm_files.xs', 'fortran.xs', 'foxpro.xs', 'html.xs', 'ini_files.xs', 'java.xs', 'java_script.xs',
'javascript_html.xs', 'latex.xs', 'microsoft_idl.xs', 'modula2.xs', 'ms_dosbl.xs', 'oberon.xs',
'delphi.xs', 'perl.xs', 'php_in_html.xs', 'pl_sql.xs', 'python.xs', 'resourse_rs_files.xs',
'sql_oracle.xs', 'tcltk.xs', 'unix_shell.xs', 'vbs_script.xs', 'vbs_script_html.xs',
'vis_basic.xs', 'vb_net.xs', 'xml.xs', 'xml_with_scripts.xs');//am
implementation
uses
typinfo,
EasyStrings, EasyUtils, EasyRtfExport, EasyHtmlExport, EasyCustomDlg, EasyPreviewDlg,
EasySearchDlg, EasyReplDlg, EasyGoToDlg, EasyPrintDlg, EasyProgressDlg;
{$R *.DFM}
const
sPropStr = '{\rtf{\colortbl\red0\green0\blue0;\red0\green128\blue128;} \cf1 Property \cf0 | %s | \b %s}';
tresword = 6;
type
TMStrings = class(TEasyStrings);
TMParser = class(TEasyEditorParser);
{------------------------------------------------------}
procedure FillStrings(Strings : TStrings; AClass : TClass);
var
i : integer;
Count : integer;
RealCount : integer;
PropInfo : PPropInfo;
PropList : PPropList;
begin
Count := GetTypeData(AClass.ClassInfo)^.PropCount;
if Count > 0 then
begin
GetMem(PropList, Count * SizeOf(Pointer));
try
RealCount := GetPropList(AClass.ClassInfo, tkAny, PropList);
for I := 0 to RealCount - 1 do
begin
PropInfo := PropList^[I];
Strings.Add(Format(sPropStr, [PropInfo.Name, PropInfo.PropType^.Name]));
end;
finally
FreeMem(PropList, Count * SizeOf(Pointer));
end;
end;
end;
function FillCodeCompletion(Editor : TCustomEasyEdit; Strings : TStrings) : boolean;
var
s : string;
Cmp : TComponent;
AClass : TClass;
begin
result := false;
Strings.Clear;
with Editor, EditSource, CurrentPosition do
s := GetTextAt(Point(X - 1, Y), false);
if (s <> '') and (s[Length(s)] = '.') then
Delete(s, Length(s), 1);
AClass := GetClass(s);
if AClass <> nil then
begin
result := true;
FillStrings(Strings, AClass)
end
else
begin
Cmp := Editor.Owner.FindComponent(s);
if Cmp <> nil then
begin
FillStrings(Strings, Cmp.ClassType);
result := true;
end
else
FillStrings(Strings, TWinControl);
end;
end;
{------------------------------------------------------}
procedure JumpToURL(const s: string);
begin
ShellExecute(0, nil, PChar(s), nil, nil, SW_SHOW);
end;
{------------------------------------------------------}
procedure TfrmContainer.FormCreate(Sender: TObject);
procedure _LoadText(Value : TEasyEdit);
begin
Value.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + '..\' + 'text\objectpascal.txt');
end;
begin
EasyEditorParser1.Rules.LoadFromFile(ExtractFilePath(ParamStr(0)) + '..\' + 'syntax\delphi.xs');
EasyEdit2.WantTabs := True;
EasyEdit2.WordWrap := chbWordWrap.Checked;
chbWordWrap.Checked := True;
cbBeginColorStyle.SelectedColor := EasyEdit4.Background.GradientStartColor;
cbEndColorStyle.SelectedColor := EasyEdit4.Background.GradientEndColor;
cbBeginColorStyleGutter.SelectedColor := EasyEdit4.Gutter.Background.GradientStartColor;
cbEndColorStyleGutter.SelectedColor := EasyEdit4.Gutter.Background.GradientEndColor;
edWidth.Text := '32';
edMarginPosition.Text := '70';
cbBackgroundOptions.ItemIndex := 1;
_LoadText(EasyEdit1);
_LoadText(EasyEdit2);
_LoadText(EasyEdit4);
_LoadText(EasyEdit5);
_LoadText(EasyEdit6);
_LoadText(EasyEdit7);
_LoadText(EasyEdit8);
lbLanguages.ItemIndex := 0;
lbLanguages.OnClick(lbLanguages);
{$IFDEF EASY_FLATSB}
EasyEdit1.FlatScrollBars := true;
{$ENDIF}
Table1.Open;
EasyEdit3.OnFindStringInPopup := FindInPopupBox;
end;
procedure TfrmContainer.FindInPopupBox(Sender : TObject; AStrings : TStrings; const s : string; var Index : integer; var Handled : boolean);
var
i : integer;
function _Check(Str : string) : boolean;
var
P : integer;
begin
result := false;
P := Pos('|', Str);
if P <> 0 then
begin
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -