Zum Hauptinhalt springen

Beispiel - Editieren in einem RecView-Objekt

Beispiel - Editieren in einem RecView-Objekt Eintrag in einem RecView-Objekt ändern

In diesem Beispiel wird gezeigt, wie ein Eintrag in einem RecView -Objekt verändert werden kann.

Das Beispiel besteht aus sechs Funktionen:

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 F2 -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.