Beispiel - Editieren in einem RecView-Objekt
Beispiel - Editieren in einem RecView-Objekt Eintrag in einem RecView-Objekt ändern
- Siehe:
EvtLstEditStartGroup,EvtLstEditStartItem,EvtLstEditActivate,EvtLstEditEndItem,EvtLstEditEndGroup
In diesem Beispiel wird gezeigt, wie ein Eintrag in einem RecView -Objekt verändert werden kann.
Das Beispiel besteht aus sechs Funktionen:
- main In dieser Funktion wird der verwendete Dialog angezeigt.
- sub EvtLstEditStartGroup Der entsprechende Datensatz wird gesperrt. Die Bearbeitung der Gruppe kann unterbunden werden.
- sub EvtLstEditStartItem Das Bearbeiten einzelner Items kann unterbunden werden.
- sub EvtLstEditActivate Der Inhalt des Items wird in das Editierobjekt übertragen.
- sub EvtLstEditEndItem Der Inhalt des des Editierobjekts kann in die Feldpuffer übertragen werden.
- sub EvtLstEditEndGroup Der Datensatz wird gespeichert und entsperrt.
Funktion main
In dieser Funktion wird lediglich das Fenster des Beispiels geladen und angezeigt. Das Fenster beinhaltet nur ein RecView -Objekt. Dem Objekt sind in den Ereignissen EvtLstEditStartGroup, EvtLstEditStartItem, EvtLstEditActivate, EvtLstEditEndItem und EvtLstEditEndGroup die entsprechenden Ereignis-Funktionen zugeordnet.
Der Editiervorgang wird durch Doppelklick auf ein Item gestartet.
@A+
@C+
main
{
WinDialog('RecViewEdit');
}
sub EvtLstEditStartGroup
In diesem Ereignis werden die Vorbereitungen zum Editieren getroffen. In diesem Beispiel wird dabei lediglich der aktuell selektierte Datensatz in dem RecView gelesen und gesperrt.
sub EvtLstEditStartGroup
(
aEvt : event; // Ereignis
aGroup : handle; // Gruppe
aRecBuf : handle; // Datensatzpuffer
aResult : int; // Eingabe-Resultat
)
: logic;
{
Der Datensatzpuffer des aktuellen Datensatzes wird in dem Parameter aRecBuf übergeben. Die notwendigen Informationen zum Lesen und Sperren des Datensatzes können so aus diesem Parameter entnommen werden.
aRecBuf->RecRead(0, _RecID | _RecLock | _RecNoLoad, aRecBuf->RecInfo(_RecID));
}
Wird im Parameter aResult die Konstante _WinRvwGroupEditAbort gesetzt, wird die Bearbeitung abgebrochen und das Ereignis EvtLstEditEndGroup ausgelöst. Andernfalls kommt als nächstes das Ereignis EvtLstEditStartItem.
sub EvtLstEditStartItem
In diesem Ereignis kann die Bearbeitung einzelner Items unterbunden werden. In diesem Beispiel wird dies bei einem Item, das ein Bild anzeigt, gemacht.
sub EvtLstEditStartItem
(
aEvt : event; // Ereignis
aGroup : handle; // Gruppe
aRecBuf : handle; // Datensatzpuffer
aEdit : handle; // Eingabe-Objekt
)
: logic;
{
Im Parameter aGroup sind die Eigenschaften SelectorItem und SelectorSubItem auf das aktuelle Item gesetzt. Über diese Eigenschaften kann entschieden werden, ob die Bearbeitung fortgesetzt werden darf.
if (aGroup->wpSelectorItem = 1 and aGroup->wpSelectorSubItem = 3)
aResult # _WinRvwGroupEditAbort;
}
Wird im Parameter aResult die Konstante _WinRvwGroupEditAbort gesetzt, wird die Bearbeitung abgebrochen und das Ereignis EvtLstEditEndItem ausgelöst. Andernfalls kommt als nächstes das Ereignis EvtLstEditActivate.
sub EvtLstEditActivate
Das Ereignis nach dem Ereignis EvtLstEditStartItem ausgelöst. In diesem Ereignis kann man den Inhalt des Editierobjektes anpassen. Bei der Bearbeitung eines Rtf-Textes ist das RtfEdit leer und muss in diesem Ereignis beispielsweise mit dem Befehl WinRtfLoad () gefüllt werden.
sub EvtLstEditActivate
(
aEvt : event; // Ereignis
aGroup : handle; // Gruppe
aRecBuf : handle; // Datensatzpuffer
aResult : int; // Eingabe-Resultat
)
: logic;
{
if (aGroup->wpSelectorItem = 1 and aGroup->wpSelectorSubItem = 4)
{
// News-Text in RtfEdit laden
fnNewsText # aRecBuf->fnNewsText;
aEdit->wpDbFieldName # 'fnNewsText';
aEdit->WinRtfLoad(_WinStreamBufField, _WinRtfLoadRtf);
}
}
sub EvtLstEditEndItem
Das Ereignis wird aufgerufen, wenn der Editiervorgang für das aktuelle Item oder SubItem beendet oder abgebrochen wird. In diesem Ereignis kann man den geänderten Wert in den Datensatzpuffer übertragen.
sub EvtLstEditEndItem
(
aEvt : event; // Ereignis
aGroup : handle; // Gruppe
aRecBuf : handle; // Datensatzpuffer
aEdit : handle; // Eingabeobjekt
aAbort : logic; // Abbruch-Anforderung
aResult : int; // Eingabe-Resultat
)
: logic;
{
Im Parameter aAbort wird übergeben, ob die Bearbeitung abgebrochen wurde, oder sie mit der -Taste beendet wurde.
if (!aAbort and aGroup->wpSelectorItem = 1 and aGroup->wpSelectorSubItem = 4)
{
// Rtf-Text in Datensatzpuffer übertragen
aEdit->wpDbFieldName # 'fnNewsText';
aEdit->WinRtfSave(_WinStreamBufField, _WinRtfSaveRtf);
aRecBuf->fnNewsText # fnNewsText;
}
}
Nach diesem Ereignis wird EvtLstEditEndGroup ausgeführt.
sub EvtLstEditEndGroup
Das Ereignis wird aufgerufen, wenn der Editiervorgang beendet oder abgebrochen wird. In diesem Beispiel wird in dem Ereignis der Datensatz gesichert und entsperrt.
sub EvtLstEditEndGroup
(
aEvt : event; // Ereignis
aGroup : handle; // Gruppe
aRecBuf : handle; // Datensatzpuffer
aAbort : logic; // Abbruch-Anforderung
aResult : int; // Eingabe-Resultat
)
: logic;
{
Im Parameter aAbort wird übergeben, ob die Bearbeitung in einem vorangeganenen Ereignis mit _WinRvwGroupEditAbort abgebrochen wurde.
// nur Abbruch -> Datensatz entsperren
if (aAbort)
aRecBuf->RecRead(0, _RecID | _RecUnlock | _RecNoLoad, aRecBuf->RecInfo(_RecID));
// Datensatz in der Datenbank ändern und RecView aktualisieren
else
{
aRecBuf->RecReplace(_RecUnlock);
aEvt:Obj->WinRvwUpdate(_WinRvwUpdateFromTop | _WinRvwUpdateDoKeepSelect);
}
}
Nach diesem Ereignis ist die Bearbeitung beendet.