![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дерево файлов на winapi [D7, WinXP]
Ort © (2008-11-27 10:05:00)вопшем пишу на чистом winapi сабж...столкнулся с проблемой...
1 - Как добавить столбцы в listview
2 - Как добавить итемы в listview
Сильно не ругайте я савсем нуб, с winapi буквально неделю знаком
Ort (2008-11-28 13:11:00) [1]clickmaker
переделал с массивом...все работает спасибо огромное, что потратил свое время на такого нуба как я...сейчас буду разбиратся с добавлением итемов наверняка вопросы еше возникнут по ходу пьессы %)
clickmaker (2008-11-28 12:55:00) [2]> все норм создалось
константа потому что
но не рекомендую строковые константы разбрасывать по коду. Лучше выносить в отдельный массив или в ресурсы. И менять легче и локализовать, если что
Ort (2008-11-28 12:54:00) [3]
> это текст заголовка или всей колонки
чорт какуюто фигню спррасил))) имел ввиду обязательно ее описывать?
Ort (2008-11-28 12:49:00) [4]
> pszText - собственно текст. Должен ссылаться на переменную-
> строку в куче (не локальную). Например pszText := PChar(Headers[i]),
> где Headers - array of string.
это текст заголовка или всей колонки...просто я не описывал ее никак и все норм создалось
ListView1 := CreateWindowEx(
WS_EX_CLIENTEDGE,
WC_LISTVIEW,
nil,
WS_CHILD or WS_VISIBLE or LVS_REPORT or LVS_SINGLESEL,
5, 40, 460, 465, wnd, 0, hInstance, nil);
Font := GetStockObject( ANSI_FIXED_FONT );
SendMessage(ListView1,WM_SETFONT, Font, 0);
lvc.mask := (LVCF_WIDTH or LVCF_TEXT or LVCF_SUBITEM);
lvc.cx := 225;
lvc.fmt := LVCFMT_LEFT;
lvc.iSubItem := 0;
lvc.pszText :=('File Name');
ListView_InsertColumn(Listview1, 0, lvc);
lvc.pszText :=('Size');
ListView_InsertColumn(Listview1, 1, lvc);
Ort (2008-11-28 12:24:00) [5]Оки..пасиб еше раз!
clickmaker (2008-11-28 12:01:00) [6]mask - здесь перечисляешь через or, что ты хочешь указать для колонки. Обычно используют LVCF_TEXT - текст заголовка, LVCF_FMT - для выравнивания в основном, LVCF_SUBITEM - грубо говоря, индекс колонки.
fmt - если указал LVCF_FMT, то здесь можно выравнять текст
cx - ширина в пикселах, если указал LVCF_WIDTH
pszText - собственно текст. Должен ссылаться на переменную-строку в куче (не локальную). Например pszText := PChar(Headers[i]), где Headers - array of string.
cchTextMax - длина текста
iSubItem - индекс. Обычно соответствует индексу колонки
iImage - индекс в имиджлисте, если таковой прицеплен к заголовку
iOrder - порядок колонки. Может отличаться от индекса, если юзер перетащил колонку
Это был мой первый и последний перевод MSDN. Дальше сам думай
Ort (2008-11-28 11:43:00) [7]уряя калонка саздалась)))
> clickmaker
Пасиб огромное!! ты оч крут!
мсдн читал я там мало что понимаю синтаксис мне непонятен...если не сложно можешь сдесь обеснить :[
clickmaker (2008-11-28 11:32:00) [8]и еще
со стилем LVS_ICON колонки смысла не имеют. Нужен LVS_REPORT
а что с заполнением не понятно? MSDN или Win32 reference читал?
Ort (2008-11-28 11:24:00) [9]
> clickmaker
в точку...вот как иих заполнять я не нашел :[
clickmaker (2008-11-28 11:01:00) [10]> ListView_InsertColumn(Listview1, 1, lvc);
неплохо бы еще поля lvc заполнить
да и индексы начинаются с 0, а не с 1
Ort (2008-11-28 10:45:00) [11]
> Ort (27.11.08 19:46) [13]
> не добавилосб описал в варе переменую...вобшем вот кусок
> кода создаю лист вью и патом вызваю инсерколумн ListView1
> := CreateWindowEx( WS_EX_CLIENTEDGE, WC_LISTVIEW,
> nil, WS_CHILD or WS_VISIBLE or LVS_ICON or LVS_SINGLESEL,
> 5, 40, 465, 465, wnd, 0, hInstance, nil); Font :=
> GetStockObject( ANSI_FIXED_FONT ); SendMessage(ListView1,
> WM_SETFONT, Font, 0); ListView_InsertColumn(Listview1,
> 1, lvc);
мне пока это нужно
Eraser (2008-11-27 23:06:00) [12]> [15] Ort (27.11.08 21:29)
> это как?
очень просто.
вопрос:
> Как добавить итемы в listview
ответ: начинаешь смотреть реализацию добавления, начиная с метода TListItems.Add... путем перехода по нескольким "ссылкам" (клик мышью по идентификатору, удерживая нажатый ctrl) приходим к тому, что вызывается API функция SendMessage(hWnd, LVM_INSERTITEM, 0, Longint(@pItem).
и т.д.
Ort (2008-11-27 21:29:00) [13]Eraser
это как?
Eraser (2008-11-27 20:25:00) [14]> [8] Ort (27.11.08 17:33)
> по заданию низя...только winapi
ok, но кто мешает посмотреть, как нужный функционал реализован в VCL? все ж с исходниками поставляется. т.о. все задание сводится к копированию кода из VCL )
Ort (2008-11-27 19:46:00) [15]не добавилосб
описал в варе переменую...
вобшем вот кусок кода создаю лист вью и патом вызваю инсерколумн
ListView1 := CreateWindowEx(
WS_EX_CLIENTEDGE,
WC_LISTVIEW,
nil,
WS_CHILD or WS_VISIBLE or LVS_ICON or LVS_SINGLESEL,
5, 40, 465, 465, wnd, 0, hInstance, nil);
Font := GetStockObject( ANSI_FIXED_FONT );
SendMessage(ListView1,WM_SETFONT, Font, 0);
ListView_InsertColumn(Listview1, 1, lvc);
Ort (2008-11-27 19:40:00) [16]точкой вроде :[ сорри шас папробую
clickmaker (2008-11-27 18:41:00) [17]> эээ...это оч похожа на метод
а хоть попробовал? похоже... Не в курсе, каким символом методы от объекта отделяются?
Ort (2008-11-27 18:37:00) [18]
> ListView_InsertColumn(ListViewHandle, Index, lvc);
эээ...это оч похожа на метод обьекта листвью, винапи не знает обьктов у меня листвью типа hwnd
clickmaker (2008-11-27 17:54:00) [19]> как и где описать структуру
var
lvc: LV_COLUMN;
> как использовать инсерколумн
ListView_InsertColumn(ListViewHandle, Index, lvc);
Ort (2008-11-27 17:33:00) [20]как и где описать структуру и собствена как использовать инсерколумн
> в чем причина выбора "чистого winapi", чем TListView плох?
по заданию низя...только winapi