Re: [VB6 ] 關於記事本裡的"復原"

看板Visual_Basic作者 (喲)時間13年前 (2012/01/13 23:55), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《rikarika (rika￾ ￾N￾ ￾ )》之銘言: : 我想做一個記事本 : 可是不知道"復原"的部分要怎麼做耶@@ : 直接接收^Z 好像不成功 : 可以麻煩大家幫幫忙嗎?:) 我來回一下這個好老的post. 因為恰好最近工作有做類似的內容. (而且我覺得學了並使用了VB的人做起系統似乎就是跟著IDE那一套, 比較少自己設計真正符合需要的系統規模. 大家是不是也覺得如此?) 我要做個編輯軟體,其中有個功能是Ctrl+Z要退回上一步. 基本上要儲存操作步驟,就要先定義何謂使用者操作步驟,通常會是一個結構, 但是若用VB6做個使用者自訂type有點麻煩,尤其是想把這個UDT當作某個函數的 返回類型. 所以定義成class也不錯. 定義了使用者操作步驟之後,接著就要理解 一組能幫你紀錄操作動作,並且接受你退回上一步的那個東西,不是stack就是queue. 所以我的系統中有個歷史紀錄的結構是HistElement.cls 'Histelement.cls Option Explicit private my_action as MyAction private page_applied as Integer Public Sub Make(Action as MyAction, Page as Integer) my_action = Action page_applied = Page End Sub 然後歷史紀錄是History.cls 'History.cls Option Explicit private my_list as Collection private my_step as Long Public Sub Add(History as HistElement) Dim i as Long For i = my_step + 1 To my_list.Count my_list.Remove my_step + 1 Next i my_list.Add History my_step = my_step + 1 End Sub Public Sub Remove(N as Long) ... my_step = my_step - 1 Public Sub Clear() Dim i as Long For i = 1 To my_list my_list.Remove 1 Next i my_step = 0 ... Public Function Count() As Long Count = my_step End Function Public Sub RollBack() ... Public Sub GoForward() ... Public Sub Apply(Step as Long, TargetControl as Control) Dim history As HistElement Set history = my_list(Step) TargetControl.Flip history.Page TargetControl.Do history.Action ... 這樣應該很好理解,歷史紀錄有可能是回溯到前幾個狀態,此時如果再Add一些 HistElement,就會把回溯位置之後的一些紀錄洗掉. 然後,系統要根據有效的歷史紀錄表達出目前所看得到的編輯狀態, 基本上就是在呈現的技巧上. 首先系統要顯示所處理的資料或檔案的最原始狀態, 譬如一套影像編輯軟體,最開始是載入原本指定修改的那張圖. 接著,是套上歷史紀錄. 從歷史紀錄的起頭開始,依序讓每一個HistElement所代表的指令生效. 所以,系統的主要內容區的呈現,如果寫成一個Show函數,就是這樣: Public Sub Show(ContentPath as String) Dim i as Long ContentPanel.Src = ContentPath ContentPanel.Show For i = 1 to UserActionHistory.Count UserActionHistory.Apply i, ContentPanel Next i ... 因此History.cls會有個Apply函數,如上所述. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.114.218

01/14 00:00, , 1F
至於Ctrl+Z按鍵,在功能表中設定即可.
01/14 00:00, 1F

10/21 01:24, , 2F
推用心
10/21 01:24, 2F
文章代碼(AID): #1F45G2eJ (Visual_Basic)
討論串 (同標題文章)
文章代碼(AID): #1F45G2eJ (Visual_Basic)