Freigeben über


_EdSave( ), API-Bibliotheksroutine

_EdSave( ) speichert die Datei im angegebenen Fenster, ohne die Bearbeitungssitzung zu beenden.

void _EdSave(WHANDLE wh)
WHANDLE wh;            /* Handle of editing window. */

Beispiel

Im folgenden Beispiel wird eine durch einen Parameter angegebene Datei zum Bearbeiten geöffnet. Im Beispiel wird eine neue Zeile eingefügt, zwei Zeilen werden eingerückt, und zwei Zeilen werden gelöscht. Nach dem Einfügen der neuen Zeile wird im Beispiel _EdSave( ) aufgerufen. Anschließend, d. h. nach Einrücken und Löschen, wird im Beispiel dreimal _EdUndo( ) aufgerufen. Dadurch sollen alle Bearbeitungsvorgänge rückgängig gemacht werden. Die vor dem Aufrufen von _EdSave( ) vorgenommene Einfügung kann jedoch nicht rückgängig gemacht werden. Im Beispiel werden zwei weitere Bearbeitungsvorgänge, das Einfügen und das Löschen von zwei Zeilen, vorgenommen. Zwischen beiden Vorgängen erfolgt ein Aufruf an _EdSave( ). Schließlich wird im Beispiel _EdRevert( ) aufgerufen, doch auch in diesem Fall können nur Änderungen rückgängig gemacht werden, die nach dem letzten Aufruf von _EdSave( ) vorgenommen wurden.

Visual FoxPro-Code

SET LIBRARY TO EDSAVE  
= EDSAVE("x")

C-Code

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)
{
#define pFILENAME ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle))

   WHANDLE wh;

   if (!_SetHandSize(parm->p[0].val.ev_handle, 
      parm->p[0].val.ev_length+1))
   {
      _Error(182); // "Insufficient memory"
   }
   pFILENAME[parm->p[0].val.ev_length] = '\0';

   _HLock(parm->p[0].val.ev_handle);
   wh = _EdOpenFile(pFILENAME, FO_READWRITE);
   _HUnLock(parm->p[0].val.ev_handle);

   _EdSetPos(wh, _EdGetLinePos(wh, 13));
   _EdInsert(wh, "Hello, world\r\n", _StrLen("Hello, world\n"));

   _EdSave(wh);

   _EdSelect(wh, _EdGetLinePos(wh, 14), _EdGetLinePos(wh, 16));
   _EdIndent(wh, 1);

   _EdSelect(wh, _EdGetLinePos(wh, 9), _EdGetLinePos(wh, 12));
   _EdDelete(wh);

   _Execute("WAIT WINDOW 'Press any key to undo changes.'");
   _EdUndo(wh);  // undo deletion
   _EdUndo(wh);  // undo indent
   _EdUndo(wh);  // attempt to undo insertion, but can't

   _EdSelect(wh, _EdGetLinePos(wh, 14), _EdGetLinePos(wh, 16));
   _EdIndent(wh, 1);

   _EdSave(wh);

   _EdSelect(wh, _EdGetLinePos(wh, 9), _EdGetLinePos(wh, 12));
   _EdDelete(wh);

   _EdRevert(wh);   // undoes deletion
}

FoxInfo myFoxInfo[] = {
   {"EDSAVE", (FPFI) Example, 1, "C"},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Siehe auch

_EdCloseFile( ), API-Bibliotheksroutine | _EdOpenFile( ), API-Bibliotheksroutine | _EdRevert( ), API-Bibliotheksroutine | _EdUndo( ), API-Bibliotheksroutine