Конференция "KOL" » Edit в ListView
 
  • Dy1 (10.06.10 21:44) [0]
    как узнать координаты и размеры ячейки ListView под курсором мыши? Получается только первая колонка, а она и так редактируемая.
    Желательно пример.
    Спасибо
  • Dy1 (11.06.10 19:01) [1]
    наконец-то добрался до дома, посмотрел и сообразил :)
    нулевая колонка - LVItemRect
    остальные - LVSubItemRect.
     Невнимательность. Извиняйте за вопрос
  • Dy1 (11.06.10 19:36) [2]
    найти-то нашёл, но как узнать колонку :(
  • L`Autour (12.06.10 10:35) [3]
    посылкой сообщения LVM_SUBITEMHITTEST
  • L'Autour (12.06.10 10:37) [4]
    Пример можно взять из компонента
    KOLEcmListEdit
  • Dy1 (13.06.10 12:20) [5]
    покопался в KOL.pas, там в коде LVSubItemRect (если не ошибаюсь) есть что-то вроде LVM_SUBITEMHITTEST,0,lvHTI, но подэлемент всегда с большим (нереальным) номером.
  • Dy1 (13.06.10 20:54) [6]
    помогите пожалуйста. Я начал
    function TForm1.LV1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
    begin
     Result := False;
     if msg.message = WM_NOTIFY Then


    и не знаю как дальше получить TWMNotify, где должен быть указатель на структуру NMHdr, которая нужна для NMITEMACTIVATE, где и должны находится координаты ячейки (строка и колонка, т.е.)

    или вызвать LVItemAtPos и потом послать LVM_SUBITEMHITTEST ?
  • Dy1 (13.06.10 21:27) [7]
    добавил в KOL.pas
    1) PMouseEventData = ^TMouseEventData;
    2) пока не знаю для чего может понадобиться передавать в параметрах только координаты мыши :) , поэтому дописал только код ниже. ИМХО вполне можно заменить в КОЛ оригинальный метод (не создавая перегруженных)
    function TControl.LVItemAtPos(PMouse: PMouseEventData): TPoint;
    var Dummy: TWherePosLVItem;
    begin
     Result := LVItemAtPosEx( PMouse, Dummy);
    end;

    function TControl.LVItemAtPosEx(PMouse: PMouseEventData; var Where: TWherePosLVItem): TPoint;
    var HTI: TLVHitTestInfo;
    begin
     HTI.pt.x := PMouse^.X;
     HTI.pt.y := PMouse^.Y;
     Perform(LVM_SUBITEMHITTEST, 0, Integer( @HTI ) );
     Result.Y := HTI.iItem;
     Result.X := HTI.iSubItem;

     Where := lvwpOnColumn;
     if HTI.flags = LVHT_ONITEMICON then
        Where := lvwpOnIcon
     else
     if HTI.flags = LVHT_ONITEMLABEL then
        Where := lvwpOnLabel
     else
     if HTI.flags = LVHT_ONITEMSTATEICON then
        Where := lvwpOnStateIcon
     else
     if HTI.flags = LVHT_ONITEM then
        Where := lvwpOnItem;
    end;



    Проверено, в моей проге :) работает.
  • Dy1 (13.06.10 21:37) [8]
    нужна своя структура под результат, а так норм.
    На этом тему можно закрывать.
Есть новые Нет новых   [120350   +22][b:0][p:0.001]