?? mainunit.pas
字號(hào):
if FileExists(AppIni.MyLoveFile) then OpenSrm(AppIni.MyLoveFile);
if Srm=nil then
Caption:=csAppName
else
begin
Caption:=csAppName+' - '+AppIni.MyLoveFile;
Mru.Add(AppIni.MyLoveFile);
end;
end;
//****************************************************************
//恢復(fù)菜單----------------------------------------------------------------
procedure TSrmForm.UndoMenuItemClick(Sender: TObject);
begin
SendMessage(RichEdit.Handle,EM_UNDO,0,0);
end;
//---------------------------------------------------------------------
procedure TSrmForm.RedoMenuItemClick(Sender: TObject);
begin
SendMessage(RichEdit.Handle,EM_UNDO,0,0);
end;
//重做菜單--------------------------------------------------------------
procedure TSrmForm.CutMenuItemClick(Sender: TObject);
begin
SendMessage(GetFocus,WM_CUT,0,0);
end;
//拷貝------------------------------------------------------------------
procedure TSrmForm.CopyMenuItemClick(Sender: TObject);
begin
SendMessage(GetFocus,WM_COPY,0,0);
end;
//粘貼----------------------------------------------------------------
procedure TSrmForm.PasteMenuItemClick(Sender: TObject);
begin
SendMessage(GetFocus,WM_PASTE,0,0);
end;
//全選---------------------------------------------------------------
procedure TSrmForm.SelAllMenuItemClick(Sender: TObject);
begin
RichEdit.SelectAll;
end;
//查找-----------------------------------------------------------------
procedure TSrmForm.FindMenuItemClick(Sender: TObject);
begin
ReplaceDialog.ReplaceText:='';
FindDialog.Execute;
end;
//查找下一個(gè)-------------------------------------------------------------
procedure TSrmForm.FindNextMenuItemClick(Sender: TObject);
begin
if Length(ReplaceDialog.ReplaceText)<>0 then
begin
ReplaceDialog.Options:=ReplaceDialog.Options+[frReplace];
ReplaceDialogReplace(Sender);
end
else if Length(FindDialog.FindText)<>0 then
begin
FindDialogFind(Sender);
end
else
FindDialog.Execute;
end;
//替換------------------------------------------------------------------
procedure TSrmForm.ReplaceMenuItemClick(Sender: TObject);
begin
ReplaceDialog.Execute;
end;
//刪除空格---------------------------------------------------------------
procedure TSrmForm.DelSpaceMenuItemClick(Sender: TObject);
var
i,Size:integer;
OldBuf,NewBuf,TempOldBuf,TempNewBuf:pchar;
begin
Size:=RichEdit.GetTextLen+2;
GetMem(OldBuf,Size+1);
GetMem(NewBuf,Size+1);
TempOldBuf:=OldBuf;
TempNewBuf:=NewBuf;
RichEdit.GetTextBuf(OldBuf,Size);
for i:=0 to Size do
begin
if TempOldBuf^=#32 then
begin
if ((pchar(integer(TempOldBuf-1))^>=#160) or
(pchar(integer(TempOldBuf+1))^>=#160)) then
inc(TempOldBuf)
else
begin
TempNewBuf^:=TempOldBuf^;
inc(TempNewBuf);
inc(TempOldBuf);
end;
end
else
begin
TempNewBuf^:=TempOldBuf^;
inc(TempNewBuf);
inc(TempOldBuf);
end;
end;
TempNewBuf^:=#0;
RichEdit.SetTextBuf(NewBuf);
FreeMem(OldBuf);
FreeMem(NewBuf);
end;
//合并成段---------------------------------------------------------------
procedure TSrmForm.CParaMenuItemClick(Sender: TObject);
var
Stext,Dtext:pchar;
OldStext,OldDtext:pchar;
n:integer;
begin
n:=RichEdit.SelLength;
if n=0 then Exit; //沒有選擇的文本則退出
Inc(n);
GetMem(OldStext,n);
GetMem(OldDtext,n); //分配內(nèi)存準(zhǔn)備COPY文本
Stext:=OldStext;
Dtext:=OldDtext;
RichEdit.GetSelTextBuf(Stext,n);
while Stext^<>#0 do
begin
if (Stext^=#10) or (Stext^=#13) then //如果是回車換行符
Inc(Stext)
else
begin
Dtext^:=Stext^;
Inc(Stext);
Inc(Dtext);
end;
end;
Inc(Dtext);
Dtext^:=#0;
RichEdit.SetSelTextBuf(OldDtext);
FreeMem(OldStext);
FreeMem(OldDtext);
end;
//分割段落---------------------------------------------------------------
procedure TSrmForm.DParaMenuItemClick(Sender: TObject);
var
i,n:integer;
s:string;
begin
if (RichEdit.GetTextLen=0) or (not RichEdit.WordWrap) then Exit;
Application.ProcessMessages;
n:=RichEdit.Lines.Count-1;
with TProgressBar.Create(self) do
begin
Parent:=StatusBar;
Align:=alClient;
Max:=n;
StatusBar.Update;
Screen.Cursor:=crHourGlass;
RichEdit.Perform(WM_SETREDRAW,0,0); //禁止重繪
for i:=0 to n do
begin
s:=RichEdit.Lines[i];
if s<>'' then RichEdit.Lines[i]:=Format('%s'#13#10,[s]);
Position:=i;
end;
RichEdit.Perform(WM_SETREDRAW,-1,0);
RichEdit.Refresh;
Screen.Cursor:=crDefault;
Free;
end;
end;
//Gb To Big5轉(zhuǎn)換--------------------------------------------------------
procedure TSrmForm.GbToBigMenuItemClick(Sender: TObject);
var
Buf:pchar;
n:integer;
begin
n:=RichEdit.GetTextLen+1;
GetMem(Buf,n);
RichEdit.GetTextBuf(Buf,n);
GbToBig(Buf);
RichEdit.SetTextBuf(Buf);
FreeMem(Buf);
end;
//Big5 To Gb轉(zhuǎn)換--------------------------------------------------------
procedure TSrmForm.BigToGbMenuItemClick(Sender: TObject);
var
Buf:pchar;
n:integer;
begin
n:=RichEdit.GetTextLen+1;
GetMem(Buf,n);
RichEdit.GetTextBuf(Buf,n);
BigToGb(Buf);
RichEdit.SetTextBuf(Buf);
FreeMem(Buf);
end;
//****************************************************************
//工具欄顯示---------------------------------------------------------
procedure TSrmForm.ToolsMenuItemClick(Sender: TObject);
begin
//
end;
//狀態(tài)欄顯示---------------------------------------------------------
procedure TSrmForm.StatusMenuItemClick(Sender: TObject);
var
tmp:boolean;
begin
tmp:=not StatusMenuItem.Checked;
StatusMenuItem.Checked:=tmp;
StatusBar.Visible:=tmp;
end;
//視圖欄顯示---------------------------------------------------------
procedure TSrmForm.TitleMenuItemClick(Sender: TObject);
var
tmp:boolean;
begin
tmp:=not TitleMenuItem.Checked;
TitleMenuItem.Checked:=tmp;
TitleToolButton.Down:=tmp;
Splitter.Visible:=tmp;
LeftForm.Visible:=tmp;
end;
//只讀控制-----------------------------------------------------------
procedure TSrmForm.ReadOnlyMenuItemClick(Sender: TObject);
var
tmp:boolean;
begin
tmp:=not ReadOnlymenuItem.Checked;
ReadOnlyMenuItem.Checked:=tmp;
ReadOnlyToolButton.Down:=tmp;
RichEdit.ReadOnly:=tmp;
end;
//自動(dòng)換行------------------------------------------------------------
procedure TSrmForm.WordWrapMenuItemClick(Sender: TObject);
var
tmp:boolean;
begin
tmp:=not WordWrapMenuItem.Checked;
WordWrapMenuItem.checked:=tmp;
WordWrapToolButton.Down:=tmp;
RichEdit.WordWrap:=tmp;
end;
//放大字體------------------------------------------------------------
procedure TSrmForm.BigFontMenuItemClick(Sender: TObject);
begin
with RichEdit.Font do Size:=Size+1;
end;
//縮小字體--------------------------------------------------------------
procedure TSrmForm.SmallFontMenuItemClick(Sender: TObject);
begin
with RichEdit.Font do Size:=Size-1;
end;
//選項(xiàng)設(shè)置--------------------------------------------------------------
procedure TSrmForm.OptionsMenuItemClick(Sender: TObject);
begin
with TOptionForm.Create(self) do
begin
if ShowModal=mrOk then
begin
SetOpenSrmWithApp(SrmCheckBox.Checked);
Mru.Visible:=FileListCheckBox.Checked;
MyLoveMenuItem.Visible:=MyLoveCheckBox.Checked;
MyLoveNextMenuItem.Visible:=MyLoveCheckBox.Checked;
with AppIni do
begin
OpenSrmWithApp:=SrmCheckBox.Checked;
LoadNearFile:=LoadSrmCheckBox.Checked;
FileListVisible:=FileListCheckBox.checked;
MyLoveVisible:=MyLoveCheckBox.Checked;
SaveDbQuery:=SaveCheckBox.Checked;
DelRecordQuery:=DelCheckBox.Checked;
MyLoveFile:=MyLoveEdit.Text;
end;
TreeView.Color:=TvShape.Brush.Color;
RichEdit.Color:=ReShape.Brush.Color;
TreeView.Font:=TvLabel.Font;
RichEdit.Font:=ReLabel.Font;
end;
Free;
end;
MyLoveMenuItem.Enabled:=AppIni.MyLoveFile<>'';
end;
//****************************************************************
//添加新節(jié)點(diǎn)----------------------------------------------------------
procedure TSrmForm.AddNodeMenuItemClick(Sender: TObject);
var
ANode:TTreeNode;
Id:integer;
begin
ANode:=TreeView.Items.AddObjectFirst(TreeView.Selected,csNewDefaultTitle,
pointer(-1));
ANode.ImageIndex:=2;
if ANode.Parent=nil then Id:=0 else Id:=integer(ANode.Parent.ItemId);
SendMessage(TreeView.Handle,TVM_SORTCHILDREN,0,Id); //自動(dòng)排序當(dāng)前同級(jí)標(biāo)題
TreeView.Selected:=ANode;
ANode.EditText;
StatusBar.Refresh;
Srm.ItemDataChanged:=true;
end;
//添加新子節(jié)點(diǎn)--------------------------------------------------------
procedure TSrmForm.AddSubNodeMenuItemClick(Sender: TObject);
var
ANode:TTreeNode;
Id:integer;
begin
ANode:=TreeView.Items.AddChildObjectFirst(TreeView.Selected,csNewDefaultTitle,
pointer(-1));
ANode.ImageIndex:=2;
ANode.Parent.ImageIndex:=1;
if ANode.Parent=nil then Id:=0 else Id:=integer(ANode.Parent.ItemId);
SendMessage(TreeView.Handle,TVM_SORTCHILDREN,0,Id);
TreeView.Selected:=ANode;
ANode.EditText;
StatusBar.Refresh;
Srm.ItemDataChanged:=true;
end;
//編輯節(jié)點(diǎn)-------------------------------------------------------------
procedure TSrmForm.EditNodeMenuItemClick(Sender: TObject);
begin
if TreeView.Selected <>nil then
begin
TreeView.Selected.EditText;
Srm.IndexChanged:=true;
end;
end;
//刪除節(jié)點(diǎn)-------------------------------------------------------------
procedure TSrmForm.DelNodeMenuItemClick(Sender: TObject);
begin
if AppIni.DelRecordQuery then
if Application.MessageBox(csDeleteQuery,
csAppName,MB_OKCANCEL or MB_ICONWARNING)<>IDOK then exit;
TreeView.Selected.Delete;
StatusBar.Refresh;
Srm.IndexChanged:=true;
end;
//節(jié)點(diǎn)排序--------------------------------------------------------------
procedure TSrmForm.SortMenuItemClick(Sender: TObject);
begin
Screen.Cursor:=crHourGlass;
Application.ProcessMessages;
TreeView.SortType:=stText;
TreeView.AlphaSort;
TreeView.SortType:=stNone;
Srm.IndexChanged:=true;
Screen.Cursor:=crDefault;
end;
//壓縮數(shù)據(jù)庫------------------------------------------------------------
procedure TSrmForm.CompressMenuItemClick(Sender: TObject);
var
i,n:integer;
Ms,Msh,Msd:TMemoryStream;
ASrm:TSrmObject;
AFileName,AoldFileName:string;
ABuf:array[0..260] of char;
ANode:TTreeNode;
pBuf:PTreeData;
begin
if Srm=nil then exit; //如果沒有打開的數(shù)據(jù)庫則退出
AOldFileName:=Srm.FileName;
SaveSrm;
GetTempFileName(pchar(ExtractFileDir(Srm.FileName)),'tmp',0,@ABuf[0]);
AFileName:=string(ABuf);
Ms:=TMemoryStream.Create;
Msh:=TMemoryStream.Create;
Msd:=TMemoryStream.Create;
TreeView.SaveToStream(Msh);
Msd.SetSize(sizeof(TTreeData)*TreeView.Items.Count);
pBuf:=Msd.Memory;
ASrm:=TSrmObject.Create(AFileName,fmCreate);
n:=TreeView.Items.Count-1;
ANode:=TreeView.Items.GetFirstNode;
Screen.Cursor:=crHourGlass;
Application.ProcessMessages;
with TProgressBar.Create(self) do
begin
Parent:=StatusBar;
Align:=alClient;
Max:=n;
StatusBar.Update;
for i:=0 to n do
begin
Position:=i;
Srm.ReadItemHead(integer(ANode.Data));
Srm.ReadItemData(Ms);
ASrm.DataHead:=Srm.DataHead;
pBuf^.Pos:=ASrm.AddItemHead;
if ANode.GetFirstChild<>nil then pBuf^.DataType:=1
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -