Bereits in dem Artikel Editierenv eines Feldes in einer RecList habe ich mich mit dem Editiervorgang innerhalb eines Objektes beschäftigt, welches die Daten in Listenform darstellt.
Im folgenden Artikel möchte ich mich mit dem RecView-Objekt befassen und den Ablauf eines Editiervorgangs innerhalb dieses Objektes näher beleuchten.
Ereignis: EvtLstEditStartGroup
Um einen Spalteneintrag in einem RecView-Objekt editieren zu können, muss zuerst eine Reihe von Ereignissen durchlaufen werden. Das Ereignis EvtLstEditStartGroup
wird ausgelöst, wenn ein Eintrag in einem RecView
editiert werden soll. Der Editiervorgang wird durch die in wpEditKeyStart
und wpEditMouseStart
definierten Tastatur- und Mausaktionen, bzw. durch den Befehl WinRvwEdit()
ausgelöst. In diesem Ereignis können Vorbereitungen zum Editieren des Datensatzes getroffen werden.
sub EvtLstEditStartGroup
(
aEvt : event; // Ereignis
aGroup : handle; // Gruppe
aRecBuf : handle; // Datensatzpuffer
aResult : int; // Eingabe-Resultat
)
: logic;
{
// Datensatz sperren
aRecBuf->RecRead(0,_RecID | _RecLock | _RecNoLoad,
aRecBuf->RecInfo(_RecID));
}
Ereignis: EvtLstEditStartItem
Dieses Ereignis wird ausgelöst, wenn bei EvtlstEditStartGroup
im Parameter aResult _WinRvwGroupEditContinue
zurückgegeben wurde. Dieser ist im Ereignis EvtLstEditStartGroup
standardmäßig vorbelegt.
Das Ereignis leitet den Editiervorgang für das in aGroup
übergebene Item oder SubItem ein. Hier kann beispielsweise das Editieren für bestimmte Items der Gruppe unterbunden werden.
sub EvtLstEditStartItem
(
aEvt : event; // Ereignis
aGroup : handle; // Gruppe
aRecBuf : handle; // Datensatzpuffer
aResult : int; // Eingabe-Resultat
)
: logic;
{
// ID und Typ darf nicht verändert werden
if (aGroup->wpSelectorItem = 1 OR aGroup->wpSelectorItem = 7)
{
aResult # _WinRvwGroupEditAbort;
}
}
Ereignis: EvtLstEditActivate
Standardmäßig wird im Ereignis EvtLstEditStartItem
im Parameter aResult _WinRvwGroupEditContinue
zurückgegeben. Dies bewirkt, dass das Ereignis EvtLstEditActivate
ausgelöst wird. Hier können das Edit-Objekt angepasst werden oder in Abhängigkeit vom Inhalt der Spalte, Felder sichtbar gesetzt werden.
sub EvtLstEditActivate
(
aEvt : event; // Ereignis
aGroup : handle; // Gruppe
aRecBuf : handle; // Datensatzpuffer
aEdit : handle; // Eingabe-Objekt
)
: logic;
{
if(aGroup->wpSelectorItem = 2)
{
// Passendes Bild zum Artikel anzeigen
gPicture->wpCaption # '>0\Pictures\'+ aGroup->wpCaption + '.jpg';
}
}
Ereignis: EvtLstEditEndItem
Dieses Ereignis wird aufgerufen, wenn der Editiervorgang für das aktuelle Item oder SubItem beendet oder abgebrochen wurde. 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; // Eingabe-Objekt
aAbort : logic; // Abbruch-Anforderung
aResult : int; // Eingabe-Resultat
)
: logic;
{
if(!aAbort AND aGroup->wpSelectorItem = 2)
{
//Wert in Datensatzpuffer übertragen
aRecBuf->Art.Name # aEdit->wpCaption;
}
}
Ereignis: EvtLstEditEndGroup
Das Ereignis wird nach dem Ereignis EvtLstEditEndItem
ausgelöst. Weiterhin wird es auch aufgerufen, wenn im Ereignis EvtLstEditStartGroup
der Parameter aResult
auf _WinRvwGroupEditAbort
gesetzt wurde. Hier kann der Datensatz gespeichert oder entsperrt werden.
sub EvtLstEditEndGroup
(
aEvt : event; // Ereignis
aGroup : handle; // Gruppe
aRecBuf : handle; // Datensatzpuffer
aAbort : logic; // Abbruch-Anforderung
aResult : int; // Eingabe-Resultat
)
: logic;
{
if(aAbort)
{
// Datensatz entsperren
aRecBuf->RecRead(0,_RecID | _RecUnlock, aRecBuf->RecInfo(_RecID));
}
else
{
// Datensatz in der Datenbank ändern und RecView aktualisieren
aRecBuf->RecReplace(_RecUnlock);
aEvt:Obj->WinRvwUpdate(_WinRvwUpdateFromTop |
_WinRvwUpdateDoKeepSelect);
}
}
2 Antworten
Bei den Ereignisfunktionen ist die Angabe von VAR zur Zeit nicht möglich. Es ergibt sich im Moment nur über die Dokumentation, ob ein Argument einen Rückgabewert verlangt. Insofern ist dies nicht identisch mit den durch sub deklarierten Funktionen.
danke für die ausführliche Beschreibung des Ablaufs.
Es gibt eine Frage wegen des Parameters aResult. Es scheint so zu sein, dass dieser Parameter als Referenz deklariert werden sollte. Im Regel soll solcher Parameter mit einem Schlüsselwort VAR gekennzeichnet werden. Auf dem Workshop, bei dem das RecView-Objekt vorgestellt wurde, wurde etwas über diesen Parameter besprochen. Könnten Sie bitte uns daran erinnern und diese Ausnahme erklären?