Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2012, 13:23   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию Несколько вопросов по SysListView32

Здравствуйте.
Создаю SysListView32, добавляю несколько колонок и несколько строчек.
Выглядит это, как папка в эксплорере. Выделять и щелкать можно итемы только в первой колонке.
А мне надо, чтобы оно выглядело, как список закачек в Utorrent'е или примерно так же.
Т.е. щелкаешь по любому итему и выделяется вся строчка (или все итемы в строчке).
сканеры окон показывают, что список в Utorrent'е имеет класс "SysListView32".
второй вопрос:
если вышеописанное можно сделать, то как узнать, по какому именно итему был совершен щелчок мыши и какой кнопкой?
третий вопрос:
как отсортировать одну колонку по алфавиту, чтобы остальные колонки тоже отсортировались относительно ее? Это вручную делается или можно автоматом?
BLACK_RAIN вне форума Ответить с цитированием
Старый 17.04.2012, 14:04   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы надеюсь на колонки не руками разбили?
это стиль листвиева Report.
и далее Item это первая колонка, субитемы начиная со второй.

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.04.2012, 14:58   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы надеюсь на колонки не руками разбили?
это стиль листвиева Report.
и далее Item это первая колонка, субитемы начиная со второй.
при создании листвью, я испльзую стиль LVS_REPORT.
потом добавляю колонки и строки.
с Субитемами какая-то трабла.
Код:
var
it : taglvitema;
begin
  it.mask := lvif_text;
  it.pszText := pchar('вася');
  it.cchTextMax := sizeof(it.pszText);
  it.iItem := 0;
  it.iSubItem := 0;
  listview_insertitem(lv1,it); // работает
//  it.mask := lvif_text;
  it.pszText := pchar('Евкакий Андреевич');
  it.cchTextMax := sizeof(it.pszText);
  it.iItem := 0;
  it.iSubItem := 1; 
  listview_insertitem(lv1,it); // не работает, если listview_insertitem(lv1,it)
end;
этот код добавляет итем в первую колонку, а во вторую нет. Что не так?
Однако, если использовать макрос
Код:
  listview_setitem(lv1,it); // вместо   listview_insertitem(lv1,it);
то во второй колонке итем, всё-таки, появляется.

теперь еще раз первый вопрос:
мне надо щелкнуть мышкой по итему из второй или третьей колонки.
если это возможно, то как это сделать?
в MSDN не нашел или не вижу.

Последний раз редактировалось BLACK_RAIN; 17.04.2012 в 15:02.
BLACK_RAIN вне форума Ответить с цитированием
Старый 17.04.2012, 16:15   #4
Karpinsky
Подтвердите свой е-майл
 
Регистрация: 19.10.2011
Сообщений: 28
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
этот код добавляет итем в первую колонку, а во вторую нет. Что не так?
MSDN : ListView_InsertItem macro говорит, что
Цитата:
You cannot use ListView_InsertItem or LVM_INSERTITEM to insert subitems; the iSubItem member of the LVITEM structure must be zero.
. Для того, чтобы занести текст в последующие колонки, используй ListView_SetItemText
Karpinsky вне форума Ответить с цитированием
Старый 17.04.2012, 16:25   #5
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Karpinsky
я думал, я что-то не так понял. Если это правильный и единственный способ, то с этим проехали.
теперь далее: можно ли (и как), всё-таки, щелкнуть по итему из второй и следующих колонок?

Последний раз редактировалось BLACK_RAIN; 17.04.2012 в 16:37.
BLACK_RAIN вне форума Ответить с цитированием
Старый 17.04.2012, 16:40   #6
Karpinsky
Подтвердите свой е-майл
 
Регистрация: 19.10.2011
Сообщений: 28
По умолчанию

Extended List-View Styles + LVS_EX_FULLROWSELECT тебе надо что-ли?
Karpinsky вне форума Ответить с цитированием
Старый 17.04.2012, 17:35   #7
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Karpinsky Посмотреть сообщение
Extended List-View Styles + LVS_EX_FULLROWSELECT тебе надо что-ли?
Цитата:
Сообщение от MSDN
LVS_EX_FULLROWSELECT

Version 4.70. When an item is selected, the item and all its subitems are highlighted. This style is available only in conjunction with the LVS_REPORT style.
если я правильно понимаю энглиш, то мне именно это и нужно. Но установка этого стиля ни к чему не приводит. Стиль LVS_REPORT установлен.
Версия Common Controls - 5.82.2900
windows xp sp3.
мой код:
Код:
function createListviewex(var handle:hwnd; owner: hwnd; id: cardinal;
             caption: string; x,y,w,h : integer):boolean;
begin
  handle := createwindowex(LVS_EX_FULLROWSELECT or LVS_EX_GRIDLINES OR
  WS_EX_LEFT or WS_EX_LTRREADING or WS_EX_RIGHTSCROLLBAR or WS_EX_STATICEDGE,
        pchar('SysListView32'),pchar(caption),
  LVS_ALIGNTOP or lvs_report or LVS_ICON or LVS_SHAREIMAGELISTS or
  lvs_showselalways or WS_CHILD or WS_OVERLAPPED or
   WS_VISIBLE or WS_VSCROLL,
        x,y,w,h,owner,id,0,nil);
   result :=  handle>0;
end;
самодельная функция-макрос, упрощаящая создание Листвью.
может , я конфликтующих между собой стилей понаставил или еще что?
стили я переписал из программы "control spy" и методом тыка добавил еще несколько. Но оно во всех случаях не работает так как надо.
Utorrent же как-то это делает...

Последний раз редактировалось BLACK_RAIN; 17.04.2012 в 17:38.
BLACK_RAIN вне форума Ответить с цитированием
Старый 17.04.2012, 17:45   #8
Karpinsky
Подтвердите свой е-майл
 
Регистрация: 19.10.2011
Сообщений: 28
По умолчанию

Не-не-не... Не так. После создания листвью,
Код:
var newStyle : DWORD;
// ...
newStyle := LVS_EX_FULLROWSELECT or 
    SendMessage(lvHandle, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
SendMessage(lvHandle, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, newStyle);
, и все работает.
Karpinsky вне форума Ответить с цитированием
Старый 17.04.2012, 18:24   #9
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Karpinsky Посмотреть сообщение
и все работает.
вау,чувааак! мегареспект! реально работает.
а чем обусловлено то, что стиль не канает, если его добавить сразу?
попутно решился второй вопрос. Теперь щелкаются все итемы во всех колонках.
как теперь узнать, по какому именно итему был произведён щелчок левой/правой кнопкой мыши? p.s. уже нашел . это NM_CLICK/NM_RCLICK. Но думаю, опять будут траблы с СабИтемами
попутно еще вопрос :
Цитата:
Сообщение от Karpinsky
var newStyle : DWORD;
Переменные какого типа лучше подходят для хранения стилей окон.
Я использую "cardinal". Вы, как вижу,- "dword".
в интернете тоже везде по-разному. Дак, как же правильно?
BLACK_RAIN вне форума Ответить с цитированием
Старый 17.04.2012, 18:46   #10
Karpinsky
Подтвердите свой е-майл
 
Регистрация: 19.10.2011
Сообщений: 28
По умолчанию

Цитата:
а чем обусловлено то, что стиль не канает, если его добавить сразу?
Вражьи проделки, не иначе Написано же по ссылке, которую я приводил: "Use the LVM_SETEXTENDEDLISTVIEWSTYLE message or one of the ListView_SetExtendedListViewStyle or ListView_SetExtendedListViewStyleEx macros to employ these extended list-view control styles"

Цитата:
Я использую "cardinal". Вы, как вижу,- "dword".
в интернете тоже везде по-разному. Дак, как же правильно?
При программировании на Дельфи между Cardinal и DWORD нет разницы. Это один и тот же тип (Type Cardinal = DWORD). А вот когда приходится писать на более разборчивых языках, там где компилятор жестче следит за использованием типов, я использую LONG_PTR, потому что SendMessage и возвращает значение этого типа, и ожидает четвертым параметром тоже значение этого же типа.
Karpinsky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько вопросов phphel Общие вопросы Delphi 19 30.01.2011 21:24
несколько вопросов по C Horus92 Общие вопросы C/C++ 2 15.11.2009 16:08
БД - Несколько вопросов lutdan БД в Delphi 3 11.10.2009 20:22
Несколько Вопросов Дорст Общие вопросы Delphi 3 12.11.2007 09:18