Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2 3 4 5 6

Версия 3.10 [Delphi]


Vladimir Kladov ©   (26.05.11 20:27[100]

LVN_COLUMNCLICK is fired by the system only in responce to left mouse click on column header.

program Test;

uses
 KOL;

 {$I KOLDEF.inc}

procedure ColumnClick(Dummy: Pointer; Sender: PControl; Idx: Integer);
begin
//if Sender.RightClick then
  MsgOK(Sender.LVColText[Idx]);
end;

procedure Click1(Dummy: Pointer; Sender: PControl);
begin
if Sender.RightClick then
  MsgOK('Click right')
else
  MsgOK('Click left');
end;

begin
Applet := NewForm(nil, 'Test');
with NewListView(Applet, lvsDetail, [], nil, nil, nil)^ do
begin
  LVColAdd('Col1', taLeft, 80);
  LVColAdd('Col2', taLeft, 80);
  LVColAdd('Col3', taLeft, 80);
  OnColumnClick := TOnLVColumnClick(MakeMethod(nil, @ColumnClick));
  OnClick := TOnEvent(MakeMethod(nil, @Click1));
end;
Run(Applet);
end.


Jon ©   (26.05.11 21:53[101]


> LVN_COLUMNCLICK is fired by the system only in
> responce to left mouse click on column header.


Understood - thank you very much.


Ken ©   (27.05.11 11:04[102]

You can handle right click on column header by yourself.

uses KOL, Windows, Types;

procedure Click1(Dummy: Pointer; Sender: PControl);
var
 P: TPoint;
 hChildWnd: HWND;
 WndClass: string;
 hdhti: TLVHitTestInfo;
begin
 if Sender.RightClick then begin
   P := Point(LoWord(GetMessagePos), HiWord(GetMessagePos));
   ScreenToClient(Sender.Handle, P);
   hChildWnd := ChildWindowFromPoint(Sender.Handle, P);
   if (hChildWnd <> 0) and (hChildWnd <> Sender.Handle) then begin
     SetLength(WndClass, 80);
     SetLength(WndClass, GetClassName(hChildWnd, PChar(WndClass), Length(WndClass)));
     if WndClass = 'SysHeader32' then begin
       hdhti.pt := P;
       if SendMessage(hChildWnd, HDM_HITTEST, 1, Longint(@hdhti)) >= 0 then
         MsgOK('Click right ' + Sender.LVColText[hdhti.iItem]);
     end;
   end;
 end
 else
   MsgOK('Click left');
end;


QAZ   (27.05.11 22:47[103]

что то, видимо народ, не понял что я имел в виду в [98]
правая мышь на заголовке вызывает ONCLICK !!! в котором обрабатываются клики по итемам, и событиям от заголовка там делать нечего


Vladimir Kladov ©   (28.05.11 06:00[104]

Вот сюда

function WndProcCommonNotify( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
var NMhdr: PNMHdr;
begin
 Result := False;
 if Msg.message = WM_NOTIFY then
 begin
   NMHdr := Pointer( Msg.lParam );
   case NMHdr.code of
     NM_RCLICK,
     NM_CLICK:  {$IFDEF NIL_EVENTS}
                if assigned( Self_.EV.fOnClick ) then
                {$ENDIF}
                begin
                   {$IFDEF USE_FLAGS}
                       if   NMHdr.code = NM_RCLICK then
                            include( Self_.fFlagsG6, G6_RightClick )
                       else exclude( Self_.fFlagsG6, G6_RightClick );
                   {$ELSE} Self_.fRightClick := NMHdr.code=NM_RCLICK; {$ENDIF}
                   Self_.EV.fOnClick( Self_ );
                end;
     NM_KILLFOCUS: {$IFDEF NIL_EVENTS}
                   if  assigned( Self_.EV.fOnLeave ) then
                   {$ENDIF}
                       Self_.EV.fOnLeave( Self_ );
     NM_RETURN,
     NM_SETFOCUS: {$IFDEF NIL_EVENTS}
                  if  assigned( Self_.EV.fOnEnter ) then
                  {$ENDIF}
                     Self_.EV.fOnEnter( Self_ );
   end;
 end;
end;


приходит сообщение от Windows WM_NOTIFY с кодом NM_CLICK, дальше что?


QAZ   (28.05.11 13:13[105]

а я почем знаю, левый то почемуто не приходит в onclick,а приходит в ОnColumnClick, значит не в винде дело


Vladimir Kladov ©   (30.05.11 20:25[106]

В том и дело, что от винды как раз и не приходит левый клик. А что приходит, то и отдает код.


QAZ   (30.05.11 22:58[107]

ну согласитесь не логично, что клик по заголовку идет в клик по итему
в той же vcl под онклик подразумеваются именно левые клики а для правого клика по заголовку создается отдельное событие OnColumnRightClick (именно оттуда Ken [102] скопировал код)
и никакой путаницы


Vladimir Kladov ©   (31.05.11 16:28[108]

Да, в VCL groupbox вообще в переопределенной процедуре Paint перерисовывался кодом из VCL. Нет, можно добавить какую-нибудь проверку, например, что WM_NOTIFY пришел для самого окна listview. Но я против такого подхода. Еще раз: кому не нравится, свой обработчик WM_NOTIFY навешивается очень просто. Если что-то делается часто, оформляется процедурой. Всяко проще, чем в VCL, где нет возможности без определения наследника легко прицепиться к обработчику. Там есть только SetWindowLong,  что простым способом назвать трудно. У нас есть OnMessage, AttachProc(Ex) - доработки со стороны без проблем. Базовая версия должна быть минималистская. Не абсолютно всех интересует, где был клик правой кнопкой мыши.


Santa   (21.06.11 15:15[109]

при установленных CenterOnScreen=true и WindowsState=wsMaximized форма при запуске оставляет небольшой зазор сверху, хотя в дальнейшем при переводе в нормальный режим, а затем опять в максимальный режим такого нет. Очень похоже что форма сначала распахивается на весь экран, а потом равняется по центру экрана и присутствие панели задач заставляет образоваться зазор. Походу надо селать наоборот, сначала выровнять по центру экрана, а затем распахнуть.

P.S. Delphi 7, Windows XP, версия библиотеки скачена 21.06.2011


Santa   (23.06.11 13:08[110]

Еще одно непонятное поведение ListView. В книге и описаниях компонента сказано, что можно редактировать только одну первую колонку, но вопрос не в этом.
 При заполнении данными и попытке редактировать первую колонку по окончании ввода данных приложение валится с ошибкой "acсess violation 0x00000000 ...". Однако достаточно сделать обработчик события OnEndEditLVItem (можно туда ничего не вписывать, или что бы не пропал во время компиляции вписать коментарии), как приложение начинает работать как положено без всяких ошибок.

P.S. Delphi 7, Windows XP, версия библиотеки скачена 21.06.2011


Thaddy ©   (24.06.11 22:32[111]

study http://kolmck.net/Components/KOLListEdit.zip


Santa   (27.06.11 11:38[112]

Замечен глюк с Toolbar, при разделении кнопок на группы("-"  в Caption свойствах кнопки). После сохранения проекта, закрытия и открытия его повторно, группы востанавливаются неверно, "-" располагается в напротив совсем других кнопок.


Santa   (29.06.11 11:44[113]

В Toolbar в свойство Caption надо вставить хотя бы пробелы, что бы после открытия "-" (separator) востановились правильно.


Santa   (07.07.11 09:25[114]

При FormCompact=true и наличии на форме ListView, вызов формы валит приложение.


QAZ   (23.07.11 17:52[115]

Free_And_Nil работает некоректно, не освобождает объекты
по крайней мере связанные с интерфейсами (TInterfacedComponent)
метод free с последующим := nil норм


AndreyRus ©   (23.07.11 21:37[116]


> Free_And_Nil работает некоректно, не освобождает объектыпо
> крайней мере связанные с интерфейсами (TInterfacedComponent)метод
> free с последующим := nil норм


Ага, тоже уже довольно давно заметил.


Страницы: 1 2 3 4 5 6 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо