powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
9 сообщений из 9, страница 1 из 1
Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
    #39877590
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у TListBox сменить стиль на lbOwnerDrawVariable, то при клике по пустому пространству (после последней строки) происходит OnSelectionChange и выделяется последняя строка в списке.
Помогите разобраться где это происходит и как перекрыть.

Ковыряюсь в customlistbox.inc ...

как будто из-за этого
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function TCustomListBox.ItemAtPos(const Pos: TPoint; Existing: Boolean
  ): Integer;
begin
  Result := GetIndexAtXY(Pos.X, Pos.Y);
  if Existing then
  begin
    if Result >= Items.Count then
      Result := -1;
  end else
  begin
    if (Result < 0) and (Result > Items.Count) and PtInRect(ClientRect, Pos) then
      Result := Items.Count;
  end;
end; 



но где ItemAtPos вызывается не нашел. тем более с параметром Existing = False
...
Рейтинг: 0 / 0
Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
    #39877612
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ставь брейкпойнт
...
Рейтинг: 0 / 0
Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
    #39877672
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,

отладчик туда не заходит.
наверно какая-то опция есть типа как в делфи Use Debug DCUs
...
Рейтинг: 0 / 0
Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
    #39877747
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пересобрал Lazarus по профилю IDE в режиме отладки.
в общем, ItemAtPos не вызывается вовсе. перекрыл Click, inherited вообще закомментировал
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure TMyListBox.Click;
var
  P: TPoint;
  I: Integer;
  R: TRect;
begin
  P := ScreenToClient(Mouse.CursorPos);
  I := ItemAtPos(P, True);

  if I < 0 then
    Exit;

  R := ItemRect(I);
  if not R.Contains(P) then
    Exit;

  //inherited Click;  

OnClick теперь, как и ожидалось, не работает.
Но OnSelectionChange 1х выполняется и ItemIndex меняется.
...
Рейтинг: 0 / 0
Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
    #39877771
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost WriterНо OnSelectionChange 1х выполняетсяСтавь брекпойнт сюда и по стеку смотри откуда вызвали
...
Рейтинг: 0 / 0
Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
    #39877787
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

да я уже посмотрел

#0 LMSELCHANGE(0x1a72828, 0) at include\customlistbox.inc:314

Код: pascal
1.
2.
3.
4.
5.
procedure TCustomListBox.LMSelChange(var TheMessage);
begin
  if [csLoading,csDestroying,csDesigning]*ComponentState<>[] then exit;
  DoSelectionChange(FLockSelectionChange = 0);
end;


сообщение приходит отсюда
interfaces\win32\ win32callback.inc ( 2116 ,45) LBN_SELCHANGE: LMessage.Msg := LM_SELCHANGE;

Я так понимаю, всё происходит в недрах Windows, а не LCL. И решение пока не вижу.
...
Рейтинг: 0 / 0
Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
    #39877809
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost WriterИ решение пока не вижу.
ты его не там ищешь :)
Задай лучше здесь , а еще лучше здесь . Наверняка сразу получишь осмысленный ответ
...
Рейтинг: 0 / 0
Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
    #39877843
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,
лет ми спик фром май харт. май инглиш вери бед ))
да и не вижу уже смысла в форум лазаря.
проверил в Delphi 7 / 10.2 - TListBox ведёт себя также. Так что проблема не в лазарусе.
...
Рейтинг: 0 / 0
Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
    #39877931
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writerмай инглиш вери бед ))
Хм, ай юзинг гугл транслейтер ту. Подумаешь :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]