Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
Sergey-2008
Member

Откуда:
Сообщений: 117
Доброе время суток форумчане,

В модуле объявил:

type
  TDBLookUpComboBoxHint = class(TCustomDBLookupComboBox)

  private
    FHint: THintWindow;

  protected
    procedure WMCTLCOLORLISTBOX(var Message: TMessage); message  ;
  end;
var
  Form2: TForm2;
  FMyLookUpComboBoxHint: TDBLookUpComboBoxHint;


Создал компонент и присвоил ему событие «OnMouseMove» компонента на форме «DBLookupComboBox»

procedure TForm2.FormCreate(Sender: TObject);
begin
  FMyLookUpComboBoxHint := TDBLookUpComboBoxHint.Create(self);
  with FMyLookUpComboBoxHint do
  begin
    Parent := self;
    FMyLookUpComboBoxHint.OnMouseMove := DBLookupComboBox1.OnMouseMove;
  end;
end;


и написал заготовку для обработки сообщения

procedure TDBLookUpComboBoxHint.WMCTLCOLORLISTBOX(var Message: TMessage);
begin
  FHint := ‘’;
end; 


А вот как теперь его отловить сообщение которое будет генерироваться пока водишь мышкой по выпадающему списку DBLookupComboBox1?
11 янв 19, 20:34    [21783275]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
ma1tus
Member

Откуда:
Сообщений: 615
Sergey-2008
procedure WMCTLCOLORLISTBOX(var Message: TMessage); message ;
1815252
11 янв 19, 20:52    [21783293]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
Sergey-2008
Member

Откуда:
Сообщений: 117
ma1tus,

да
у меня конечно стоит
procedure WMCTLCOLORLISTBOX(var Message: TMessage); message WM_CTLCOLORLISTBOX;
11 янв 19, 20:59    [21783303]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
Sergey-2008
Member

Откуда:
Сообщений: 117
и да, там не совсем то,
тамм не говорится о методе связи DBLookupComboBox1 и созданного "FMyLookUpComboBoxHint"
тем более у "DBLookupComboBox1" нет события отлавливающего перемещения мышки по выпадающему списку, а только по мамому компоненту.
11 янв 19, 21:07    [21783310]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
DimaBr
Member

Откуда:
Сообщений: 10808
WM_CTLCOLORLISTBOX
This message is sent to the parent window of a list box before Windows draws the list box.
11 янв 19, 23:51    [21783376]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
Sergey-2008
Member

Откуда:
Сообщений: 117
DimaBr,
хорошо,
а поскольку я сделал

FMyLookUpComboBoxHint.OnMouseMove := DBLookupComboBox1.OnMouseMove;


то, при выпадании списка DBLookupComboBox1, будет/должна вызываться процедура

procedure TDBLookUpComboBoxHint.WMCTLCOLORLISTBOX(var Message: TMessage);

?
в которой я и должен обрабатывать hint?
12 янв 19, 00:27    [21783390]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
DimaBr
Member

Откуда:
Сообщений: 10808
Причём здесь OnMouseMove и WMCTLCOLORLISTBOX ?
OnMouseMove - срабатывает когда мышка перемещается по FMyLookUpComboBoxHint
WMCTLCOLORLISTBOX - когда нужно перерисовать выпадающий список
12 янв 19, 01:18    [21783421]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
DimaBr
Member

Откуда:
Сообщений: 10808
Картинка с другого сайта.
12 янв 19, 01:37    [21783437]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
Sergey-2008
Member

Откуда:
Сообщений: 117
DimaBr,

Вот только интересно, почему у меня сообщение не отрабатывает, как у вас

procedure TDBLookUpComboBoxHint.WMCTLCOLORLISTBOX(var Message: TMessage);
begin
  case Message.Msg of
    WM_CTLCOLORLISTBOX:
                       begin
                         Form2.Caption := IntTostr(Random(1000));
                       end;
  end;
  inherited;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  FMyLookUpComboBoxHint := TDBLookUpComboBoxHint.Create(self);
  FMyLookUpComboBoxHint.FHint := THintWindow.Create(Self);
  with FMyLookUpComboBoxHint do
  begin
    Parent := self;
    FMyLookUpComboBoxHint.OnMouseMove := DBLookupComboBox1.OnMouseMove;
  end;
end;


или я что-то не доприсваивал, хотя в выпадающем списке DBLookupComboBox1, активная строка не подсвечивается, как ComboBox1
12 янв 19, 02:32    [21783450]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1974
Sergey-2008
интересно, почему у меня сообщение не отрабатывает, как у вас
Потому как полное отсутствие представления о том как работают компоненты и оконные контролы в винде. Пытаешься скрестить ежа с ужом - присвоение vcl-ного обработчика события никак не повлияет на виндовые мессаги если только сам их не спровоцируешь. Надо хорошенько подтянуть матчасть, прежде чем влезать в винапи
12 янв 19, 12:45    [21783543]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
Sergey-2008
Member

Откуда:
Сообщений: 117
white_nigger,

хорошо, накидайте мне пожалуйста пункты, которые мне нужно проработать, чтоб я сделал этот чертов хинт (если не сложно)
12 янв 19, 13:38    [21783569]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
DimaBr
Member

Откуда:
Сообщений: 10808
Вроде и код привёл, и картинку.
Скачайте готовый компонент и не мучайтесь
12 янв 19, 21:27    [21783797]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать WM_CTLCOLORLISTBOX DBLookupCombobox ом  [new]
Sergey-2008
Member

Откуда:
Сообщений: 117
DimaBr,
так то же для "ComboBox", а у меня "DBLookupComboBox" или суть одна и таже?
13 янв 19, 13:53    [21783986]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить