Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Вниз

Программный выбор пункта в KOLListView   Найти похожие ветки 

 
dimaxx ©   (2004-11-19 00:08) [0]

KOLListView динамически заполняется древовидными данными (наподобие файлов и папок). При входе в "папку" нужно выделить самый верхний пункт. Вроде бы задача простая, но не тут-то было! Выбор произвожу также, как и в VCL, а именно:

ListView.LVCurItem:=0;

Заметил такую особенность: если пункт-папка (в которую вошел пользователь) имеет индекс (номер) больше, чем кол-во вновь выведенных данных, то самый верхний пункт имеет только фокус (обведен точечной рамкой), но не выбран. Если кол-во вновь выведенных данных больше, чем индекс, то производится нормальный выбор пункта.

Например, выведено 10 пунктов-папок. Пользователь дважды щелкает по 6-му пункту. Далее производится выборка данных для этой папки. Допустим, нашли и вывели 4 пункта. Самый верхний будет только обведен рамкой, но не выбран. Если будет найдено 7 и более пунктов для данной папки, то верхний пункт нормально отображается полосой и точеченой рамкой одновременно (обычный выбор).

Вопрос: как сделать, чтоб всегда правильно выбирался пункт?

Если кому не совсем понятно о чем речь, то могу набросать пример и выложить (если найду где).


 
Dimaxx ©   (2004-11-19 00:10) [1]

Да совсем забыл дописать. ListView находится в режиме lvsDetail.


 
SPeller ©   (2004-11-19 04:59) [2]

Скинь мне на мыло.


 
Dimaxx ©   (2004-11-20 14:44) [3]

Лови - ушло на анкетное мыло.


 
dimaxx ©   (2004-12-24 22:37) [4]

SPeller - как с проверкой дела?


 
SPeller ©   (2004-12-25 08:09) [5]

Меня долго небыло, я и забыл совсем. Но на почту мне ничего не пришло. Скинь ещё раз, если ещё актуально, на speller_@_yandex.ru (без прочерков).


 
dimaxx ©   (2004-12-25 22:21) [6]

Ушло на это мыло...


 
z007   (2004-12-26 02:09) [7]

Если правильно понимаю, такой же эффект наблюдается в Explorer"е - значит так и предусмотрено в ListView.

Причина - в двойном щелчке.

Попробуй использовать один (можно с таймером, чтобы казалось, что их два) или корректировать фокус на MouseUp (оно происходит, кажется, после DBLClick).


 
dimaxx ©   (2004-12-26 13:07) [8]

Нифига! В VCL"овском все нормально - проверено.


 
SPeller ©   (2004-12-26 19:03) [9]

Похоже что проблема действительно в дабл-клике. VCL, однако, это не беспокоит. Я так думаю что проблема кроется где-то либо в стилях списка, либо в инициализации этого списка (InitCommonControls и т.п.). Интересное поведение....


 
SPeller ©   (2004-12-26 19:04) [10]

Я пока не знаю как лечить. Надо ковыряться долго. Но НГ и сессия на носу, времени в обрез :)


 
Владимир Кладов   (2004-12-26 19:09) [11]

вообще, есть разница между Selected и Focused. Если вам надо, вы можете управлять и тем и другим. Для multiselect-listview имеет смысл прежде чем делать новое выделение, старое снимать (LVCurItem := -1).


 
SPeller ©   (2004-12-26 19:24) [12]

ListView не multiselect. Я попробовал и CurItem = -1, и LVM_SETITEMCOUNT, и CurItem = 0 перед очичткой, и = 100, по всякому. Не хочет. Флаг LVIS_FOCUSED устанавливается нормально, а вот LVIS_SELECTD нет. Итем ни в какую не хочет становиться выделенным.


 
dimaxx ©   (2004-12-26 19:29) [13]

Но почему тогда он выделяется, если количество новых итемов больше, чем номер выбранного до этого, а если меньше, то не выделяется? Вот это мне непонятно. Если бы всегда не выделялось, еще можно понять, но такое вот неопределенное состояние удивляет...


 
z007   (2004-12-28 01:11) [14]

Нифига! В VCL"овском все нормально - проверено
VCL, однако, это не беспокоит


Совершенно зря вы здесь, уважаемый Speller, указываете на VCL, вроде бы речь в вопросе идет про KOL; и насчет "нифига", дорогой dimaxx, полагаю, поторопились:

Все-таки попробуйте добиться того, чего вы хотите от explorer"а (когда Вид=Список).
У меня не получилось.

По существу заясняю:)

1. ТЕОРИЯ
ListView кроме item"ов имеет и т.н. пустую область, по которой и происходит последний щелчок (DOWN) при DBLCLICK. Поэтому (грубо говоря)область Item"ов теряет STATE выделения (LVIS_SELECTED), хотя LVIS_FOCUSED при этом сохраняется.
Где-то так, хотя это примерно.

2. ХХХ
В VCL так не происходит по той причине, что WM_LBUTTONDBLCLK для ListView тупо не обрабатывается и "эффект последнего щелчка" не возникает.
Поэтому и Item остается выделенным :)

3. ПРИМЕР (в VCL  все это сделано, конечно, похитрее...):
function TForm1.LVMessage(var Msg: tagMSG; var Rslt: Integer): Boolean;
var MouseData: TMouseEventData;
begin
Result:=False;
IF MSG.message= WM_LBUTTONDBLCLK {оно самое!} THEN
begin
  //подменяем двойной клик на подъем мышки
  LV.Perform(WM_LBUTTONUP, 0, Msg.lParam);
  //Вызываем то, что хотим выполнить на OnMouseDblClk
  LVMouseDblClk(LV,MouseData);
  Result:=tRUE;//Rslt:=1;
end;
end;



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

Форум: "KOL";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.033 c
6-1113996587
MegaVolt
2005-04-20 15:29
2005.07.31
Как определить когда появляется запись в ARP таблице?


1-1121254576
zamik
2005-07-13 15:36
2005.07.31
QReport


1-1121170563
Bagdat
2005-07-12 16:16
2005.07.31
Работа с текстовым файлом


4-1117827446
Gefest
2005-06-03 23:37
2005.07.31
Изменение системной даты


1-1121339957
Vadik
2005-07-14 15:19
2005.07.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский