?? mainunit.pas
字號:
CutNodePopMenuItem.Enabled:=false;
CopyNodePopMenuItem.Enabled:=false;
end
else
begin
DelNodePopMenuItem.Enabled:=true;
EditNodePopMenuItem.Enabled:=true;
AddSubNodePopMenuItem.Enabled:=true;
CutNodePopMenuItem.Enabled:=true;
CopyNodePopMenuItem.Enabled:=true;
end;
if SrmClip.Node=nil then
PasteNodePopMenuItem.Enabled:=false
else
PasteNodePopMenuItem.Enabled:=true;
end;
//****************************************************************
//---------------------------------------------------------------------
procedure TSrmForm.StatusBarDrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
var
Text:string;
Rc:TRect;
begin
Rc:=Rect;
Rc.Left:=Rc.Left+3;
if Panel=StatusBar.Panels[0] then
begin
Text:=csPanel1Text+IntToStr(TreeView.Items.Count);
end;
if Panel=StatusBar.Panels[1] then
begin
Text:=csPanel2Text+IntToStr(RichEdit.GetTextLen);
end;
if Panel=StatusBar.Panels[2] then
begin
Text:=PanelHint;
end;
with StatusBar.Canvas do
begin
Brush.Style := bsClear;
Font := StatusBar.Font;
Font.Color := clWhite;
OffsetRect(Rc,5,1);
DrawText(Handle, PChar(Text), Length(Text), Rc,(DT_VCENTER or DT_SINGLELINE));
OffsetRect(Rc,-1,-1);
Font:=StatusBar.Font;
DrawText(Handle, PChar(Text), Length(Text), Rc,(DT_VCENTER or DT_SINGLELINE));
end;
end;
//****************************************************************
//新建數據文件-------------------------------------------------------------
procedure TSrmForm.NewMenuItemClick(Sender: TObject);
begin
with SaveDialog do
begin
DefaultExt:=csSrmExt;
Filter:=csSrmFilter;
Title:=csCreateTitle;
end;
if SaveDialog.Execute then
begin
if CloseSrmQuery then CloseSrm else exit;
Srm:=TSrmObject.Create(SaveDialog.FileName,fmCreate);
DbAuthorEdit.Text:='';
DbPasswordEdit.Text:='';
DbBuildDateEdit.Text:=DateToStr(Srm.FileHead.BuildDate);
DbeditDateEdit.Text:=DatetoStr(Srm.FileHead.EditDate);
Caption:=csAppName+' - '+SaveDialog.FileName;
Mru.Add(SaveDialog.FileName);
end;
end;
//打開數據文件------------------------------------------------------------
procedure TSrmForm.OpenMenuItemClick(Sender: TObject);
begin
with OpenDialog do
begin
DefaultExt:=csSrmExt;
Filter:=csSrmFilter;
Title:=csOpenTitle;
FileName:='';
end;
if OpenDialog.Execute then
begin
if CloseSrmQuery then CloseSrm else exit;
OpenSrm(OpenDialog.FileName);
if Srm=nil then
Caption:=csAppName
else
begin
Caption:=csAppName+' - '+OpenDialog.FileName;
Mru.Add(OpenDialog.FileName);
end;
end;
end;
//保存數據文件------------------------------------------------------------
procedure TSrmForm.SaveMenuItemClick(Sender: TObject);
begin
SaveSrm;
end;
//關閉數據文件------------------------------------------------------------
procedure TSrmForm.CloseMenuItemClick(Sender: TObject);
begin
if CloseSrmQuery then
begin
CloseSrm;
Caption:=csAppName;
end;
end;
//文件引入-----------------------------------------------------------------
procedure TSrmForm.FImportMenuItemClick(Sender: TObject);
var
Ps,UserPs:string;
ms,Msh,Msd:TMemoryStream;
j:integer;
p:PTreeData;
AList: TStringList;
ALevel,AOldLevel:integer;
AParentNode:TTreeNode;
StrBuf:PChar;
SrmImport:TSrmObject;
ANode:TTreeNode;
i,n:integer;
Fn:string;
begin
with OpenDialog do
begin
DefaultExt:=csTxtExt;
Filter:=csTxtFilter+'|'+csSrmFilter; //*
Title:=csOpenTitle;
FileName:='';
end;
if OpenDialog.Execute then
RichEdit.Perform(WM_SETREDRAW,0,0); //禁止重繪
for i:=0 to OpenDialog.Files.Count-1 do //循環(huán)讀入多重選擇文件
if lowercase(ExtractFileExt(OpenDialog.Files.Strings[i]))='.srm' then //*導入SRM文件
begin
SrmImport:=TSrmObject.Create(OpenDialog.Files.Strings[i],fmOpenReadWrite);
if SrmImport.FileHead.Password[0]<>#0 then //密碼保護
begin
InPwForm:=TInPwForm.Create(SrmForm);
with InPwForm do
begin
Caption:=csAppName;
InputLabel.Caption:=csPasswordTitle;
if ShowModal=mrCancel then
begin
SrmImport.Free;
Free;
break;
end;
Ps:=Edit.Text;
UserPs:=string(SrmImport.FileHead.Password);
if Ps<>UserPs then
begin
if ModalResult<>mrCancel then
Application.MessageBox(csAppName,csPasswordError,MB_OK);
SrmImport.Free;
Free;
break;
end;
Free;
end;
end;
Screen.Cursor:=crHourGlass;
Msh:=TMemoryStream.Create;
Msd:=TMemoryStream.Create;
SrmImport.LoadIndex(Msh,Msd); //裝入索引
AList := TStringList.Create;
SrmForm.TreeView.Items.BeginUpdate;
AList.LoadFromStream(Msh); //裝入到字符串列表中
AOldLevel:=0 ; //計算當前節(jié)點的級數
AParentNode :=Nil;
p:=Msd.Memory;
for n:=0 to AList.Count-1 do //根據TAB的多少得到相應級別
begin
StrBuf:=PChar(AList.Strings[n]);
ALevel:=0;
while StrBuf^=#9 do //得該項所在層數
begin
Inc(StrBuf);
Inc(ALevel);
end;
if (ALevel<AOldLevel) or (AParentNode<>nil) then
begin //返回該項的上級節(jié)點
for j:=AOldLevel downto ALevel do
begin
AParentNode:=AParentNode.Parent;
end;
end;
AParentNode:=SrmForm.TreeView.Items.AddChildObject(AParentNode,StrBuf,
pointer(-1));
AParentNode.ImageIndex:=p.DataType; //得該節(jié)點類型
AOldLevel:=ALevel;
SrmImport.ReadItemHead(integer(p.pos));
srm.DataHead :=SrmImport.DataHead ; //讀入標題屬性
TreeView.Selected :=AParentNode;
case SrmImport.DataHead.Num of
0: //無內容
begin
RichEdit.Text:='';
end;
1:
begin
Ms:=TMemoryStream.Create;
SrmImport.ReadItemData(Ms);
RichEdit.PlainText:=true; //和3.2版兼容
RichEdit.SetTextBuf(Ms.Memory);
RichEdit.PlainText:=false;//和3.2版兼容
Ms.Free;
end;
end;
//Srm.ItemDataChanged:=true;
p:=pointer(integer(p)+sizeof(TTreeData));
end;
SrmForm.TreeView.Items.EndUpdate;
AList.Free;
Msd.Free;
Msh.Free;
SrmImport.Free;
TreeView.Selected:=SrmForm.TreeView.Items[0]; //置當前選擇項為空
TreeView.FullCollapse;
end
else
begin
Fn:=ExtractFileName(OpenDialog.Files.Strings[i]);
Delete(Fn,Length(Fn)-3,4);
ANode:=TreeView.Items.AddObjectFirst(TreeView.Selected,Fn,pointer(-1));
ANode.ImageIndex:=2;
with Srm.DataHead do
begin
DataType:=2;
Author[0]:=#0;
Password[0]:=#0;
end;
TreeView.Selected:=ANode;
RichEdit.Lines.LoadFromFile(OpenDialog.Files.Strings[i]);
end ;
StatusBar.Refresh;
RichEdit.Perform(WM_SETREDRAW,-1,0); //允許重繪
Richedit.Refresh;
Screen.Cursor:=crDefault;
end;
//目錄引入-----------------------------------------------------------------
procedure TSrmForm.DImportMenuItemClick(Sender: TObject);
var
Temps:WideString;
Dir,Mask:string;
ANode:TTreeNode;
begin
Temps:='';
// if not SelectDirectory(csAppName,Temps,Dir) then exit;
Dir:=BrowseFolder;
If Dir='' Then exit;
ANode:=TreeView.Items.AddChildObjectFirst(TreeView.Selected,
GetLastPathName(Dir),pointer(-1));
ANode.ImageIndex:=1;
with Srm.DataHead do
begin
DataType:=1;
Author[0]:=#0;
Password[0]:=#0;
end;
TreeView.Selected:=ANode;
RichEdit.Modified:=true;
if Dir[Length(Dir)]<>'\' then Dir:=Dir+'\';
Mask:='*.'+csTxtExt;
Screen.Cursor:=crHourGlass;
RichEdit.Perform(WM_SETREDRAW,0,0); //禁止重繪
ImportDir(Dir,Mask);
RichEdit.Perform(WM_SETREDRAW,-1,0); //允許重繪
Richedit.Refresh;
StatusBar.Refresh;
SCreen.Cursor:=crDefault;
end;
//導出標題內容--------------------------------------------------------------
procedure TSrmForm.ExportMenuItemClick(Sender: TObject);
var
Dir:string;
// i,n:integer; //對別的格式要導出其附件
function FormatFileName(Fn:string):string;
var
i,n:integer;
c:char;
begin
Result:=Fn;
n:=Length(Result);
for i:=1 to n do
begin
c:=Result[i];
if ((c=#92) or (c=#47) or (c=#58) or (c=#42) or (c=#63) or
(c=#34) or (c=#60) or (c=#62) or (c=#124)) then
Result[i]:='$'; //替換掉系統不接受的文件命名的字符
end;
end;
procedure OutPutSrm(ANode:TTreeNode;Dir:string);
var
SNode:TTreeNode;
Ms:TMemoryStream;
Fh:integer;
Path:string;
begin
Ms:=TMemoryStream.Create;
Path:=Dir;
SNode:=ANode.GetFirstChild;
while SNode<>nil do
begin
if SNode.ImageIndex=1 then
begin
Dir:=Path+FormatFileName(SNode.Text);
MkDir(Dir);
Dir:=Dir+'\';
OutPutSrm(SNode,Dir);
end
else
begin
Srm.ReadItemHead(integer(SNode.Data));
if ((Srm.DataHead.Password[0]=#0) and (Srm.DataHead.Num=1)) then
begin //沒有口令的內容才導出
Srm.ReadItemData(Ms);
Fh:=FileCreate(Path+FormatFileName(SNode.Text)+'.'+csTxtExt);
if Fh<>0 then FileWrite(Fh,Ms.Memory^,Ms.Size);
FileClose(Fh);
end;
end;
SNode:=SNode.GetNextSibling;
end;
Ms.Free;
end;
begin
if TreeView.Selected=nil then exit;
if TreeView.Selected.GetFirstChild=nil then
begin
with SaveDialog do
begin
DefaultExt:=csTxtExt;
Filter:=csTxtFilter;
Title:=csSaveAsTitle;
FileName:=TreeView.Selected.Text;
end;
if SaveDialog.Execute then
begin
RichEdit.Lines.SaveToFile(SaveDialog.FileName);
end;
end
else
begin
Dir:=BrowseFolder;
If Dir='' Then exit;
if Dir[Length(Dir)]<>'\' then Dir:=Dir+'\';
Dir:=Dir+FormatFileName(TreeView.Selected.Text);
if DirectoryExists(Dir) then
begin
Application.MessageBox(csDirExists,csAppName,MB_OK or MB_ICONERROR);
exit;
end;
MkDir(Dir);
Dir:=Dir+'\';
Screen.Cursor:=crHourGlass;
OutPutSrm(TreeView.Selected,Dir);
Screen.Cursor:=crDefault;
end;
end;
//打印內容------------------------------------------------------------------
procedure TSrmForm.PrintMenuItemClick(Sender: TObject);
begin
if RichEdit.GetTextLen()=0 then
RichEdit.Print(TitleLabel.Caption);
end;
//退出菜單-----------------------------------------------------------------
procedure TSrmForm.ExitMenuItemClick(Sender: TObject);
begin
Close;
end;
//最近文件列表-----------------------------------------------------------------
procedure TSrmForm.ListMenuItemClick(Sender: TObject);
var
Temps:string;
begin
if CloseSrmQuery then closeSrm else exit;
Temps:=Mru.FileList[TMenuItem(Sender).Tag];
if Temps<>'' then
if FileExists(Temps) then
OpenSrm(Temps);
if Srm=nil then
Caption:=csAppName
else
begin
Caption:=csAppName+' - '+Temps;
Mru.Add(Temps);
end;
end;
//我的最愛-----------------------------------------------------------------
procedure TSrmForm.MyLoveMenuItemClick(Sender: TObject);
begin
if CloseSrmQuery then CloseSrm else exit;
if AppIni.MyLoveFile<>'' then
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -