Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 




Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
 
 06:22 Banderas
 06:21 Владимир Лось
 06:21 Мурад Чаниев
 06:21 Ins
 06:21 MK
 06:20 Джимми
 06:18 Илья Эрлихман
 06:18 Geniepro
 06:17 antonye
 06:17 Александр Смирнов
 06:16 Сергей Перовский
 06:15 AVC
 06:15 cfdX
 06:14 Евгений Непомнящий
 06:11 Cepгей Poщин
 06:10 pastor
 06:08 Дмитрий ...
 06:08 weirdie
 06:08 TPID
 06:05 Сергей Осколков
 06:04 Ventil
 
 
Во Флориде и в Королевстве сейчас  06:23[Войти] | [Зарегистрироваться]
Ответ на вопрос № 43477

26-06-2006 06:35
Приветствую знатоков.
может быть кто-то решал такую проблему.
в listView отрисовываю все сам. в некоторых колонках стоят "checkbox" (только картинка).
задача: если уже выделены пункты и выполняется клик левой мышкой над "checkbox-ами" надо чтобы селект не снимался + выполнялось действие над выбранными строками, независимо от того куда помещен курсор (на выделенную строку или нет).
если делать по mousedown то вначале listview меняет селект пунктов, а потом вызывает событие onmousedown.
пока едиственный способ который я смог придумать - это перехват сообщений application (onMessage), но похоже что я с этим на долго зависну.
есть ли другой способ ?
спасибо за помощь.

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

27-06-2006 09:44
я как раз и сделал первый вариант. только у меня он получился намного сложнее в плане пересчета координат.
второй действительно более интересный. такой способ я еще не применял.
спасибо.

27-06-2006 02:52
Ничего особо сложного в перехвате сообщений нет.



function TForm1.ListViewLMouseDown(X, Y: Integer; Shift: TShiftState): boolean;
begin
  // Если кликнули по checkBox, возвращаем true. Я проверяю тупо, ты сделай более правильные проверки.
  result:=(X>8) and (X<16);
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
  if not ListView1.Focused then exit;

  if Msg.message=WM_LBUTTONDOWN then begin
      Handled:=ListViewLMouseDown(LoWord(Msg.lParam), HiWord(Msg.lParam), KeysToShiftState(Msg.wParam));
  end;
end;




Но мне нравиться немного другой вариант, с переопределением ListView1.WindowProc

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldLVWndProc:=ListView1.WindowProc;
  ListView1.WindowProc:=ListViewWndProc;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ListView1.WindowProc:=OldLVWndProc;
end;



procedure TForm1.ListViewWndProc(var Message: TMessage);
begin
  if Message.Msg=WM_LBUTTONDOWN then begin
    if ListViewLMouseDown(TWMLButtonDown(Message).XPos,
                      TWMLButtonDown(Message).YPos,
                      KeysToShiftState(TWMLButtonDown(Message).Keys)) then exit;
  end;

  OldLVWndProc(Message);
end;


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Вода мокрая или сухая?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопрос? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Хостинг предоставлен компанией DOTNETPARK

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации.
    Все используемые на сайте торговые марки являются собственностью их производителей.
    Яндекс цитирования