?? accidenceeditfrm.pas
字號:
unit AccidenceEditFrm;
{*******************************************
* brief: 詞法編輯窗體
* autor: linzhenqun
* date: 2005-10-24
* email: linzhengqun@163.com
* blog: http://blog.csdn.net/linzhengqun
********************************************}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, BaseFrm, ExtCtrls, StdCtrls, ComCtrls, FontFrame, TabFrame,
Config;
type
{ 詞法狀態(tài)基類 控制一個配置文件}
TAcciState = class
protected
FAcciConfig: TAccidenceConfig; // 配置文件類
FAcciName: string; // 詞法名稱
FFileName: string; // 詞法對應(yīng)文件名 --全路徑
public
constructor Create(AcciName, FileName: string); virtual;
destructor Destroy; override;
function SaveToFile: Boolean; virtual; abstract;
function LoadFromFile: Boolean; virtual; abstract;
property AcciConfig: TAccidenceConfig read FAcciConfig;
property FileName:string read FFileName;
end;
{ 詞法狀態(tài):新建 -> AddTo Config.gSourceToConfig }
TNewAcciState = class(TAcciState)
public
function LoadFromFile: Boolean; override;
function SaveToFile: Boolean; override;
end;
{ 詞法狀態(tài):編輯 直接操作文件內(nèi)容 }
TEditAcciState = class(TAcciState)
public
constructor Create(AcciName: string; FileName: string); override;
function LoadFromFile: Boolean; override;
function SaveToFile: Boolean; override;
end;
TFrmAccidenceEdit = class(TFrmBase)
PageControl: TPageControl;
btnCancel: TButton;
btnOK: TButton;
TSGeneral: TTabSheet;
TSKeyWord: TTabSheet;
TSSymbols: TTabSheet;
btnAddKeyWord: TButton;
btnDelKeyWord: TButton;
Panel1: TPanel;
cbBGColor: TColorBox;
chkShowLine: TCheckBox;
chkIgnoreCase: TCheckBox;
lblBGColor: TLabel;
Bevel1: TBevel; // 常規(guī)字體
Bevel3: TBevel;
lblBaseInfo: TLabel;
lblFont: TLabel;
Panel2: TPanel;
btnDelSymbol: TButton;
btnAddSymbol: TButton;
TSNumber: TTabSheet;
NumFontFrame: TFrameFont; // 數(shù)字字體
Bevel5: TBevel;
lblFont2: TLabel;
GelFontFrame: TFrameFont;
procedure FormDestroy(Sender: TObject);
procedure btnAddKeyWordClick(Sender: TObject);
procedure btnDelKeyWordClick(Sender: TObject);
procedure btnAddSymbolClick(Sender: TObject);
procedure btnDelSymbolClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnOKClick(Sender: TObject);
private
{ Private declarations }
FKWTabMgr: TTabManager; // 關(guān)鍵字 頁
FSMTabMgr: TTabManager; // 符號 頁
FAcciState: TAcciState; // 文件狀態(tài)類(控制一個配置文件)
(* 將UI的值賦給詞法配置類 :先清配置文件內(nèi)容再加入界面內(nèi)容 *)
procedure SetValueToAcci;
(* 賦字體UI的值 *)
procedure SetFontFrame(AFontConfig: TFontConfig; AFontFrame: TFrameFont);
(* 設(shè)置字體配置的值 *)
procedure SetFontConfig(AFontFrame: TFrameFont; AFontConfig: TFontConfig);
(* 檢查是否編輯正確 *)
function IsInputRight: Boolean;
(* 格式化關(guān)鍵字的值列表 *)
procedure FormatKeyWordValues(KWValues: TStrings;TabIndex: integer);
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
procedure getLangRes;override; // 資源加載
property AcciState: TAcciState read FAcciState write FAcciState;
property KWTabMgr: TTabManager read FKWTabMgr;
property MMTabMgr: TTabManager read FSMTabMgr;
end;
var
FrmAccidenceEdit: TFrmAccidenceEdit;
implementation
uses
KeyWordFrame, RenameFrm, CommonUtils, SymbolFrame, AcciInfoFrmEx,
AcciInfoFrm;
{$R *.dfm}
{
resourcestring
Qust_Delete = '是否刪除當(dāng)前頁?';//'Do you want to delete the tab page.';
Info_BValue = '符號開始值不能為空!';//'Please input momment ''s begin value!';
Info_BValue_InVaild = '符號開始值無效,第一個字符必須不是字母或下劃線。';
Info_EValue = '符號結(jié)束值不能為空!';//'Please input momment ''s end value!';
Info_BValue_Dup ='符號頁 [%s] 與頁 [%s] 的開始值有重復(fù),請修改。';
Info_KeyWords_Empty ='頁 [%s] 關(guān)鍵字列表為空,繼續(xù)保存?';
Info_KeyWords_Dup ='符號頁 [%s] 與頁 [%s] 的關(guān)鍵字 [%s] 有重復(fù),%s'+
'選擇是手動修改。選擇否全部自動清除重復(fù)內(nèi)容。--當(dāng)前頁';
Info_KeyWord_Invalid = '關(guān)鍵字無效,第一個字符必須是字母或下劃線。';
}
{ TAcciState }
constructor TAcciState.Create(AcciName, FileName: string);
begin
FAcciConfig := TAccidenceConfig.Create(AcciName); // 新對象
FAcciName := AcciName;
FFileName := FileName;
end;
destructor TAcciState.Destroy;
begin
FAcciConfig.Free;
inherited;
end;
{ TNewAcciState }
function TNewAcciState.LoadFromFile: Boolean;
begin
Result := False;
end;
function TNewAcciState.SaveToFile: Boolean;
var
Item: PItemRec;
begin
Result := False;
with TFrmAccInfoEx.Create(nil) do
try
if ShowModal = mrOk then // 錄入名稱、路徑
begin
FAcciName := AcciName;
FFileName := FilePath; // 全路徑
//保存詞法文件
FAcciConfig.SaveToFile(FFileName); // Obj -> XML
Result := True;
end;
finally
Free;
end;
end;
{ TEditAcciState }
constructor TEditAcciState.Create(AcciName, FileName: string);
begin
inherited;
if FileName = '' then
Exception.Create(pubGet('Err_FilePathEmpty'));
if not LoadFromFile then
raise Exception.Create(pubGet('Err_AcciInvalide'));
end;
function TEditAcciState.LoadFromFile: Boolean;
begin
Result := True;
try
FAcciConfig.LoadFromFile(FFileName);
except
Result := False;
end;
end;
function TEditAcciState.SaveToFile: Boolean;
begin
Result := True;
FAcciConfig.SaveToFile(FFileName);
end;
{ TFrmAccidenceEdit }
procedure TFrmAccidenceEdit.getLangRes;
begin
inherited;
Self.Caption := pubGet(300);
btnOk.Caption := pubGet(5);
btnCancel.Caption := pubGet(6);
TSGeneral.Caption := pubGet(301);
lblBaseInfo.Caption := pubGet(302);
chkIgnoreCase.Caption := pubGet(303);
chkShowLine.Caption := pubGet(304);
lblBGColor.Caption := pubGet(305);
lblFont.Caption := pubGet(306);
lblFont2.Caption := lblFont.Caption ;//pubGet(306);
TSKeyWord.Caption := pubGet(307);
btnAddKeyWord.Caption := pubGet(308);
btnDelKeyWord.Caption := pubGet(309);
TSSymbols.Caption := pubGet(310);
btnAddSymbol.Caption := pubGet(311);
btnDelSymbol.Caption := pubGet(312);
TSNumber.Caption := pubGet(313);
chkIgnoreCase.Hint := pubGet(514); //忽略大小寫
chkShowLine.Hint := pubGet(515);
btnOK.Hint := pubGet(516); // Save And Close
end;
constructor TFrmAccidenceEdit.Create(AOwner: TComponent);
begin
inherited;
FKWTabMgr := TTabManager.Create(PageControl.Pages[1]); // 關(guān)鍵字
FSMTabMgr := TTabManager.Create(PageControl.Pages[2]); // 符號
end;
procedure TFrmAccidenceEdit.FormDestroy(Sender: TObject);
begin
inherited;
FKWTabMgr.Free;
FSMTabMgr.Free;
if FAcciState <> nil then // 調(diào)用前要由調(diào)用都建立
FAcciState.Free;
end;
procedure TFrmAccidenceEdit.FormShow(Sender: TObject);
var
i: Integer;
KWFrame: TFrameKeyWord;
KWConfig: TKeyWordConfig;
SMFrame: TFrameSymbol;
SMConfig: TSymbolConfig;
begin
if Not Assigned(FAcciState) then Exit; // 未分配
// Obj -> UI
with FAcciState.FAcciConfig do
begin
// 常規(guī)
chkIgnoreCase.Checked := GeneralConfig.IgnoreCase;
chkShowLine.Checked := GeneralConfig.ShowLine;
cbBGColor.Selected := GeneralConfig.BGround;
SetFontFrame(GeneralConfig.FontConfig, GelFontFrame);
// 數(shù)字
SetFontFrame(NumberConfig.FontConfig, NumFontFrame);
// 關(guān)鍵字
for i := 0 to KeyWords.Count - 1 do
begin
KWFrame := TFrameKeyWord.Create(nil);
KWConfig:= TKeyWordConfig(KeyWords.Items[i]);
SetFontFrame(KWConfig.FontConfig, KWFrame.KWFontFrame);
KWFrame.KeyWords.Lines.Assign(KWConfig.Values);
FKWTabMgr.AddTab(KWFrame, KWConfig.Name);
end;
if FKWTabMgr.TabCount > 0 then
FKWTabMgr.ActiveTab := 0;
// 符號
for i := 0 to Symbols.Count - 1 do
begin
SMFrame := TFrameSymbol.Create(nil);
SMConfig := TSymbolConfig(Symbols.Items[i]);
SetFontFrame(SMConfig.FontConfig, SMFrame.SMFontFrame);
SMFrame.cbRange.ItemIndex :=
SMFrame.cbRange.Items.IndexOf(SMConfig.Range);
SMFrame.cbHightLight.ItemIndex :=
SMFrame.cbHightLight.Items.IndexOf(SMConfig.HightLight);
SMFrame.cbDoubleSym.Checked := SMConfig.DoubleSymbol;
SMFrame.edtBValue.Text := SMConfig.BeginValue;
SMFrame.edtEValue.Text := SMConfig.EndValue;
SMFrame.edtESC.Text := SMConfig.ESC;
SMFrame.cbRangeChange(nil);
FSMTabMgr.AddTab(SMFrame, SMConfig.Name);
end;
if FSMTabMgr.TabCount > 0 then
FSMTabMgr.ActiveTab := 0;
end;
end;
procedure TFrmAccidenceEdit.btnAddKeyWordClick(Sender: TObject);
var
FrameKeyWord: TFrameKeyWord;
begin
with TFrmRename.Create(nil) do
try
if Execute then
if Not FKWTabMgr.IsTabNameExist(TheName) then
begin
FrameKeyWord := TFrameKeyWord.Create(nil);
FKWTabMgr.AddTab(FrameKeyWord, TheName);
//TSKeyWord.Repaint; //ToDo: 為什么要重畫?
end;
finally
Free;
end;
end;
procedure TFrmAccidenceEdit.btnDelKeyWordClick(Sender: TObject);
begin
if FKWTabMgr.TabCount > 0 then
if MessageBox(Handle, PChar(pubGet('Qust_Delete')), PChar(pubGet(2)),
MB_YESNO + MB_ICONQUESTION) = IDYES then
FKWTabMgr.DelIndexTab;
end;
procedure TFrmAccidenceEdit.btnAddSymbolClick(Sender: TObject);
var
FrameSymbol: TFrameSymbol;
begin
with TFrmRename.Create(nil) do
try
if Execute then
if Not FSMTabMgr.IsTabNameExist(TheName) then
begin
FrameSymbol := TFrameSymbol.Create(nil);
FSMTabMgr.AddTab(FrameSymbol, TheName);
//TSSymbols.Repaint; //Todo: 為什么要重畫
end;
finally
Free;
end;
end;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -