>342
俺は、サブクラス化してこんな感じにメッセージをすり替えたりとかしてやってる。
前に書いたコードを適当に抜き出したから、どこか間違ってるかも。
procedure THoge.TreeViewNewWndProc(var Message: TMessage);
var
 M: TMessage;
begin
 if (Message.Msg = TVM_SELECTITEM) and (Message.WParam = TVGN_DROPHILITE) and (ドラッグ中) then
 begin
  if 棒線を出したい then begin
   if 上に出したい then begin
    Message.Msg := TVM_SETINSERTMARK;
    Message.WParam := integer(False);
   end else if 下に出したい then begin
    Message.Msg := TVM_SETINSERTMARK;
    Message.WParam := integer(True);
   end;
  end;
  case Message.Msg of
   TVM_SELECTITEM: PostMessage(TreeView.Handle,TVM_SETINSERTMARK,0,0);
   TVM_SETINSERTMARK: begin
    M.Msg := TVM_SELECTITEM;
    M.WParam := TVGN_DROPHILITE;
    M.LParam := 0;
    TreeViewOldWndProc(M);
   end;
  end;
 end;
 TreeViewOldWndProc(Message);
end;