Текущий архив: 2005.06.14;
Скачать: CL | DM;
ВнизКакое событие изменение ширины столбцов в TKOLListView Найти похожие ветки
← →
Sewix © (2004-11-07 00:46) [0]Мне надо сохранить в ini фалй ширину столбцов в TKOLListView. Какое событие надо обрабатывать? И как узнать какой именно столбец имнелился? Спасибо.
← →
ecm (2004-11-07 01:30) [1]Сам не проверял, но думаю надо делать примерно так:
1) Получить хендл на Header при помощи LVM_GETHEADER
2) Отловить WM_NOTIFY(HDN_ENDTRACK) соответсвующий этому хендлу
3) В структуре HDITEM будет и название и номер и ширина...:)
Только зачем все так усложнять?
Можно же просто в какой-то определенный момент(закрытие окна
или программы) взять и сохранить текущие значения ширины всех столбцов
← →
Sewix © (2004-11-07 11:02) [2]Действительно можно пробижатся по всем ListView.LVColWidth[i] и сохранить все их ширины на событие закрытия окна программы. Но меня этот вариант не устроит т.к. во время работы программы в TKOLListView могу потгружатся разные данные и для каждых я хочу хранить свои настройки, если я сделаю на событие закрытие окна, то он сохранит настройки только для последних открытых данных. Вопрос остаенся открытым: на какое событие повесить обработчик? Событие изменение ширины колонки.
← →
ecm (2004-11-07 12:41) [3]Похоже первый ответ требует подробных разьяснений :)
(А самостоятельно в MSDN посмотреть уже лом?)....
var
LV1Header: THandle;
const
HDN_ENDTRACK = -307;
type
PNMHEADER = ^tagNMHEADERA;
tagNMHEADERA = packed record
Hdr: TNMHdr;
Item: Integer;
Button: Integer;
PItem: PHDItemA;
end;
2Kladov: Это конечно бы надо внести в delphicommctrl.inc
но наверное вместе с реализацией HeaderControl ...procedure TForm1.KOLForm1FormCreate(Sender: PObj);
begin
...
LV1Header := ListView1.Perform(LVM_GETHEADER,0,0);
...
end;
function TForm1.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
var
nmhdr: PNMHEADER;
begin
if Msg.message = WM_NOTIFY then begin
nmhdr := PNMHEADER(Msg.lParam);
if (nmhdr.Hdr.code = HDN_ENDTRACK) and (nmhdr.Hdr.hwndFrom = LV1Header) then begin
//nmhdr.Item -> Номер столбца
//nmhdr^.PItem^.cxy -> новая ширина столбца
// и еще куча всего . Подробнее см. описание HDITEM
end;
end;
З.Ы. Если ListView на форме один то все связаное с LV1Header наверное можно выбросить
← →
SPeller © (2004-11-07 15:09) [4]Sewix © (07.11.04 11:02) [2]
Но меня этот вариант не устроит т.к. во время работы программы в TKOLListView могу потгружатся разные данные
Ну так вот и сделай в процедуре загрузки данных сохранение ширины столбцов.
← →
ecm (2004-11-07 16:23) [5]2Speller Это понятно - все в руках программиста и всегда можно сделать проще. Но человек просил:
-Вопрос остаенся открытым: на какое событие повесить обработчик? Событие изменение ширины колонки.
Я думаю этот вопрос теперь закрыт? ... :)
← →
Sewix © (2004-11-07 16:39) [6]Не знаю как грамотнее сделать: сохранять текущее положение столбцов при загрузке данных или сохранять их только при изменении ширины столбцов обрабатывая это событие. Задумывалось сделать при изменении ширины, но сейчас я уже сомниваюсь. Вобщем сделаю как полчится. Вопрос можно считать закрытым. Спасибо.
← →
ecm (2004-11-07 20:56) [7]ИМХО, что правильнее их сохранять при изменении набора(названий и т.д. но не размеров) столбцов + при закрытии (окна или программы) - меньше лишних обращений к Ини-файлу. Потому как это
все-равно прийдется делать... - A если пользователь не будет менять щирины "по умолчанию" при смене контента? Событие
if (nmhdr.Hdr.code = HDN_ENDTRACK) and (nmhdr.Hdr.hwndFrom = LV1Header) then
выполняется только при "отпускании" разделителя между заголовками столбца.. т.е. все-равно прийдется как то сохранять
новые столбцы... :)
Страницы: 1 вся ветка
Текущий архив: 2005.06.14;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.043 c