Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1165773689
$Pl@Sh
2006-12-10 21:01
2006.12.31
Откуда выражение?


15-1165583652
Cash
2006-12-08 16:14
2006.12.31
Про: "... как решать задачи?"


2-1165821105
RightD
2006-12-11 10:11
2006.12.31
По TdxDBGrid


2-1165948805
GEN++
2006-12-12 21:40
2006.12.31
NMStrmServ


1-1163424580
DVM
2006-11-13 16:29
2006.12.31
Помогите с выбором предка для класса. Как сделать такое?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский