Zum Hauptinhalt springen
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

_WinLstSystemEvtSelect

_WinLstSystemEvtSelect Verarbeitung von Ereignissen

Ausprägung der Eigenschaft LstFlags. Während der Verarbeitung des Ereignisses EvtLstSelect können weitere Ereignisse verarbeitet werden.

Beispiel:

In einem Dialog wird ein GanttGraph - und ein RecList -Objekt dargestellt. In dem GanttGraph-Objekt sind Funktionen in den Ereignissen EvtMouseItem und EvtIvlDropItem eingetragen. Durch Anklicken eines Intervalls mit der Maus werden diese Ereignisse kurz hintereinander ausgelöst. Wird in dem Ereignis EvtMouseItem ein Update auf das RecList -Objekt durchgeführt, können während des EvtLstSelect-Ereignisses weitere Ereignisse vom Betriebsystem verarbeitet werden, die dann nicht an das Ereignis EvtIvlDropItem weitergegeben werden.

Zum Beispiel könnte das Loslassen der Maustaste während des EvtLstSelect-Ereignisses verschluckt werden, sodass bei einer Mausbewegung das angeklickte Intervall verschoben wird.

Durch Deaktivieren der Ausprägung _WinLstSystemEvtSelect mit der Anweisung $RecList->wpLstFlags# $RecList->wpLstFlags& ~_WinLstSystemEvtSelect werden keine Ereignisse durch das Betriebssystem verarbeitet. Das Loslassen der Maustaste wird vom EvtIvlDropItem-Ereignisses festgestellt und das Intervall wird nicht verschoben.

sub EvtMouseItem
( ... ) : logic
{
if (aHitTest = _WinHitIvl)
{
// Durch den WinUpdate-Befehl wird das 'EvtLstSelect'-Ereignis ausgelöst.
// Die Verarbeitung von Betriebssystem-Nachrichten (wie z. B. das
// loslassen der Maustaste) läuft parallel dazu weiter.

$RecList->WinUpdate(_WinUpdOn, _WinLstRecFromRecId | _WinLstPosSelected | _WinLstRecDoSelect);
// An dieser Stelle wurde das Mausereignis bereits verarbeitet (jedoch
// für diesen Anwendungsfall zum falschen Zeitpunkt!).

return(true);
}

return(true);
}

sub EvtIvlDropItem
( ... ) : logic
{
// Drag & Drop zulassen.
return(true);
}

sub EvtMouseItem
( ... ) : logic
{
if (aHitTest = _WinHitIvl)
{
// Hierdurch wird festgelegt: Während der Ausführung des
// EvtLstSelect-Ereignisses werden keine Nachrichten des Betriebssystems
// verarbeitet (also z. B. keine Mauseingaben, Tastatureingaben).
$RecList->wpLstFlags # $RecList->wpLstFlags & ~_WinLstSystemEvtSelect;

// Hierdurch wird EvtLstSelect ausgelöst (jedoch jetzt
// ohne das Maus- oder Tastatureingaben parrallel dazu verarbeitet
// werden).
$RecList->WinUpdate(_WinUpdOn, _WinLstRecFromRecId | _WinLstPosSelected | _WinLstRecDoSelect);

// Originalzustand wiederherstellen.
$RecList->wpLstFlags # $RecList->wpLstFlags | _WinLstSystemEvtSelect;

// Erst nach Rückkehr der Funktion werden wieder Nachrichten vom
// Betriebssystem verarbeitet.
return(true);
}

return(true);
}