{$R *.dfm} function FormatFileName(sFileName:string):string; var i,n:integer; c:char; begin Result:=sFileName; 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 TFrm_Main.FormClose(Sender: TObject; var Action: TCloseAction); begin self.saveNoteContent(true); ConComm.Free; ConNote_Knowledge.Free; try LoginOut(); except Showmessage('退出异常'); end; end;
procedure TFrm_Main.FormCreate(Sender: TObject); begin initForm(); end;
procedure TFrm_Main.mi_exitClick(Sender: TObject); begin close(); end;
function TFrm_Main.findParentNode(oTree: TRQTreeView; sParentId: String;iFindLevel:Integer): TfcTreeNode; var tempNode:TfcTreeNode; i,iNodeCount:Integer; begin Result:=nil; //初始化为空; iNodeCount:=oTree.Items.Count; if (iNodeCount=0) then exit; //为空的话退出去; for i:=0 to iNodeCount-1 do begin tempNode:=oTree.Items[i]; if (tempNode.Level<>iFindLevel) then Continue; //如果不是指定的等级就退出去; if(oTree.ID[tempNode]=sParentId)then begin //只有上一级节点和当前的一样的;才可以; Result:=tempNode; break; //退出; end; end; end;
procedure TFrm_Main.initializationNoteTree(oTree: TRQTreeView; oClientDataSet: TResultSet); var iLevel:Integer; sParentId,sCurRecordParentId:String; parentNode,curNode:TfcTreeNode; iHasChildren:integer; begin if (oClientDataSet.RecordCount=0) then exit; try oTree.Items.BeginUpdate; oClientDataSet.first; parentNode:=nil; //初始化为空; sParentId:='0'; while (not oClientDataSet.Eof) do begin iLevel:=oClientDataSet.FieldByName['NODE_LEVEL'].AsInteger; //如果是0级的话;就不用比较上一级节点了; sCurRecordParentId:=oClientDataSet.FieldByName['P_NODE_ID'].AsString; //上一级节点; iHasChildren:=StrtoInt(oClientDataSet.FieldByName['NODE_HasChildren'].AsString); if(iLevel=0)then begin parentNode:=nil; //为0级的,就放在第一位; curNode:= oTree.RQAddChild(parentNode, oClientDataSet.FieldValue['NODE_NAME'], oClientDataSet.FieldValue['NODE_ID'], oClientDataSet.FieldValue['NODE_NAME'], oClientDataSet.FieldValue['P_NODE_ID'], oClientDataSet.FieldValue['NODE_LEVEL'], iHasChildren, oClientDataSet.FieldByName['NODE_DATA'].AsString ); curNode.ImageIndex:=1; curNode.SelectedIndex:=1; oClientDataSet.next; continue; end; //如果不是0级的话; { 在这里判断是不是上一级是否与上一级的一样;不一样的话;就要重新找上一级节点;
} if(sParentId<>sCurRecordParentId)then begin //更新上一级节点; sParentId:=sCurRecordParentId; //查找当前的上一级;返回为空的话就说明没有; 些时的等级应该是当前等级的上一级了; parentNode:=findParentNode(oTree,sParentId,iLevel-1); end;
if(parentNode<>nil)then begin curNode:=oTree.RQAddChild(parentNode, oClientDataSet.FieldValue['NODE_NAME'], oClientDataSet.FieldValue['NODE_ID'], oClientDataSet.FieldValue['NODE_NAME'], oClientDataSet.FieldValue['P_NODE_ID'], oClientDataSet.FieldValue['NODE_LEVEL'], iHasChildren, oClientDataSet.FieldValue['NODE_DATA'] ); curNode.ImageIndex:=1; curNode.SelectedIndex:=1; if( (curNode.Parent<>nil) and (curNode.SelectedIndex<>0) )then begin curNode.Parent.ImageIndex:=0; curNode.Parent.SelectedIndex:=0; end; end; oClientDataSet.next; end; finally oTree.Items.EndUpdate; end;
end;
procedure TFrm_Main.mni_saveClick(Sender: TObject); begin saveNoteContent(); end;
procedure TFrm_Main.setNodeImage(node: TfcTreeNode); begin if(node<>nil)then begin if(node.HasChildren)then begin node.ImageIndex:=0; node.SelectedIndex:=0; end else begin node.ImageIndex:=1; node.SelectedIndex:=1; end; end; end;
procedure TFrm_Main.trv_KnowledgeEndDrag(Sender, Target: TObject; X, Y: Integer); var oldSourceParentNode,nodeSource,nodeDesc:TfcTreeNode; begin nodeSource:=trv_Knowledge.Selected; //得被拖动的标题 nodeDesc:=trv_Knowledge.GetNodeAt(X,Y); //得坐标处标题 oldSourceParentNode :=nodeSource.Parent; //self.lbl_note_title.Caption:='[源节点ID]:'+trv_note..ID[nodeSource]+' [源节点LEVEL]'+inttostr(nodeSource.Level); if nodeDesc<>nodeSource then if nodeDesc=nil then begin nodeSource.MoveTo(trv_Knowledge.Items.GetFirstNode,fcnaAdd); end else nodeSource.MoveTo(nodeDesc,fcnaAddChild); //self.Caption:='[源节点ID]:'+trv_note..ID[nodeSource]+' [源节点LEVEL]'+inttostr(nodeSource.Level); //如果失败就直接退出; if not self.saveNoteTreeNodeLevelId(trv_Knowledge,nodeSource) then exit; setNodeImage(oldSourceParentNode); setNodeImage(nodeDesc); end;
procedure TFrm_Main.initNoteTree(trvNote:TRQTreeView;sTableName: String); var sSql:String; oResult:TResultSet; begin oResult:=TResultSet.Create(nil); try trvNote.Items.Clear; trvNote.stringValue:=sTableName; rmemo_knowledge.ConnStr:=trvNote.stringValue; self.ConNote_Knowledge.tableName:=trvNote.stringValue; sSql:=' SELECT ID AS NODE_ID, NAME AS NODE_NAME ,PARENTID AS P_NODE_ID, ' +' LEVEL_ID AS NODE_LEVEL ,HasChildren AS NODE_HasChildren,ContentId AS NODE_DATA FROM '+trvNote.stringValue+' WHERE 1=1 ' +' AND STATUS=''1'' ORDER BY LEVEL_ID,PARENTID,Name,Node_Index '; ConComm.getData(oResult,sSql); if ((not oResult.IsEmpty) and (oResult.RecordCount>0)) then begin self.initializationNoteTree(trvNote,oResult); end; finally oResult.Free; end; end;
procedure TFrm_Main.mni_knowledageAddNodeClick(Sender: TObject); begin if (self.trv_Knowledge.stringValue=rmemo_knowledge.ConnStr) then begin noteTreeAddNode(self.trv_Knowledge); exit; end; if (self.trv_Note.stringValue=rmemo_knowledge.ConnStr) then begin noteTreeAddNode(self.trv_Note); end; end;
procedure TFrm_Main.mni_knowledageAddChildNodeClick(Sender: TObject); begin if (self.trv_Knowledge.stringValue=rmemo_knowledge.ConnStr) then begin noteTreeAddChildNode(self.trv_Knowledge); exit; end;
if (self.trv_Note.stringValue=rmemo_knowledge.ConnStr) then begin noteTreeAddChildNode(self.trv_Note); end; end;
procedure TFrm_Main.saveNoteTreeNodeData(trvNote:TRQTreeView;oTreeNode: TfcTreeNode); var reData:OleVariant; oMs:TMemoryStream; oData: OleVariant; oClientData:TResultSet; begin try if oTreeNode=nil then exit; if (trvNote.ID[oTreeNode]='') then Exit; //如果ID为空的话就不保存; screen.Cursor:= crHourglass;
procedure TFrm_Main.getNoteTreeNodeContent(trvNote:TRQTreeView;oTreeNode: TfcTreeNode); var sId,sSql:String; reData:OleVariant; oClientData:TResultSet; msData:TMemoryStream; begin oClientData:=TResultSet.Create(nil); try screen.Cursor:= crHourglass; rmemo_knowledge.ConnStr:=trvNote.stringValue; self.rmemo_knowledge.Lines.Clear; if oTreeNode=nil then exit; try sId:=trvNote.ID[oTreeNode]; if(sId='') then sId:='0'; sSql:=' SELECT ContentData FROM '+trvNote.stringValue+' WHERE 1=1 AND ID='+QuotedStr(sId); reData:= self.ConComm.query(sSql).toVariant; if(reData[0]=0)then begin oClientData.Data:=reData[2]; if(not oClientData.IsEmpty) then begin msData:=TMemoryStream.Create; (oClientData.FieldByName['ContentData'] as TBlobfield).SaveToStream(msData); msData.Position:=0;
vNextNode:=curNode.GetLastChild; sLastNodeId:=oTree.ID[vNextNode]; while(vNextNode<>nil) do begin sLastNodeId:=oTree.ID[vNextNode]; vNextNode:=vNextNode.GetLastChild; end;
vNextNode:=curNode.GetNext; while (vNextNode<>nil) do begin sTempNodeId:=oTree.ID[vNextNode]; if(sTempNodeId=sLastNodeId)then begin oClientDataSet.Append; oClientDataSet['NODE_ID']:=sTempNodeId; oClientDataSet['Level_ID']:=inttostr(vNextNode.Level-iFirstChildLevel+iCurFirstChildLevel); break; end; oClientDataSet.Append; oClientDataSet['NODE_ID']:=sTempNodeId; oClientDataSet['Level_ID']:=inttostr(vNextNode.Level-iFirstChildLevel+iCurFirstChildLevel); vNextNode:=vNextNode.GetNext; end; end; begin oClientDataSet:=TResultSet.Create(nil); try result:=false; try if (curNode=nil) then exit; // sCurNodeId:=oTree.ID[curNode]; if(curNode.Parent=nil)then begin sCurParentId:='0'; oTree.ParentID[curNode]:='0'; end else begin sCurParentId:=oTree.ID[curNode.Parent]; oTree.ParentID[curNode]:=oTree.ID[curNode.Parent]; end; // oClientDataSet.FieldDefs.Clear; oClientDataSet.FieldDefs.Add('NODE_ID',ftString,10); oClientDataSet.FieldDefs.Add('Level_ID',ftString,10); oClientDataSet.CreateRecordSet;
appendLevel(curNode,oClientDataSet);
oClientDataSet.Post; self.ConNote_Knowledge.tableName:=oTree.stringValue; reData:=self.ConNote_Knowledge.saveNodesLevelid(sCurNodeId,sCurParentId,oClientDataSet.Data); if (reData[0]<>0) then Showmessage(reData[1]) else result:=true; finally oClientDataSet.Free; end; except Result:=false; end; end;
procedure TFrm_Main.mni_knowledge_content_wordwrapClick(Sender: TObject); begin wordwrapChange(); end;
procedure TFrm_Main.mni_knowledge_content_selectallClick(Sender: TObject); begin SendMessage(self.rmemo_knowledge.Handle, EM_SETSEL, 0, -1); end;
procedure TFrm_Main.mni_knowledge_content_copyClick(Sender: TObject); begin self.rmemo_knowledge.CopyToClipboard; end;
procedure TFrm_Main.mni_knowledge_content_pasteClick(Sender: TObject); begin self.rmemo_knowledge.PasteFromClipboard; end;
procedure TFrm_Main.mni_knowledge_content_cutClick(Sender: TObject); begin self.rmemo_knowledge.CutToClipboard; end;
procedure TFrm_Main.mni_knowledgeExpandCurNodeClick(Sender: TObject); begin if (self.trv_Knowledge.stringValue=rmemo_knowledge.ConnStr) then begin trv_Knowledge.Selected.Expanded:=true; exit; end;
if (self.trv_Note.stringValue=rmemo_knowledge.ConnStr) then begin trv_note.Selected.Expanded:=true; end;
end;
procedure TFrm_Main.mni_knowledgeExpandAllNodeClick(Sender: TObject); begin if (self.trv_Knowledge.stringValue=rmemo_knowledge.ConnStr) then begin trv_Knowledge.Selected.Expand(true); exit; end;
if (self.trv_Note.stringValue=rmemo_knowledge.ConnStr) then begin trv_note.Selected.Expand(true); end;
end;
procedure TFrm_Main.mniknowledge_cutClick(Sender: TObject); begin if(self.trv_Knowledge.Focused)then begin self.knowledgePasteTreeNode:=trv_Knowledge.Selected; exit; end;
if(self.trv_Note.Focused)then begin self.notePaseTreeNode:=trv_note.Selected; end;
end;
procedure TFrm_Main.mniknowledge_pasteClick(Sender: TObject); begin if(self.trv_Knowledge.Focused)then begin pasteCutNode(self.trv_Knowledge,self.knowledgePasteTreeNode); knowledgePasteTreeNode:=nil; exit; end;
if(self.trv_Note.Focused)then begin pasteCutNode(self.trv_Note,self.notePaseTreeNode); notePaseTreeNode:=nil; end;
end;
procedure TFrm_Main.mi_changepasswordClick(Sender: TObject); begin if( Application.FindComponent('Frm_ChanngePassowrd')=NIL) then begin Frm_ChanngePassowrd:=TFrm_ChanngePassowrd.Create(nil); end; Frm_ChanngePassowrd.ShowModal(); Frm_ChanngePassowrd.Free(); end;
function RQSelectDirectory():String; begin result:=''; if (Application.FindComponent('Frm_DirectoryDialog')=nil) then begin Frm_DirectoryDialog:=TFrm_DirectoryDialog.Create(Nil); end; Frm_DirectoryDialog.ShowModal; result:=Frm_DirectoryDialog.directory; Frm_DirectoryDialog.Free; end;
procedure TFrm_Main.mni_exportClick(Sender: TObject); begin if (self.trv_Knowledge.stringValue=rmemo_knowledge.ConnStr) then begin noteTreeNodeExportToTxtFile(trv_Knowledge); exit; end;
if (self.trv_Note.stringValue=rmemo_knowledge.ConnStr) then begin noteTreeNodeExportToTxtFile(trv_note); end;
end;
procedure TFrm_Main.exportNodeDataFromTable(trvNote:TRQTreeView;oTreeNode: TfcTreeNode;sFileName:String); var sId,sSql:String; reData:OleVariant; oClientData:TResultSet; // fileHandle:integer; msData:TMemoryStream; begin oClientData:=TResultSet.Create(nil); try if oTreeNode=nil then exit; try sId:=trvNote.ID[oTreeNode]; if(sId='') then sId:='0'; sSql:=' SELECT ContentData FROM '+trvNote.stringValue+' WHERE STATUS=''1'' AND ID='+QuotedStr(sId); reData:= self.ConComm.query(sSql).toVariant; if(reData[0]=0)then begin oClientData.Data:=reData[2]; if(not oClientData.IsEmpty) then begin //self.redt_content.PlainText:=True; msData:=TMemoryStream.Create; (oClientData.FieldByName['ContentData'] as TBlobfield).SaveToStream(msData); //文件导出; fileHandle:=FileCreate(sFileName); if fileHandle<>0 then FileWrite(fileHandle,msData.Memory^,msData.Size); FileClose(fileHandle); // msData.Free; end; end else Showmessage(reData[1]); except raise; end;
finally oClientData.Free end; end;
procedure TFrm_Main.exportChildNodeData(trvNote:TRQTreeView;oTreeNode: TfcTreeNode; sPath: String); var sExportFileName:string; //iFileNameCount:integer; sNode:TfcTreeNode; Path:string; begin Path:=sPath; sNode:=oTreeNode.getFirstChild; while SNode<>nil do begin if SNode.HasChildren then begin sPath:=Path+'\'+FormatFileName(SNode.Text); MkDir(sPath); sPath:=sPath; exportChildNodeData(trvNote,SNode,sPath); end else begin sExportFileName:=sPath+'\'+FormatFileName(SNode.Text)+'.txt';
procedure TFrm_Main.mni_knowledageRenameNodeClick(Sender: TObject); begin if (self.trv_Knowledge.stringValue=rmemo_knowledge.ConnStr) then begin self.trv_Knowledge.Selected.EditText; exit; end;
if (self.trv_Note.stringValue=rmemo_knowledge.ConnStr) then begin self.trv_Note.Selected.EditText; end;
end;
procedure TFrm_Main.mni_knowledageDeleteNodeClick(Sender: TObject); begin if (self.trv_Knowledge.stringValue=rmemo_knowledge.ConnStr) then begin deleteNoteTreeNode(self.trv_Knowledge); exit; end;
if (self.trv_Note.stringValue=rmemo_knowledge.ConnStr) then begin deleteNoteTreeNode(self.trv_Note); end;
end;
function TFrm_Main.deleteNoteTreeNodeData(oTree:TRQTreeView;curNode:TfcTreeNode):boolean; var reData:OleVariant; oClientDataSet:TResultSet; sCurParentId,sCurNodeId:String; //增加当前的序列号; procedure appendLevel(curNode:TfcTreeNode;oClientDataSet:TResultSet); var sLastNodeId,sTempNodeId:String; iCurFirstChildLevel,iFirstChildLevel:integer; vNextNode:TfcTreeNode; begin oClientDataSet.Append; oClientDataSet['NODE_ID']:=oTree.ID[curNode]; oClientDataSet['Level_ID']:=inttostr(curNode.Level); // if(not curNode.HasChildren)then exit;
vNextNode:=curNode.GetLastChild; sLastNodeId:=oTree.ID[vNextNode]; while(vNextNode<>nil) do begin sLastNodeId:=oTree.ID[vNextNode]; vNextNode:=vNextNode.GetLastChild; end;
vNextNode:=curNode.GetNext; while (vNextNode<>nil) do begin sTempNodeId:=oTree.ID[vNextNode]; if(sTempNodeId=sLastNodeId)then begin oClientDataSet.Append; oClientDataSet['NODE_ID']:=sTempNodeId; oClientDataSet['Level_ID']:=inttostr(vNextNode.Level-iFirstChildLevel+iCurFirstChildLevel); break; end; oClientDataSet.Append; oClientDataSet['NODE_ID']:=sTempNodeId; oClientDataSet['Level_ID']:=inttostr(vNextNode.Level-iFirstChildLevel+iCurFirstChildLevel); vNextNode:=vNextNode.GetNext; end; end; begin oClientDataSet:=TResultSet.Create(nil); try result:=false; try if (curNode=nil) then exit; // sCurNodeId:=oTree.ID[curNode]; if(curNode.Parent=nil)then begin sCurParentId:='0'; oTree.ParentID[curNode]:='0'; end else begin sCurParentId:=oTree.ID[curNode.Parent]; oTree.ParentID[curNode]:=oTree.ID[curNode.Parent]; end; // oClientDataSet.FieldDefs.Clear; oClientDataSet.FieldDefs.Add('NODE_ID',ftString,10); oClientDataSet.FieldDefs.Add('Level_ID',ftString,10); oClientDataSet.CreateRecordSet;
appendLevel(curNode,oClientDataSet);
oClientDataSet.Post; self.ConNote_Knowledge.tableName:=oTree.stringValue; reData:=self.ConNote_Knowledge.deleteNodeData(sCurNodeId,sCurParentId,oClientDataSet.Data); if (reData[0]<>0) then Showmessage(reData[1]) else result:=true; finally oClientDataSet.Free; end; except Result:=false; end; end;
procedure TFrm_Main.deleteNoteTreeNode(oTree:TRQTreeView); var vSelectNode,vParentNode:TfcTreeNode; begin vSelectNode:=oTree.Selected; if (vSelectNode=nil) then exit; if(Application.MessageBox(PChar('是否要删除当前的['+vSelectNode.Text+']的记录'),PChar('删除提示信息'),MB_YESNO)<>6) then begin exit; end; vParentNode:=vSelectNode; if(self.deleteNoteTreeNodeData(oTree,vSelectNode)) then begin vSelectNode.Delete; self.setNodeImage(vParentNode); end; end;
procedure TFrm_Main.trv_KnowledgeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if((Shift=[]) and (Key=46)) then begin if (not (Self.trv_Knowledge.IsEditing)) then deleteNoteTreeNode(self.trv_Knowledge); end;
end;
procedure TFrm_Main.btn_saveClick(Sender: TObject); begin saveNoteContent(); end;
procedure TFrm_Main.grid_charactorDblClick(Sender: TObject); begin if(grid_charactor.Row=0) then exit; pnl_charactor.Hide; rmemo_knowledge.SelText:=grid_charactor.Cells[grid_charactor.Col,grid_charactor.Row]; end;
procedure TFrm_Main.mni_sortClick(Sender: TObject); begin
if (self.trv_Knowledge.stringValue=rmemo_knowledge.ConnStr) then begin self.trv_Knowledge.Selected.AlphaSort(); exit; end;
if (self.trv_Note.stringValue=rmemo_knowledge.ConnStr) then begin self.trv_Note.Selected.AlphaSort(); end;
end;
procedure TFrm_Main.rmemo_knowledgeKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var sCommand:String; begin if ((ssCtrl in Shift) and (key=83)) then begin self.saveNoteContent(); end;
end;
function SetHTML(AHTML: String; AWebBrowser: TWebBrowser): Boolean; var Stream: IStream; hHTMLText: HGLOBAL; psi: IPersistStreamInit; begin Application.ProcessMessages; try hHTMLText := GlobalAlloc(GPTR, Length(AHTML) + 1); CopyMemory(Pointer(hHTMLText), PChar(AHTML), Length(AHTML)); CreateStreamOnHGlobal(hHTMLText, True, Stream); AWebBrowser.Document.QueryInterface(IPersistStreamInit, psi);
psi.InitNew; psi.Load(Stream); Result := True; except Result := False; end; psi := nil; Stream := nil; end;
procedure TFrm_Main.N5Click(Sender: TObject); begin winExecuteCommand('calc.exe'); end;
procedure TFrm_Main.N4Click(Sender: TObject); begin winExecuteCommand('mspaint.exe'); end;
procedure TFrm_Main.trv_KnowledgeEnter(Sender: TObject); begin if( (trim(self.trv_Knowledge.stringValue)<>'') and (trim(self.rmemo_knowledge.ConnStr)<>'') and (self.rmemo_knowledge.ConnStr<>self.trv_Knowledge.stringValue) )then begin if( self.rmemo_knowledge.Modified) then begin if( Application.MessageBox('是否要保存?','提示',mb_yesno)=6 )then begin self.saveNoteTreeNodeData(self.trv_Note,self.trv_Note.Selected); end; end;
procedure TFrm_Main.trv_NoteEnter(Sender: TObject); begin if( (trim(self.trv_Note.stringValue)<>'') and (trim(self.rmemo_knowledge.ConnStr)<>'') and (self.rmemo_knowledge.ConnStr<>self.trv_Note.stringValue) )then begin if(self.rmemo_knowledge.Modified) then begin if( Application.MessageBox('是否要保存?','提示',mb_yesno)=6 )then begin self.saveNoteTreeNodeData(self.trv_Knowledge,self.trv_Knowledge.Selected); end; end; //这个在进入时会发生变化事件; noteTreeNodeOnChange(self.trv_Note,self.trv_Note.Selected); end; end;
procedure TFrm_Main.noteTreeNodeOnChange(oTree:TRQTreeView;curNode:TfcTreeNode); var sTitle:String; parentNode: TfcTreeNode; begin sTitle:=''; lbl_note_title.Caption:=''; getNoteTreeNodeContent(oTree,curNode); if(curNode<>nil)then begin sTitle:=oTree.Name[curNode]; lbl_note_title.Caption:=sTitle; parentNode:=curNode.Parent; while (parentNode<>nil) do begin sTitle:='['+oTree.Name[parentNode]+']->'+sTitle; parentNode:=parentNode.Parent; end; end; stat_main.Panels[0].Text:=sTitle; end;
procedure TFrm_Main.noteTreeAddNode(oTree: TRQTreeView); var curNode,parentNode:TfcTreeNode; sId,sName,sParentId,sLevelId,sIndex,sContentId:String; reData:OleVariant; begin try parentNode:=nil; curNode:=oTree.Selected; sName:=getNodeName(oTree,curNode,0); if(curNode=nil)then begin sLevelId:='0'; sParentId:='0'; sIndex:='0'; end else begin parentNode:=curNode.Parent; if(parentNode=nil)then begin sLevelId:='0'; sParentId:='0'; sIndex:='0'; end else begin sLevelId:=IntToStr(parentNode.Level+1); sParentId:=oTree.ID[parentNode]; sIndex:=IntToStr(parentNode.Count); end; end;
if(reData[0]=0)then begin sId:=reData[1]; sContentId:=reData[2]; curNode:=oTree.RQAddChild(parentNode, sName, sId, sName, sParentId, StrToInt(sLevelId), 0, sContentId ); curNode.ImageIndex:=1; curNode.SelectedIndex:=1; if( (curNode.Parent<>nil) and (curNode.SelectedIndex<>0) )then begin curNode.Parent.ImageIndex:=0; curNode.Parent.SelectedIndex:=0; end; curNode.Selected:=True; curNode.EditText; end else ShowMessage(reData[1]); except Raise; end;
end;
procedure TFrm_Main.noteTreeAddChildNode(oTree: TRQTreeView); var curNode,parentNode:TfcTreeNode; sId,sName,sParentId,sLevelId,sIndex,sContentId:String; reData:OleVariant; begin try curNode:=oTree.Selected; sName:=getNodeName(oTree,curNode,1); parentNode:=curNode; if(parentNode=nil)then begin sLevelId:='0'; sParentId:='0'; sIndex:='0'; end else begin sLevelId:=IntToStr(parentNode.Level+1); sParentId:=oTree.ID[parentNode]; sIndex:=IntToStr(parentNode.Count); end;
procedure TFrm_Main.noteTreeNodeExportToTxtFile(oTree: TRQTreeView); var iFileNameCount:integer; vSelectNode:TfcTreeNode; sExportPath,sExportFileName:String; begin vSelectNode:=oTree.Selected; if vSelectNode=nil then exit; sExportPath:=RQSelectDirectory; sExportFileName:=''; if(DirectoryExists(sExportPath))then begin //先导出当前的节点 if vSelectNode.HasChildren then begin sExportPath:=sExportPath+'\'+FormatFileName(vSelectNode.Text); MkDir(sExportPath); end else begin sExportFileName:=sExportPath+'\'+FormatFileName(vSelectNode.Text)+'.txt'; iFileNameCount:=0; while (FileExists(sExportFileName)) do begin sExportFileName:=sExportPath+'\'+FormatFileName(vSelectNode.Text) +'_'+inttostr(iFileNameCount)+'.txt'; iFileNameCount:=iFileNameCount+1; end;
self.exportNodeDataFromTable(oTree,vSelectNode,sExportFileName); end; if(sExportPath<>'')then begin //导出子节点 exportChildNodeData(oTree,vSelectNode,sExportPath); end; end;
end;
procedure TFrm_Main.saveNoteContent(isHint:boolean=false); begin if( not self.rmemo_knowledge.Modified) then exit; if( isHint )then begin if( Application.MessageBox('是否要保存?','提示',mb_yesno)<>6 )then begin exit; end;
end;
if (self.trv_Knowledge.stringValue=rmemo_knowledge.ConnStr) then begin self.saveNoteTreeNodeData(self.trv_Knowledge,self.trv_Knowledge.Selected); exit; end; if (self.trv_Note.stringValue=rmemo_knowledge.ConnStr) then begin self.saveNoteTreeNodeData(self.trv_Note,self.trv_Note.Selected); end; end;
procedure TFrm_Main.initForm; var vHead:TStrings; sSql :String; begin isShowBalliconHint:=false; self.Caption:=Application.Title; self.rqcltrycn1.Hint:=Application.Title+'---吴海豪要努力坚强!'; //mainTimer.Interval:=StrToInt(TRQWindowsSystem.getAssociatedFile(;)) // ConComm:=TConCommon.Create; ConNote_Knowledge:=TConNote_Knowledge.Create;
sSql:='SELECT PARAM_VALUE FROM SYS_PARAMS_TAB WHERE GROUP_CODE=''SYSTRAY'' AND PARAM_CODE=''SHOWICON'' '; sSql:=Self.ConComm.getValue('PARAM_VALUE',sSql); if(sSql<>'') then begin if(FileExists(sSql)) then begin Application.Icon.LoadFromFile(sSql); Self.rqcltrycn1.Icon.LoadFromFile(sSql); Self.rqcltrycn1.IconVisible:=false; Self.rqcltrycn1.IconVisible:=true; end; end;
end;
procedure TFrm_Main.menuSelectNodeClick(Sender: TObject); begin with Sender as TMenuItem do begin
//if(self.trv_Knowledge.Focused)then if (self.plst_left.PageIndex=0) then begin if(trv_Note.stringValue=TMenuItem(Sender).hint) then begin ShowMessage('已经打开了['+TMenuItem(Sender).Caption+']不能再打开了!'); exit; end; self.saveNoteContent(true); self.initNoteTree(self.trv_Knowledge,TMenuItem(Sender).hint); self.plst_left.Pages[0]:=TMenuItem(Sender).Caption; exit; end;
//if(self.trv_Note.Focused)then if (self.plst_left.PageIndex=1) then begin if(trv_Knowledge.stringValue=TMenuItem(Sender).hint) then begin ShowMessage('已经打开了['+TMenuItem(Sender).Caption+']不能再打开了!'); exit; end; self.saveNoteContent(true); self.initNoteTree(self.trv_Note,TMenuItem(Sender).hint); self.plst_left.Pages[1]:=TMenuItem(Sender).Caption; end; end; case Tag of 0: ; end; //
end;
procedure TFrm_Main.trv_NoteKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if((Shift=[]) and (Key=46)) then begin if (not (self.trv_Note.IsEditing)) then deleteNoteTreeNode(self.trv_Note); end; end;
procedure TFrm_Main.SpeedButton2Click(Sender: TObject); begin pnl_charactor.Hide; end;
procedure TFrm_Main.setSelectNodeImage(node: TfcTreeNode); begin if(node<>nil)then begin if(node.HasChildren)then begin node.ImageIndex:=2; node.SelectedIndex:=2; end else begin node.ImageIndex:=3; node.SelectedIndex:=3; end; end; end;
procedure TFrm_Main.pasteCutNode(oTree:TRQTreeView;nodeSource:TfcTreeNode); var oldSourceParentNode,nodeDesc:TfcTreeNode; begin if(nodeSource=nil) then exit; nodeDesc:=oTree.Selected; //得坐标处标题 oldSourceParentNode :=nodeSource.Parent; //self.lbl_note_title.Caption:='[源节点ID]:'+trv_note.ID[nodeSource]+' [源节点LEVEL]'+inttostr(nodeSource.Level); if nodeDesc<>nodeSource then if nodeDesc=nil then begin nodeSource.MoveTo(oTree.Items.GetFirstNode,fcnaAdd); end else nodeSource.MoveTo(nodeDesc,fcnaAddChild); //self.Caption:='[源节点ID]:'+trv_note.ID[nodeSource]+' [源节点LEVEL]'+inttostr(nodeSource.Level); //如果失败就直接退出; if not self.saveNoteTreeNodeLevelId(oTree,nodeSource) then exit; setNodeImage(oldSourceParentNode); setNodeImage(nodeDesc); end;
procedure TFrm_Main.trv_NoteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin //这里一定要放一个,否则不能被执行.就不能取到X,Y对应的数; end;
function TFrm_Main.getNodeName(oTree: TRQTreeView; curNode: TfcTreeNode; iFlag: integer): String; var nodeCount:integer; parentNode:TfcTreeNode; begin // result:='001_'; if(iFlag=0)then begin if(curNode=nil)then exit; parentNode:=curNode.Parent; nodeCount:=getNodeNumberText(oTree,parentNode,curNode.Level); result:=TRQString.formatInteger('000',nodeCount+1)+'_'; end else begin if(curNode=nil)then exit; nodeCount:=getNodeNumberText(oTree,curNode,curNode.Level+1); result:=TRQString.formatInteger('000',nodeCount+1)+'_'; end; // end;
function TFrm_Main.getNodeNumberText(oTree: TRQTreeView; curNode: TfcTreeNode;iAddNodeLevel:integer): integer; var i,iCount,iLevel:integer; tempNode:TfcTreeNode;
function getTreeZeroLeveNodeCount(oTree: TRQTreeView):integer; var i,iCount:integer; tempNode:TfcTreeNode; begin result:=0; iCount:=oTree.Items.Count-1; for i:=0 to iCount do begin if(oTree.Items[i].Level=0)then begin inc(result); end; end;
end; begin // result:=0; if(curNode=nil) then begin result:=getTreeZeroLeveNodeCount(oTree); exit; end;
iCount:=curNode.Count-1; for i:=0 to iCount do begin if(curNode.Item[i].Level=iAddNodeLevel)then begin inc(result); end; end;
end;
procedure TFrm_Main.mni_changeVCLSkinClick(Sender: TObject); begin // if(filedialog_main.Execute)then begin if (filedialog_main.FileName<>'') then begin self.vclSkin.LoadFromFile(filedialog_main.FileName); self.vclSkin.Active:=true; end; end; // end;
procedure TFrm_Main.N6Click(Sender: TObject); begin if(not Self.AlphaBlend) then Self.AlphaBlend:=True else Self.AlphaBlend:=false; end;
procedure TFrm_Main.N7Click(Sender: TObject); begin winExecuteCommand('notepad.exe'); end;
procedure TFrm_Main.tbset_clientChange(Sender: TObject; NewTab: Integer; var AllowChange: Boolean); begin //self.nb_client.PageIndex:=NewTab; end;
procedure TFrm_Main.N8Click(Sender: TObject); begin if (N8.Hint='不置顶') then begin SetWindowPos(Handle,hwnd_TopMost, 0,0,0,0, //缺省位置 swp_NoMove or swp_NoSize); N8.Caption:='不置顶'; N8.Hint:='置顶';
end else begin //不置顶; SetWindowPos(Handle,hwnd_noTopMost, 0,0,0,0, //缺省位置 swp_NoMove or swp_NoSize); N8.Hint:='不置顶'; N8.Caption:='置顶';
procedure OpenInIE(aURL: string); //need uses ComObj; var IE : Variant; begin IE := CreateOleObject('InternetExplorer.Application'); IE.Visible := true; try IE.Navigate(aURL); except
end; end; //判断是否是链结 function IsURL(s: string): Boolean; var i: integer; begin //From the top, make the result false. Result := False; //Again, if the text of the token is less than 5, its just not going //to be a URL. if Length(s) < 5 then exit; //If the token contains a period at the end, or two periods combined, //its also not going to be a url. if (s[Length(s)] = '.') or (Pos('..', s) > 0) then exit; //Now we check for bogus characters, Anything between 33 and 126 is valid, //Above or below, are not valid url characters. for i := 1 to Length(s) do if (Ord(s[i]) < 33) or (Ord(s[i]) > 126) then exit; // if ( (Pos('\\', LowerCase(s)) > 0) and (Pos('.', LowerCase(s)) > 0) ) then begin Result := True; Exit; end;
//The next few things check for individual characteristics of various stringd. if (Pos('www.',LowerCase(s)) = 1) or (Pos('news:', LowerCase(s)) = 1) and (Length(s) > 6) then begin Result := True; Exit; end; if (Length(s) > 12) or (Pos('mailto:', LowerCase(s)) = 1) and (Pos('@', s) > 1) and (Pos('.', s) > 4) and (Pos('.', s) > (Pos('@', s) +1)) then begin Result := True; Exit; end;
if (Pos('http:://', LowerCase(s)) > 0) or (Pos('ftp://', LowerCase(s)) > 0) and (Length(s) > 10) and (Pos('.', s) > 7) then begin Result := True; Exit; end; end;
var selectText:String; begin if(trim(self.rmemo_knowledge.SelText)='')then exit; selectText:=Trim(self.rmemo_knowledge.SelText); // OpenInIE(selectText); { if (IsUrl(selectText)) then begin OpenInIE(selectText); end else ShellExecute(0, nil, PChar(selectText), nil, nil, SW_NORMAL); }
end;
procedure TFrm_Main.N11Click(Sender: TObject); begin self.winExecuteCommand(Trim(self.rmemo_knowledge.SelText)); end;
procedure TFrm_Main.mainTimerTimer(Sender: TObject); begin if(isShowBalliconHint) then isShowBalliconHint:=false; if Win32Platform = VER_PLATFORM_WIN32_NT then begin //整理内存 SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF); end; end;
procedure TFrm_Main.btn_saveGridExecuteFileInfoClick(Sender: TObject); begin { var iniFile: TIniFile; sPath:string; i:Integer; begin pnl_title.SetFocus; sPath:=ExtractFilePath(Application.ExeName)+TRQString.copyByFlag(ExtractFileName(Application.ExeName),'.',1)+'.ini'; iniFile := TIniFile.Create(sPath); iniFile.WriteString('EXENAME','EXENAMEITEMS',inttostr(grid_ExecuteSoft.RowCount-1)); for i:=1 to grid_ExecuteSoft.RowCount-1 do begin iniFile.WriteString('EXENAME','EXENAME'+inttostr(i),grid_ExecuteSoft.Cells[1,I]); iniFile.WriteString('EXEFILE','EXEFILE'+inttostr(i),grid_ExecuteSoft.Cells[2,I]); end; iniFile.UpdateFile; iniFile.Free; end; } end;
procedure TFrm_Main.N16Click(Sender: TObject); begin rmemo_knowledge.SelText:=''; end;
procedure TFrm_Main.btn_splitShowHideClick(Sender: TObject); begin pnl_left.Visible:=not pnl_left.Visible; if pnl_left.Visible then TSpeedButton (Sender).Caption:='<' else TSpeedButton (Sender).Caption:='>'; end;
procedure TFrm_Main.ToolButton1Click(Sender: TObject); begin pnl_left.Visible:=not pnl_left.Visible; if pnl_left.Visible then btn_splitShowHide.Caption:='<' else btn_splitShowHide.Caption:='>'; end;
procedure TFrm_Main.trv_KnowledgeChanging(TreeView: TfcCustomTreeView; Node: TfcTreeNode; var AllowChange: Boolean); begin self.saveNoteContent(true); if(AllowChange) then begin self.setNodeImage(trv_Knowledge.Selected); setSelectNodeImage(Node); end; end;
procedure TFrm_Main.trv_KnowledgeChange(TreeView: TfcCustomTreeView; Node: TfcTreeNode); begin noteTreeNodeOnChange(trv_Knowledge,Node); end;
procedure TFrm_Main.trv_KnowledgeEdited(TreeView: TfcCustomTreeView; Node: TfcTreeNode; var S: String); var sId:String; reData:OleVariant; begin //这里是已经修改了,并确定下来的; try if(S=Node.Text)then exit; sId := Self.trv_Knowledge.ID[Node]; if(sId='')then begin S:=self.trv_Knowledge.NAME[Node]; exit; end; reData := ConComm.update(' UPDATE '+self.ConNote_Knowledge.tableName+' SET NAME='+QuotedStr(S)+' WHERE ID='+QuotedStr(sId)).toVariant; if(reData[0]=0)then self.trv_Knowledge.NAME[Node]:=S else begin S:=self.trv_Knowledge.NAME[Node]; end; except S:=self.trv_Knowledge.NAME[Node]; end; self.lbl_note_title.Caption:=self.trv_Knowledge.Name[Node];
end;
procedure TFrm_Main.trv_NoteChange(TreeView: TfcCustomTreeView; Node: TfcTreeNode); begin noteTreeNodeOnChange(trv_note,Node); end;
procedure TFrm_Main.trv_NoteChanging(TreeView: TfcCustomTreeView; Node: TfcTreeNode; var AllowChange: Boolean); begin self.saveNoteContent(true); if(AllowChange) then begin self.setNodeImage(trv_note.Selected); setSelectNodeImage(Node); end; end;
procedure TFrm_Main.trv_NoteEdited(TreeView: TfcCustomTreeView; Node: TfcTreeNode; var S: String); var sId:String; reData:OleVariant; begin //这里是已经修改了,并确定下来的; try if(S=Node.Text)then exit; sId := self.trv_Note.ID[Node]; if(sId='')then begin S:=self.trv_Note.NAME[Node]; exit; end; reData := ConComm.update(' UPDATE '+self.trv_Note.stringValue+' SET NAME='+QuotedStr(S)+' WHERE ID='+QuotedStr(sId)).toVariant; if(reData[0]=0)then self.trv_Note.NAME[Node]:=S else begin S:=self.trv_Note.NAME[Node]; end; except S:=self.trv_Note.NAME[Node]; end; self.lbl_note_title.Caption:=self.trv_Note.Name[Node];
end;
procedure TFrm_Main.mniSetNoteNameClick(Sender: TObject); var sSql:String; sParamCode,sParamValue:string; begin sParamCode:='SHOWICON'; sParamValue:=TRQFile.getFileName('ico|*.ico;ALL|*.*');
if(sParamValue='') then exit; if( not FileExists(sParamValue) ) then begin TRQForms.alert('ICON文件"'+sParamValue+'"不存在!'); Exit; end;
// sSql:='SELECT PARAM_CODE FROM SYS_PARAMS_TAB WHERE GROUP_CODE=''SYSTRAY'' AND PARAM_CODE='''+sParamCode+''' '; if(Self.ConComm.getValue('PARAM_CODE', sSql)='') then begin sSql:=' INSERT INTO SYS_PARAMS_TAB (ID,GROUP_CODE,PARAM_CODE,PARAM_VALUE) ' +' VALUES('''+sParamCode+''',''SYSTRAY'','''+sParamCode+''','''+sParamValue+''' )'; end else begin sSql:=' UPDATE SYS_PARAMS_TAB SET PARAM_VALUE='''+sParamValue+''' ' +' WHERE GROUP_CODE=''SYSTRAY'' AND PARAM_CODE='''+sParamCode+''' '; end; self.ConComm.update(sSql);
// sSql:=' SELECT PARAM_CODE,PARAM_VALUE FROM SYS_PARAMS_TAB WHERE GROUP_CODE=''NOTE_TABLE'' '; ConComm.getData(rs,sSql); // for i:=0 to grideNodeName.RowCount-1 do begin // if(rs.Locate('PARAM_CODE',grideNodeName.Cells[0,i]))then begin grideNodeName.Cells[1,i]:=rs['PARAM_VALUE']; end; end; // noteSelectMenuInit(); finally rs.Free; end; end;
procedure TFrm_Main.btnCancelClick(Sender: TObject); begin self.rqpnlSetParams.Hide; end;
procedure TFrm_Main.btnSetClick(Sender: TObject); var sSql:String; i:integer; begin sSql:=' SELECT TOP 1 * FROM SYS_PARAMS_TAB WHERE 1=1 '; try i:=ConComm.query(sSql).result_code; except
for i:=1 to self.grideNodeName.RowCount-1 do begin updateNoteName(grideNodeName.Cells[0,i],grideNodeName.cells[1,i]); end;
self.noteSelectMenuInit; end;
procedure TFrm_Main.updateNoteName(sParamCode, sParamValue: string); var sSql:String; begin sSql:='SELECT PARAM_CODE FROM SYS_PARAMS_TAB WHERE GROUP_CODE=''NOTE_TABLE'' AND PARAM_CODE='''+sParamCode+''' '; if(Self.ConComm.getValue('PARAM_CODE', sSql)='') then begin sSql:=' INSERT INTO SYS_PARAMS_TAB (ID,GROUP_CODE,PARAM_CODE,PARAM_VALUE) ' +' VALUES('''+sParamCode+''',''NOTE_TABLE'','''+sParamCode+''','''+sParamValue+''' )'; end else begin sSql:=' UPDATE SYS_PARAMS_TAB SET PARAM_VALUE='''+sParamValue+''' ' +' WHERE GROUP_CODE=''NOTE_TABLE'' AND PARAM_CODE='''+sParamCode+''' '; end; self.ConComm.update(sSql); end;
procedure TFrm_Main.trv_NoteEndDrag(Sender, Target: TObject; X, Y: Integer); var oldSourceParentNode,nodeSource,nodeDesc:TfcTreeNode; begin nodeSource:=trv_Note.Selected; //得被拖动的标题 nodeDesc:=trv_Note.GetNodeAt(X,Y); //得坐标处标题 oldSourceParentNode :=nodeSource.Parent; //self.lbl_note_title.Caption:='[源节点ID]:'+trv_note..ID[nodeSource]+' [源节点LEVEL]'+inttostr(nodeSource.Level); if nodeDesc<>nodeSource then if nodeDesc=nil then begin nodeSource.MoveTo(trv_Note.Items.GetFirstNode,fcnaAdd); end else nodeSource.MoveTo(nodeDesc,fcnaAddChild); //self.Caption:='[源节点ID]:'+trv_note..ID[nodeSource]+' [源节点LEVEL]'+inttostr(nodeSource.Level); //如果失败就直接退出; if not self.saveNoteTreeNodeLevelId(trv_Note,nodeSource) then exit; setNodeImage(oldSourceParentNode); setNodeImage(nodeDesc); end;
procedure TFrm_Main.ToolButton2Click(Sender: TObject); begin if(self.plst_left.PageIndex=0) then self.plst_left.PageIndex:=1 else self.plst_left.PageIndex:=0; end;
procedure TFrm_Main.noteSelectMenuInit; var menuItem:TMenuItem; index: Integer;
procedure setMenuCaptionHint(miItem:TMenuItem;sCaption,sHint:String); begin miItem.Caption:=sCaption; miItem.Hint:=sHint; end;
begin pm1.Items.Clear; for index := 0 to 6 do begin menuItem := TMenuItem.Create(pm1); // create the new item pm1.Items.Add(menuItem);// add it to the Popupmenu
case Index of 0:setMenuCaptionHint(menuItem,self.grideNodeName.Cells[1,2],self.grideNodeName.Cells[0,2]); 1:setMenuCaptionHint(menuItem,self.grideNodeName.Cells[1,1],self.grideNodeName.Cells[0,1]); 2:setMenuCaptionHint(menuItem,self.grideNodeName.Cells[1,3],self.grideNodeName.Cells[0,3]); 3:setMenuCaptionHint(menuItem,self.grideNodeName.Cells[1,4],self.grideNodeName.Cells[0,4]); 4:setMenuCaptionHint(menuItem,self.grideNodeName.Cells[1,5],self.grideNodeName.Cells[0,5]); 5:setMenuCaptionHint(menuItem,self.grideNodeName.Cells[1,6],self.grideNodeName.Cells[0,6]); 6:setMenuCaptionHint(menuItem,self.grideNodeName.Cells[1,7],self.grideNodeName.Cells[0,7]); end; menuItem.Tag := index; menuItem.OnClick := self.menuSelectNodeClick;// assign it an event handler end; end;
procedure TFrm_Main.btn1Click(Sender: TObject); begin self.rqpnlSetParams.Show; end;
procedure TFrm_Main.rqcltrycn1Click(Sender: TObject); begin if self.Visible then begin rqcltrycn1.ShowMainForm; Application.BringToFront; self.SelectFirst; end; end;
procedure TFrm_Main.N17Click(Sender: TObject); begin close; end;
procedure TFrm_Main.rqcltrycn1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if(not isShowBalliconHint)then begin isShowBalliconHint:=self.rqcltrycn1.ShowBalloonHint('海豪-"'+self.Caption+'":','一定要努力坚强!',bitWarning,10); end; end;
procedure TFrm_Main.rqcltrycn1DblClick(Sender: TObject); begin if self.Visible then begin rqcltrycn1.HideMainForm; end else begin rqcltrycn1.ShowMainForm; Application.BringToFront; self.SelectFirst; end; end;
procedure TFrm_Main.btn2Click(Sender: TObject); begin self.rqcltrycn1.HideMainForm; end;
procedure TFrm_Main.trv_KnowledgeDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin // end;
procedure TFrm_Main.trv_KnowledgeDragDrop(Sender, Source: TObject; X, Y: Integer); begin // end;
procedure TFrm_Main.ToolButton3Click(Sender: TObject); begin wordwrapChange(); end;
procedure TFrm_Main.wordwrapChange; begin self.rmemo_knowledge.WordWrap:=not self.rmemo_knowledge.WordWrap; mni_knowledge_content_wordwrap.Checked:=self.rmemo_knowledge.WordWrap; ToolButton3.Down:=self.rmemo_knowledge.WordWrap; end;
可以用的,拿来做笔记很实用,不过有些bug,希望ruiki能提供NoteBook.exe源码 我的NoteBook.ini配置如下: [DBServer] Server Name= Server Type=MSACCESS User Name= Password=1M053E3F3C3D3I3J3G3H363734353A3B3839 DBName=delphi.qi [SysSet] AppPath= [LOGINSET] USERID=001