Zum Hauptinhalt springen

EvtLstSelectRange

EvtLstSelectRange

Selektion eines Bereichs

Details

Dieses Ereignis wird ausgelöst, wenn in dem Objekt eine Mehrfachselektion mit gedrückter Umschalt -Taste ausgeführt wird.

Definition des Funktionskopfes:

sub EvtLstSelectRange
(
aEvt : event; // Ereignis
aSelDataObj : handle; // SelectDataObject
aID1 : bigint; // Datensatz-ID1
aID2 : bigint; // Datensatz-ID2
aDirection : int; // Selektionsrichtung
)
: logic; // Wird nicht ausgewertet
{
return(true);
}

Alternativer Funktionskopf:

sub EvtLstSelectRange
(
aEvt : event; // Ereignis
aSelDataObj : handle; // SelectDataObject
aID1 : int; // Datensatz-ID1
aID2 : int; // Datensatz-ID2
aDirection : int; // Selektionsrichtung
)
: logic; // Wird nicht ausgewertet
{
return(true);
}

aEvt

In diesem Parameter vom Typ event wird unter anderem der Deskriptor des auslösenden Objekts, d. h. das Objekt, in dem die Ereignisfunktion eingetragen wurde, übergeben.

aSelDataObj

In diesem Übergabeparameter wird das SelectionData -Objekt übergeben. Über das Objekt können alle bisher selektierten Datensätze ermittelt und die zu selektierenden Datensätze hinzugefügt werden.

aId1 und aId2

In diesen Parametern wird die Datensatz-ID des ersten und des letzten Datensatzes angegeben, die selektiert wurden. Der Programmierer kann durch Lesen der Datensätze und der Schlüsselinformation aus dem auslösenden RecList -Objekt alle dazwischenliegenden Datensätze ermitteln.

info

Wird der alternative Funktionskopf verwendet, kommt es zum Laufzeitfehler _ErrValueOverflow , wenn die zu übergebende Datensatz-ID nicht in den Wertebereich von int passt.

aDirection

Hier wird die Richtung, in der die Datensätze selektiert wurden übergeben. Der Parameter kann folgende Werte annehmen:

  • _WinMsdSelDown: Die Datensätze sind von oben nach unten in der Liste selektiert worden.
  • _WinMsdSelUp: Die Datensätze sind von unten nach oben in der Liste selektiert worden.

Resultat

Der Rückgabewert der Funktion wird nicht ausgewertet.

Beispiel:

sub EvtLstSelectRange
(
aEvt : event; // Ereignis
aSelDataObj : handle; // SelectDataObject
aId1 : bigint; // Datensatz-ID1
aId2 : bigint; // Datensatz-ID2
aDirection : int; // Selektionsrichtung
) : logic; // Wird nicht ausgewertet

local
{
tFileNo : int; // Dateinummer
tKeyNo : int; // Schlüsselnummer
tRecID : int; // Datensatz-ID
tPara : int; // RecRead-Parameter
tErg : int; // RecRead-Ergebnis
}
{
// Bei Objekten mit verknüpften Datensätzen muss die eigentliche Datei
// und der eigentliche Schlüssel gesetzt werden
if (aEvt:Obj->wpDbLinkFileNo != 0)
{
// Dateinummer ermitteln
tFileNo # aEvt:Obj->wpDbLinkFileNo;

// Schlüsselnummer ermitteln
tKeyNo # aEvt:Obj->wpDbSelection;
if ((tKeyNo = 0) or (HdlInfo(tKeyNo, _HdlExists) = 0))
tKeyNo # LinkInfo(aEvt:Obj->wpDbFileNo, aEvt:Obj->wpDbKeyNo, _LinkDestKeyNumber);
}
else
{
// Dateinummer ermitteln
tFileNo # aEvt:Obj->wpDbFileNo;

// Schlüsselnummer bzw. Selektion ermitteln
tKeyNo # aEvt:Obj->wpDbSelection;
if ((tKeyNo = 0) or (HdlInfo(tKeyNo, _HdlExists) = 0))
tKeyNo # aEvt:Obj->wpDbKeyNo;
}

// RecRead-Parameter ermitteln
switch (aDirection)
{
// Selektionsreihefolge : Oben > Unten
case _WinMsdSelDown : tPara # _RecNext;
// Selektionsreihefolge : Unten > Oben
case _WinMsdSelUp : tPara # _RecPrev;
}

// Datensätze [aId1 - aId2[ lesen
for
{
// Ersten Datensatz über Datensatz-ID lesen
tErg # RecRead(tFileNo, 0, _RecID, aId1);
tRecID # aId1;
}
loop
{
// Nächsten Datensatz über Schlüssel lesen
tErg # RecRead(tFileNo, tKeyNo, tPara);
// Datensatz-ID ermitteln
tRecID # RecInfo(tFileNo, _RecID);
}
// Solange RecRead erfolgreich und Datensatz-ID
// des gelesenen Datensatzes verschieden aId2
while ((tErg = _rOK) and (tRecID != aId2))
{
// Datensatz in Auswahl übernehmen
aSelDataObj->WinMsdInsert(tRecID);
}

// Datensatz aId2 in Auswahl übernehmen
aSelDataObj->WinMsdInsert(aId2);

return(true);
}
info

Es ist zu beachten, dass möglicherweise nicht alle Datensätze, die in der Liste selektiert sind, in die Liste der Datensätze übernommen werden. Die Datensätze, die zwischenzeitlich gelöscht wurden, werden nicht übernommen. Wird der letzte Datensatz der Selektion gelöscht, terminiert die Schleife nicht rechtzeitig. Ein Löschen kann durch das Sperren des Datensatzes verhindert werden.