Форум: "Основная";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
Внизошибка при работе с 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c