Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.31;
Скачать: CL | DM;

Вниз

ошибка при работе с ListView   Найти похожие ветки 

 
Corona   (2006-11-13 11:52) [0]

добавляю данные в листвью
================================================== ListView_SetExtendedListViewStyle(List3.Handle, LVS_EX_HEADERDRAGDROP or LVS_EX_TWOCLICKACTIVATE or LVS_EX_GRIDLINES or LVS_EX_FLATSB);

with List3 do
      begin
           for z := 0 to x do
            Columns.Add.Caption := IntToStr(z);
           for z := 0 to y do
             List3.Items.Add.Caption := IntToStr(z);
         end;
==================================================
потом обрабатывю DoubleClick в ListView
и здесь когда ловишь ListView_SubItemHitTest
subitem приходит нормально
а item всегда -1

чего я делаю не так???


 
clickmaker ©   (2006-11-13 11:58) [1]

а в flags что при этом? И что передаешь в pt?


 
Corona   (2006-11-13 12:00) [2]

вот обработчик DoubleCLick

var
 ht: PLVHitTestInfo;
 s: string;
 k: integer;
 Msg: TMsg;
 TargetTime: Longint;
 pt: TPoint;
begin
         GetCursorPos(pt);
         pt := ScreenToClient(pt);
         GetMem(ht, sizeof(TLVHitTestInfo));
         ZeroMemory(ht, sizeof(TLVHitTestInfo));
         ht.pt := Point(pt.X, pt.Y);
         k := ListView_SubItemHitTest(List3.Handle, ht);
         if (ht.iSubItem > 0) and (k <> -1) then
         begin
           ht.iItem := ht.iItem - 1;
           ht.iSubItem := ht.iSubItem - 1;
           s := List3.Items.item[ht.iItem].SubItems.Strings[ht.iSubItem];
           if CompareStr(s, "X") = 0 then
             List3.Items.item[ht.iItem].SubItems.Strings[ht.iSubItem] := ""
           else
             List3.Items.item[ht.iItem].SubItems.Strings[ht.iSubItem] := "X";
         end;
         FreeMem(ht);
end;


 
clickmaker ©   (2006-11-13 12:07) [3]


> GetMem(ht, sizeof(TLVHitTestInfo));

а это зачем? Почему бы просто не объявить как TLVHitTestInfo?
ht.pt := Point(pt.X, pt.Y); - тоже лишнее движение

И что в итоге в flags возвращается? Константы есть для этого - LVHT_ONITEMICON, LVHT_ONITEMLABEL...


 
Corona   (2006-11-13 12:14) [4]

причем фишка еще в чем
есть дочернее окно в нем именно этот код работает
а в родительском не пашет
причем код один в один %)

>Почему бы просто не объявить как TLVHitTestInfo?
SubItemHitTest берет PLVHitTestInfo потому так и сделал :)

>И что в итоге в flags возвращается?
LVHT_NOWHERE
%)


 
Corona   (2006-11-13 12:18) [5]

сам то я сишник
на дельфи первый проект делаю
вот и вылезла бяка :(
причем понять не могу где копать
уже код построчно сравнил с работающим в дочернем окне


 
clickmaker ©   (2006-11-13 12:20) [6]


> причем фишка еще в чем
> есть дочернее окно в нем именно этот код работает
> а в родительском не пашет

вот здесь поподробней


 
Corona   (2006-11-13 12:27) [7]


> вот здесь поподробней


у меня есть основное окно
на нем лежит пустой ListView плюс куча других контролов
код его заполнения и обработчик клика я писал выше

так же из меню вызывается дочернее диалоговое окно
на котром тоже лежит ListView
и заполняется и обрабатывается оно аналогично родительскому
там вот в нем все работает замечательно
проблем нет

а в основном родительском окне в обработчике клика я не получаю значение Item"а (всегда -1), а получаю только SubItem.

понятно объяснил?

зы. могу прислать проект в личку
он не очень большой ~ 1 метр в архиве.


 
clickmaker ©   (2006-11-13 12:50) [8]

проверь, те ли координаты в pt передаешь. Может относительно не того окна screentoclient


 
ЮЮ ©   (2006-11-13 12:56) [9]


> pt := ScreenToClient(pt);


А ListView в тех же местах форм лежит? Здесь же вызывается метод ScreenToClient формы, а не ListView


 
Corona   (2006-11-13 12:56) [10]


> проверь, те ли координаты в pt передаешь. Может относительно
> не того окна screentoclient


проверил
subitem определяется то правильно
а вот item ...

где-то в другом месте копать похоже надо
даже придумать не могу где
такое ощущение что самого item"а нет :)


 
Corona   (2006-11-13 12:59) [11]


> А ListView в тех же местах форм лежит? Здесь же вызывается
> метод ScreenToClient формы, а не ListView


ListView лежат в разных местах форм
в дочернем он на всю его дину и ширину
а в родительском - в нижней части на всю ширину


 
clickmaker ©   (2006-11-13 13:02) [12]


> [11] Corona   (13.11.06 12:59)

ну даже ведь визуально можно проверить, на глаз. Взять координаты, которые ты передаешь и прикинуть их на листвью. Только от угла его самого, а не формы естесственно


 
ЮЮ ©   (2006-11-13 13:04) [13]


> в дочернем он на всю его дину и ширину


потому [form].ScreenToClient(pt)  практически равен нужному ListViewScreenToClient(pt)


> а в родительском - в нижней части на всю ширину

Т. е. горизонтальные координаты праильные, отсюда есть subitem, а вертикальные - нет.

поставь в коде  ListView.ScreenToClient


 
Corona   (2006-11-13 13:10) [14]


> ну даже ведь визуально можно проверить, на глаз. Взять координаты,
>  которые ты передаешь и прикинуть их на листвью. Только
> от угла его самого, а не формы естесственно

хм...
такое ощущение что ScreenToClient координату X нормально переводит
а координату Y переводит, но не совсем верно

если их вычесть ~ ширину заголовка кологок, то вроде начинает работать :)
только как бы ее вычислить точно

интересно, а почему там работало
ничего не понимаю %)


 
Corona   (2006-11-13 13:13) [15]


> Т. е. горизонтальные координаты праильные, отсюда есть subitem,
>  а вертикальные - нет.
>
> поставь в коде  ListView.ScreenToClient

пасиб
заработало
во блин оно как



Страницы: 1 вся ветка

Текущий архив: 2006.12.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.035 c
15-1165535836
sl8er
2006-12-08 02:57
2006.12.31
Суммирование времени в SQL


15-1165556140
IMHO
2006-12-08 08:35
2006.12.31
How Vista Lets Microsoft Lock Users In


2-1166020242
dis12345
2006-12-13 17:30
2006.12.31
перебор Label ов


15-1165523519
XsID
2006-12-07 23:31
2006.12.31
Перфокарта


3-1160932617
ZiTrAX
2006-10-15 21:16
2006.12.31
Master-Detail связь: программно или при проектировании?