我需要创建一个撤消上一个任务/添加/更改的函数.我如何在Borland C++中执行此操作?
(程序使用"list"将文本字符串存储在文本文件中.除非我使用我创建的保存功能,否则它将被存储然后被删除.)
我的意思是在简单的控制台应用程序中创建一个撤销功能.
我使用KeyPress事件以编程方式在自定义RichTextBox中添加文本:
SelectedText = e.KeyChar.ToString();
Run Code Online (Sandbox Code Playgroud)
问题是以这种方式插入文本不会触发CanUndo标志.
因此,当我尝试撤消/重做文本时(通过调用文本框的Undo()和Redo()方法),没有任何反应.
我尝试以编程方式从TextChanged()事件中唤起KeyUp()事件,但仍未将CanUndo标记为true.
如何撤消插入的文本而不必为撤消和重做操作创建列表?
谢谢
我正在使用定制版的FingerPaint for Android以及其他一些功能,例如插入图像和移动它们.我决定实施一个Undo&Redo,因为它会让生活变得更轻松.为了实现它,我最终决定使用一个Stack来推送视图的绘图缓存,并且每当我想要回到之前的状态时,我就从那里推送内容.因此,使用FingerPaint作为基础,我有以下内容:
private void touch_up() {
mPath.lineTo(mX, mY);
// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
// I enable the set drawing cache...
myView.setDrawingCacheEnabled(true);
// ... and I add the cache to the stack
undoStack.add(myView.getDrawingCache());
indexOfUndoRedo++;
// kill this so we don't double draw
mPath.reset();
}
Run Code Online (Sandbox Code Playgroud)
目前只有在修改后才会更新堆栈,因为我仍然在弄清楚如何解决这个问题.当我想申请重做时,我会执行以下操作:
private void undo() {
myView = new MyView(getActivity());
myView.setBackgroundDrawable(new BitmapDrawable(undoStack.get(indexOfUndoRedo)));
indexOfUndoRedo--;
myView.invalidate();
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,应用程序显示屏幕的原始状态没有变化.我也尝试用白色背景绘制它以重置它,但这种方法也无效.
关于如何解决这个问题的任何想法或建议?我会非常感激:)
问候
我做了一个hg mv -A oldFile newFile并且意外地弄错了新文件.
我做了一个hg revert newFile但现在显示为缺失的文件(然后在移动命令之后删除)现在根本不再显示.
如何撤消该操作并返回到我所处的状态,以便新文件显示为未知且旧文件显示为缺失?
我注意到在长时间编辑会话中,调用undo-tree(Cx Cu)变得越来越慢.我认为原因是随着树变大,它需要更长的时间来解析它(因为它跟踪我打开文件后的所有编辑)
有没有办法在打开的文件中清除undos树?我试过C-x C-v(find-alternate-file),但这会重新打开重置光标的文件(以及org-mode 折叠我的列表等模式)
在 Chrome 中,我注意到在以编程方式更改元素的内容后,对于输入元素,撤消无法正常工作。虽然我对不同的浏览器有不同的行为,但它们并不像 Chrome 那样糟糕。
FF20 good
IE9 some support (undo stack cleared when input loses focus)
Safari5 some support (undo stack cleared when input loses focus)
Chrome26 unreliable
Run Code Online (Sandbox Code Playgroud)
例如,修剪空格的脚本(另请参见下面的 jsfiddle)
现在文本不见了(在 Chome 中)
<input type="text" id="input1" value="hello!">
document.getElementById("input1").addEventListener('blur', function(evt){elementLosesFocus(evt, this);}, false);
function elementLosesFocus(evt, caller)
{
caller.value = caller.value.trim();
}
Run Code Online (Sandbox Code Playgroud)
我认为我能希望的最好的事情是一种在失去焦点时以某种方式清除输入的撤消历史的方法(如 IE 和 Safari 的情况)。
这是在Android Canvas中实现撤消和重做的代码,并且工作正常.
package com.example.canva;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.MotionEvent;
import android.view.View;
public class MainView extends View {
private Canvas mCanvas;
private Path mPath;
private Paint mPaint;
private ArrayList<Path> paths = new ArrayList<Path>();
private ArrayList<Path> undonePaths = new ArrayList<Path>();
public MainView(Context context)
{
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(0xFFFFFFFF);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(6);
mCanvas = new Canvas();
mPath = new Path();
}
// im=BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher);
@Override
protected void onSizeChanged(int …Run Code Online (Sandbox Code Playgroud) 标题可能不正确,但我会尽力解释我的问题。我的项目是一个 Spring Boot 项目。我有调用外部 REST 端点的服务。
我有一个服务方法,其中包含对我拥有的其他服务的多个方法调用。每个单独的方法调用都可能成功与否。每个方法调用都对 REST 端点进行,并且可能存在一些问题,例如 Web 服务不可用或在极少数情况下抛出未知异常。无论发生什么,我都需要能够跟踪哪些方法调用成功,如果其中任何一个失败,我想回滚到原始状态,就好像什么也没发生一样,将其视为@Transactional 注释。所有 REST 调用都是不同的端点,需要单独调用,并且来自我没有影响的外部方。例子:
public MyServiceImpl implements MyService {
@Autowired
private Process1Service;
@Autowired
private Process2Service;
@Autowired
private Process3Service;
@Autowired
private Process4Service;
public void bundledProcess() {
process1Service.createFileRESTcall();
process2Service.addFilePermissionsRESTcall();
process3Service.addFileMetadataRESTcall(); <-- might fail for example
process4Service.addFileTimestampRESTcall();
}
}
Run Code Online (Sandbox Code Playgroud)
例如,如果process3Service.addFileMetadataRESTcall失败,我想对 process3 之前的每个步骤执行类似撤消(以相反顺序)的操作:
process2Service.removeFilePermissionsRESTcall();
process1Service.deleteFileRESTcall();
Run Code Online (Sandbox Code Playgroud)
我读过命令模式,但它似乎用于应用程序内的撤消操作,作为一种已执行操作的历史记录,而不是在 Spring Web 应用程序内。这对我的用例是否也正确,或者如果成功,我应该跟踪每个方法/网络服务调用吗?有没有这样做的最佳实践?
我想无论我如何跟踪它,我都需要知道哪个方法调用失败,然后从那里执行我的“撤消”方法 REST 调用。尽管从理论上讲,即使这些调用当然也可能会失败。
我的主要目标是不创建(在我的示例中)未执行任何进一步处理的文件。它要么全部成功,要么一无所获。一种交易。
更新 1:基于评论改进的伪实现:
public Process1ServiceImpl implements Process1Service {
public void createFileRESTcall() throws MyException {
// Call an external REST api, …Run Code Online (Sandbox Code Playgroud) 使用Chrome、IE11或EDGE并在开发人员工具中修改 CSS 时,您可以按 撤消规则/声明CTRL + Z。
例如:编辑margin: 16px到margin: 14pxI 应该能够用 来还原更改CTRL + Z并用CTRL + Y.
我还没有找到在 Firefox 中执行此操作的方法,甚至还没有找到要求添加它的人。这是阻止我在开发中使用 Firefox 的唯一原因。
有没有办法获得这个功能,或者是从 Mozilla 团队请求它的问题?
我在Word 2003中有一个相当简单的VBA,它将文档的字体更改为"eco font"(长篇故事),然后打开"打印"对话框.
当用户点击"取消"或"确定"时,代码会执行"撤消"以还原更改.
问题是,有时当我按"确定"打印文档时,需要撤消两个操作('字体更改'和'更新字段').我似乎无法预测何时会发生这种情况.
有没有办法读取Word的撤消缓冲区中的最后一项?这样我就可以继续按下撤消,直到字体更改完成.
编辑: 最终代码(缩减):
ActiveDocument.Range.Bookmarks.Add ("_tempEcoUndoStart_")
ActiveDocument.Content.Font.Name = "Nanonymus Eco Sans"
Dialogs(wdDialogFilePrint).Show
While ActiveDocument.Bookmarks.Exists("_tempEcoUndoStart_")
ActiveDocument.Undo
Wend
Run Code Online (Sandbox Code Playgroud)