📄 jvhleditorpropertyform.pas
字号:
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvHLEdPropDlg.PAS, released on 2002-07-04.
The Initial Developers of the Original Code are: Andrei Prygounkov <a dott prygounkov att gmx dott de>
Copyright (c) 1999, 2002 Andrei Prygounkov
All Rights Reserved.
Contributor(s):
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.sourceforge.net
component : TJvHLEdPropDlg
description : Properties dialog for TJvHLEditor component
Known Issues:
-----------------------------------------------------------------------------}
// $Id: JvHLEditorPropertyForm.pas,v 1.40 2005/02/17 10:20:36 marquardt Exp $
unit JvHLEditorPropertyForm;
{$I jvcl.inc}
interface
uses
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
Windows, Messages, SysUtils, Classes, Graphics, ComCtrls, Controls,
Forms, StdCtrls, ExtCtrls,
JvFormPlacement, JvEditorCommon, JvComponent, JvHLEditor;
type
TJvHLEdPropDlg = class;
TJvHLEditorParamsForm = class(TJvForm)
Pages: TPageControl;
bCancel: TButton;
bOK: TButton;
tsEditor: TTabSheet;
lblEditorSpeedSettings: TLabel;
cbKeyboardLayout: TComboBox;
gbEditor: TGroupBox;
cbUndoAfterSave: TCheckBox;
cbDoubleClickLine: TCheckBox;
cbKeepTrailingBlanks: TCheckBox;
cbSytaxHighlighting: TCheckBox;
cbAutoIndent: TCheckBox;
cbSmartTab: TCheckBox;
cbBackspaceUnindents: TCheckBox;
cbGroupUndo: TCheckBox;
cbCursorBeyondEOF: TCheckBox;
eTabStops: TEdit;
lblTabStops: TLabel;
tsColors: TTabSheet;
lblColorSpeedSettingsFor: TLabel;
cbColorSettings: TComboBox;
lblElement: TLabel;
lbElements: TListBox;
lblColor: TLabel;
gbTextAttributes: TGroupBox;
cbBold: TCheckBox;
cbItalic: TCheckBox;
cbUnderline: TCheckBox;
gbUseDefaultsFor: TGroupBox;
cbDefForeground: TCheckBox;
cbDefBackground: TCheckBox;
Label6: TLabel;
Panel1: TPanel;
Cell0: TPanel;
Cell4: TPanel;
Cell8: TPanel;
Cell12: TPanel;
Cell1: TPanel;
Cell5: TPanel;
Cell9: TPanel;
Cell13: TPanel;
Cell2: TPanel;
Cell6: TPanel;
Cell10: TPanel;
Cell14: TPanel;
Cell3: TPanel;
Cell7: TPanel;
Cell11: TPanel;
Cell15: TPanel;
procedure FormCreate(Sender: TObject);
procedure NotImplemented(Sender: TObject);
procedure lbElementsClick(Sender: TObject);
procedure lbElementsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure ColorChange(Sender: TObject);
procedure cbColorSettingsChange(Sender: TObject);
procedure DefClick(Sender: TObject);
procedure CellMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
JvHLEditorPreview: TJvHLEditor;
FHighlighter: TJvHighlighter;
SC: TJvSymbolColor;
InChanging: Boolean;
Params: TJvHLEdPropDlg;
FColorSamples: TStringList;
procedure LoadLocale;
function ColorToIndex(const AColor: TColor): Integer;
function GetColorIndex(const ColorName: string): Integer;
function GetForegroundIndex: Integer;
function GetBackgroundIndex: Integer;
procedure SetColorIndex(const Index: Integer;
const ColorName, OtherColorName: string);
procedure SetForegroundIndex(const Index: Integer);
procedure SetBackgroundIndex(const Index: Integer);
function GetColorColor(const ColorName: string): TColor;
function GetForegroundColor: TColor;
function GetBackgroundColor: TColor;
function GetCell(const Index: Integer): TPanel;
function GetColorSamples: TStrings;
procedure SetColorSamples(Value: TStrings);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ParamsToControls;
procedure ControlsToParams;
property ColorSamples: TStrings read GetColorSamples write SetColorSamples;
end;
TJvHLEdActivePage = 0..1;
TJvHLEdReadFrom = (rfStorage, rfHLEditor);
TJvHLEdPages = set of (epEditor, epColors);
TOnDialogPopup = procedure(Sender: TObject; Form: TForm) of object;
TOnDialogClosed = procedure(Sender: TObject; Form: TForm; Apply: Boolean) of object;
TJvHLEdPropDlg = class(TComponent)
private
FJvHLEditor: TJvCustomEditorBase;
FStorage: TJvFormStorage;
FColorSamples: TStringList;
FHighlighterCombo: Boolean;
FActivePage: TJvHLEdActivePage;
FReadFrom: TJvHLEdReadFrom;
FPages: TJvHLEdPages;
FStorageSection: string; { ini section for FStorage }
FOnDialogPopup: TOnDialogPopup;
FOnDialogClosed: TOnDialogClosed;
function GetColorSamples: TStrings;
procedure SetColorSamples(Value: TStrings);
function IsPagesStored: Boolean;
procedure SetJvHLEditor(const Value: TJvCustomEditorBase);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Save;
procedure Restore;
procedure LoadHighlighterColors(AJvHLEditor: TJvCustomEditorBase; AHighlighter: TJvHighlighter);
procedure SaveHighlighterColors(AJvHLEditor: TJvCustomEditorBase; AHighlighter: TJvHighlighter);
function Execute: Boolean;
procedure LoadCurrentHighlighterColors;
procedure SaveCurrentHighlighterColors;
published
property JvHLEditor: TJvCustomEditorBase read FJvHLEditor write SetJvHLEditor;
property Storage: TJvFormStorage read FStorage write FStorage;
property ColorSamples: TStrings read GetColorSamples write SetColorSamples;
property HighlighterCombo: Boolean read FHighlighterCombo write FHighlighterCombo default True;
property ActivePage: TJvHLEdActivePage read FActivePage write FActivePage default 0;
property ReadFrom: TJvHLEdReadFrom read FReadFrom write FReadFrom default rfStorage;
property Pages: TJvHLEdPages read FPages write FPages stored IsPagesStored;
property StorageSection: string read FStorageSection write FStorageSection;
property OnDialogPopup: TOnDialogPopup read FOnDialogPopup write FOnDialogPopup;
property OnDialogClosed: TOnDialogClosed read FOnDialogClosed write FOnDialogClosed;
end;
const
Highlighters: array [TJvHighlighter] of PChar =
('None', 'Pascal', 'CBuilder', 'Sql', 'Python', 'Java', 'VB', 'Html',
'Perl', 'Ini', 'CocoR', 'PHP', 'NQC', 'C#', 'User Defined');
HighlighterNames: array [TJvHighlighter] of PChar =
('Default', 'Pascal', 'CBuilder', 'Sql', 'Python', 'Java', 'VB', 'Html',
'Perl', 'Ini', 'Coco/R', 'PHP', 'NQC', 'C#', 'Custom');
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvHLEditorPropertyForm.pas,v $';
Revision: '$Revision: 1.40 $';
Date: '$Date: 2005/02/17 10:20:36 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
Math,
JvJVCLUtils, JvJCLUtils, JvResources, JvTypes;
{$R *.dfm}
function GetHardCodedExamples: string; forward;
function Pixels(Control: TControl; APixels: Integer): Integer;
var
Form: TForm;
begin
Result := APixels;
if Control is TForm then
Form := TForm(Control)
else
Form := TForm(GetParentForm(Control));
if Form.Scaled then
Result := Result * Form.PixelsPerInch div 96;
end;
//=== { TJvSampleViewer } ====================================================
type
TJvSampleViewer = class(TJvHLEditor)
private
TmpEd: TJvHLEditor;
procedure WMLButtonDown(var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;
protected
procedure WndProc(var Msg: TMessage); override;
public
constructor Create(AOwner: TComponent); override;
end;
constructor TJvSampleViewer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
TmpEd := TJvHLEditor.Create(Self);
TmpEd.Visible := False;
TmpEd.Parent := Self;
end;
procedure TJvSampleViewer.WndProc(var Msg: TMessage);
begin
case Msg.Msg of
{WM_LBUTTONDOWN,}WM_LBUTTONUP, WM_RBUTTONDOWN, WM_RBUTTONUP,
WM_MOUSEMOVE, WM_LBUTTONDBLCLK, WM_RBUTTONDBLCLK:
{ nothing - prevent user interact };
else
inherited WndProc(Msg);
end;
end;
procedure TJvSampleViewer.WMLButtonDown(var Msg: TWMLButtonDown);
var
XX, YY: Integer;
F: Integer;
Str: string;
begin
{ also prevent user interact }
{ detect symbol type }
Mouse2Caret(Msg.XPos, Msg.YPos, XX, YY);
if Cardinal(YY) > Cardinal(TmpEd.Lines.Count) then
Exit;
if (XX = RightMargin) or (XX - 1 = RightMargin) then
F := 13
else
begin
TmpEd.Lines := Lines;
TmpEd.Highlighter := Highlighter;
{ color values corresponds to lbElements ListBox }
TmpEd.Font.Color := 0;
with TmpEd.Colors do
begin
Comment.ForeColor := 1;
Reserved.ForeColor := 2;
Identifier.ForeColor := 3;
Symbol.ForeColor := 4;
Strings.ForeColor := 5;
Number.ForeColor := 6;
Preproc.ForeColor := 7;
Declaration.ForeColor := 8;
FunctionCall.ForeColor := 9;
Statement.ForeColor := 10;
PlainText.ForeColor := 11;
end;
TmpEd.SelForeColor := 12;
Str := TmpEd.Lines[YY];
TJvSampleViewer(TmpEd).GetLineAttr(Str, YY, 0, Max_X - 1);
F := TJvSampleViewer(TmpEd).LineAttrs[XX].FC;
end;
(Owner as TJvHLEditorParamsForm).lbElements.ItemIndex := F;
(Owner as TJvHLEditorParamsForm).lbElementsClick((Owner as TJvHLEditorParamsForm).lbElements);
end;
//=== { TJvHLEdPropDlg } =====================================================
constructor TJvHLEdPropDlg.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FHighlighterCombo := True;
FColorSamples := TStringList.Create;
FColorSamples.Text := GetHardCodedExamples;
FPages := [epColors];
end;
destructor TJvHLEdPropDlg.Destroy;
begin
FColorSamples.Free;
inherited Destroy;
end;
procedure TJvHLEdPropDlg.Save;
const
cParams = 'Params';
var
S: string;
HLed: IJvHLEditor;
begin
if Storage <> nil then
begin
// raise Exception.CreateRes(@RsEHLEdPropDlg_RegAutoNotAssigned);
FJvHLEditor.GetInterface(IJvHLEditor, HLed);
S := AddSlash2(FStorageSection) + cParams;
with Storage do
begin
StoredValue['DoubleClickLine'] := FJvHLEditor.DoubleClickLine;
StoredValue['UndoAfterSave'] := FJvHLEditor.UndoAfterSave;
StoredValue['KeepTrailingBlanks'] := FJvHLEditor.KeepTrailingBlanks;
StoredValue['AutoIndent'] := FJvHLEditor.AutoIndent;
StoredValue['SmartTab'] := FJvHLEditor.SmartTab;
StoredValue['BackspaceUnindents'] := FJvHLEditor.BackSpaceUnindents;
StoredValue['GroupUndo'] := FJvHLEditor.GroupUndo;
StoredValue['CursorBeyondEOF'] := FJvHLEditor.CursorBeyondEOF;
StoredValue['SyntaxHighlighting'] := HLed.SyntaxHighlighting;
StoredValue['TabStops'] := FJvHLEditor.TabStops;
StoredValue['RightMargin'] := FJvHLEditor.RightMargin;
end;
end;
end;
procedure TJvHLEdPropDlg.Restore;
const
cParams = 'Params';
var
S: string;
HLed: IJvHLEditor;
begin
if Storage <> nil then
begin
// raise Exception.CreateRes(@RsEHLEdPropDlg_RegAutoNotAssigned);
S := AddSlash2(StorageSection) + cParams;
FJvHLEditor.GetInterface(IJvHLEditor, HLed);
with Storage do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -