2010-11-08 46 views
0

我正在用Scintilla編寫文本編輯器(實際上是ScintillaNET,但是關於香草Scintilla的信息也可能有用)。在此編輯器中,我們希望在邊距中顯示更改信息(例如,如果我修改了一行文本,該行將在邊距中顯示我的名稱)。我已經設法修改了一條線,但我似乎無法找到一個好方法來解除邊緣變化,如果有人解除了變更。撤銷邊角文本在Scintilla中的變化

我已經嘗試在BeforeTextInsert事件和EndUndoAction在TextInserted事件結束時調用BeginUndoAction,但似乎並未將邊距更改視爲可撤銷。有沒有一種體面的方式來恢復保證金變化?我想我可能需要實現我自己的小余量撤消堆棧(或修改Scintilla的撤消堆棧),並且只是以這種方式處理它,但是如果有內置的東西,我寧願繼續這樣做。

回答

0

我剛剛開始創建自己的撤消堆棧以節省保證金更改。如果文本正在修改並且不是撤消,我添加修改後的文本,起始位置,行數和字符串列表(每行修改後的邊距文本)。如果存在修改並且是撤消操作,那麼我會查看堆棧中的第一個項目,並且如果位置和修改後的文本相同,那麼我會繼續將邊距更改回舊值。

似乎工作正常,雖然它比我想要的有點醜陋。我確實擔心堆棧與Scintilla撤消堆棧不同步,但我並不想修改Scintilla源代碼。