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

Вниз

ListView и EditBox - как?   Найти похожие ветки 

 
Rusya   (2007-10-10 11:20) [0]

Hello all,
У меня на форме ecmListView и поле KOLEditBox. Как сделать так, чтобы при изменении ширины одного из столбцов списка автоматически изменялась ширина editbox"a?


 
Rusya   (2007-10-26 17:59) [1]

Так я и не разобрался, спустя много времени ... подскажите, знающие люди.


 
mdw ©   (2007-10-26 22:56) [2]

Копай в сторону нотификаций заколовка, смотри HDN_BEGINTRACK, HDN_ENDTRACK, HDN_TRACK.


 
Rusya   (2007-10-31 05:18) [3]


> mdw ©   (26.10.07 22:56) [2]
> Копай в сторону нотификаций заколовка, смотри HDN_BEGINTRACK,
>  HDN_ENDTRACK, HDN_TRACK.

Что самое интересное, ловятся только HDN_BEGINTRACKW и HDN_ENDTRACKW. Уведомления HDN_BEGINTRACK, HDN_TRACK, HDN_ENDTRACK (и HDN_TRACKW) не ловятся.

Перехватывал с помощью таких конструкций (менял код нотификации, в сравнении, при необходимости):

function TForm1.LVMessage(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
Result:= false;
if ( Msg.message = WM_NOTIFY ) then
begin
  if ( PNMHDR( Msg.lParam ).code = HDN_TRACK ) then
    MsgOk(" HDN_TRACK ");
end;
end;



procedure TForm1.KOLForm1Show(Sender: PObj);
begin
 LV.AttachProc( @TForm1.LVMessage );
end;

(можно и не аттачить, а просто назначить процедуру LVMessage обработчиком события OnMessage для ListView - результат один и тот же).

А теперь вопросы:
1) почему вместо HDN_*TRACKA приходят HDN_*TRACKW? (UNICODE_CTRLS не включал).
2) почему не приходят HDN_TRACK или HDN_TRACKW при перемещении сплиттера столбца ListView? Все остальное доходит, но мне нужно отслеживать именно изменение ширины столбца.

ЗЫ. WinXP Rus SP2, Delphi 7, KOL/MCK 2.83, на форме только ListView и ecmListView, на обоих такой результат.


 
mdw ©   (2007-10-31 11:21) [4]


> 1) почему вместо HDN_*TRACKA приходят HDN_*TRACKW? (UNICODE_CTRLS
> не включал).

Ну, видимо Listview всегда создает юникодный заголовок, независимо от режима создания его самого.


 
mdw ©   (2007-10-31 11:28) [5]


> 2) почему не приходят HDN_TRACK или HDN_TRACKW при перемещении
> сплиттера столбца ListView? Все остальное доходит, но мне
> нужно отслеживать именно изменение ширины столбца.

Что можно посоветовать. Первый вариант. Поставь оконную процедуру на заголовок и отслеживай там движение мыши в промежуток между HDN_BEGINTRACK и HDN_ENDTRACK. Ну а там уже обращайся к LVColWidth[].
Второй вариант. Используй отдельно заголовок и ListView в режиме lvsDetailNoHeader.


 
Rusya   (2007-10-31 11:29) [6]


> > 1) почему вместо HDN_*TRACKA приходят HDN_*TRACKW? (UNICODE_CTRLS
> > не включал).Ну, видимо Listview всегда создает юникодный
> заголовок, независимо от режима создания его самого.

Т.е. хотите сказать, что HDN_*TRACKA в KOL не имеет смысла? Всегда приходит HDN_*TRACKW ? И что делать с HDN_TRACKA/HDN_TRACKW, вернее с их отсутствием? Что неправильно делаю?


 
mdw ©   (2007-10-31 11:39) [7]

А HDN_TRACK скорее всего ListView не пропускает дальше, почему - вопрос к MS.


 
mdw ©   (2007-10-31 11:41) [8]


> Т.е. хотите сказать, что HDN_*TRACKA в KOL не имеет смысла?

Да не в кол, а в ListView. Механизм такой: ListView при необходимости создает дочернее окно с классом "SysHeader32" и обрабатывает его нотификации как считает нужным и создает его тоже как считает нужным...


 
Rusya   (2007-10-31 11:48) [9]


> mdw ©   (31.10.07 11:28) [5]
> > 2) почему не приходят HDN_TRACK или HDN_TRACKW при перемещении
> > сплиттера столбца ListView? Все остальное доходит, но
> мне нужно отслеживать именно изменение ширины столбца.

> Что можно посоветовать. Первый вариант. Поставь оконную
> процедуру на заголовок и отслеживай там движение мыши в
> промежуток между HDN_BEGINTRACK и HDN_ENDTRACK. Ну а там
> уже обращайся к LVColWidth[].

Т.е. по HDN_BEGINTRACKW аттачить оконную процедуру на заголовок, а по HDN_ENDTRACKW детачить? Можно сделать, но это крайний случай, громоздко и вообще некрасиво. Придумали ведь HDN_TRACK, для этого предназначенный, но почему-то неработающий.


> Второй вариант. Используй отдельно
> заголовок и ListView в режиме lvsDetailNoHeader.

Этот вариант - то же самое, что первое, только придется еще вручную LVColWidth изменять. Galkov писал на форуме, что траблы возникают с WM_NOTIFY, но HDN_BEGINTRACKW/HDN_ENDTRACKW ловятся же?

И вообще, зачем костыли: давайте просто сделаем, чтоб HDN_TRACK работал как положено, в VCL работает же нормально. Если б у меня хватало знаний, я б поковырялся в библиотеке, поискал причину .. но увы.


 
Rusya   (2007-10-31 12:10) [10]


> mdw ©   (31.10.07 11:39) [7]
> А HDN_TRACK скорее всего ListView не пропускает дальше,
> почему - вопрос к MS.

А смысл тогда его документировать? В MSDN ясно написано, когда HDN_TRACK посылается (и кому).


 
mdw ©   (2007-10-31 13:33) [11]


> А смысл тогда его документировать? В MSDN ясно написано,
>  когда HDN_TRACK посылается (и кому).

Документирован для заголовка, но не ListView.

Если вот такой обработчик сделать для ListView и подвигать колонки, то видим что возникают нотификации HDN_ITEMCHANGING и HDN_ITEMCHANGED. Вот их и используйте.
function TMainForm.ListView1Message(var Msg: tagMSG;  var Rslt: Integer): Boolean;
begin
   Result:= False;
   if ( Msg.message = WM_NOTIFY ) then
    Memo1.Add(Int2Str(PTBNotify(Msg.lParam).hdr.code)+#13#10);
end;


 
Rusya   (2007-10-31 13:47) [12]


> mdw ©   (31.10.07 13:33) [11]
> > А смысл тогда его документировать? В MSDN ясно написано,
> >  когда HDN_TRACK посылается (и кому).Документирован для
> заголовка, но не ListView.

Если только для заголовка, тогда все понятно.

Только возникает такой вопрос: а если как в нашем случае Листбокс с заголовком, то по логике вещей заголовок листбокса тоже должен отсылать нотификации, подобно обычному заголовку. Я еще посмотрю, как обстоят дела с Листбоксом в VCL и голом winapi. Просто интересно.


 
L`Autour ©   (2007-10-31 14:10) [13]

Гарантированно можно через перехват WM_PAINT выравниваемые ширины элементов сравнивать (и менять при необходимости).



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

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

Наверх




Память: 0.48 MB
Время: 0.045 c
2-1219219486
sD
2008-08-20 12:04
2008.09.28
Работа с dxBarManager (DevExpress)


15-1217707518
Дед
2008-08-03 00:05
2008.09.28
У кого есть идеи, как отрезать делфи2007 от .Net?


2-1218831398
AlexDan
2008-08-16 00:16
2008.09.28
О StrToFloat


2-1219081510
AlexDan
2008-08-18 21:45
2008.09.28
Ошибка компиллятора?


13-1121691834
RA
2005-07-18 17:03
2008.09.28
Установка .NET





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский