Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 845
Если у TListBox сменить стиль на lbOwnerDrawVariable, то при клике по пустому пространству (после последней строки) происходит OnSelectionChange и выделяется последняя строка в списке.
Помогите разобраться где это происходит и как перекрыть.

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

как будто из-за этого
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
17 окт 19, 12:04    [21996359]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange  [new]
Cobalt747
Member

Откуда:
Сообщений: 2128
ставь брейкпойнт
17 окт 19, 12:22    [21996388]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 845
Cobalt747,

отладчик туда не заходит.
наверно какая-то опция есть типа как в делфи Use Debug DCUs
17 окт 19, 13:28    [21996497]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 845
пересобрал Lazarus по профилю IDE в режиме отладки.
в общем, ItemAtPos не вызывается вовсе. перекрыл Click, inherited вообще закомментировал
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 меняется.
17 окт 19, 15:06    [21996624]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11263
Ghost Writer
Но OnSelectionChange 1х выполняется
Ставь брекпойнт сюда и по стеку смотри откуда вызвали
17 окт 19, 15:51    [21996679]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 845
_Vasilisk_,

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

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

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. И решение пока не вижу.
17 окт 19, 16:17    [21996721]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange  [new]
Док
Member

Откуда: Казань
Сообщений: 6460
Ghost Writer
И решение пока не вижу.

ты его не там ищешь :)
Задай лучше здесь, а еще лучше здесь. Наверняка сразу получишь осмысленный ответ
17 окт 19, 16:56    [21996754]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 845
Док,
лет ми спик фром май харт. май инглиш вери бед ))
да и не вижу уже смысла в форум лазаря.
проверил в Delphi 7 / 10.2 - TListBox ведёт себя также. Так что проблема не в лазарусе.
17 окт 19, 17:51    [21996813]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus. TListBox lbOwnerDrawVariable OnSelectionChange  [new]
Док
Member

Откуда: Казань
Сообщений: 6460
Ghost Writer
май инглиш вери бед ))

Хм, ай юзинг гугл транслейтер ту. Подумаешь :)
17 окт 19, 21:42    [21996957]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить