Nachrichten der DragListbox


Die DragListbox generiert vier Nachrichten, die wir als Reaktion auf das "Ziehen" nutzen können:

WertBedeutung
DL_BEGINDRAG wird generiert, wenn der "Zieh"-Vorgang (Drag) begonnen wird
DL_DRAGGING wird während des "Ziehens" erzeugt
DL_CANCELDRAG wird beim Abbrechen des Vorgangs erzeugt (ausgelöst durch ESC)
DL_DROPPED wird beim Beenden des "Zieh"-Vorgangs (Drop) ausgelöst

Da es sich aber bei unserer zuvor registrierten Drag-Nachricht (DL_MESSAGE) um eine Variable handelt, können wir die o.g. Benachrichtigungen nicht wie sonst üblich auswerten. Wir müssen das daher im else-Teil von case machen. Dieses Prinzip wird uns beim Suchen- und Ersetzendialog des Standarddialoge-Tutorials noch einmal begegnen

else begin
  result := FALSE;
  // message handling of the drag listbox comes here
  if DL_MESSAGE <> 0 then // DL_MESSAGE cannot be WM_NULL (=0)!
    if uMsg = DL_MESSAGE then


Welche Nachricht nun generiert wurde, sagt uns das DRAGLISTINFO-Record, das uns im lParam übermittelt wird. Dabei ist für uns die Membervariable uNotification von Interesse, die die o.g. Benachrichtigungen der DragListbox enthält

      case PDRAGLISTINFO(lParam)^.uNotification of
        DL_BEGINDRAG:
          { ... }
        DL_DRAGGING:
          { ... }
        DL_CANCELDRAG:
          { ... }
        DL_DROPPED:
          { ... }
      end; // case (PDRAGLISTINFO(lParam)^.uNotification of)
end; // else (case uMsg of)