Что поменяли в LMPaint(WMPaint)?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Kon.pasc
новенький
Сообщения: 26
Зарегистрирован: 31.10.2009 16:45:38

Что поменяли в LMPaint(WMPaint)?

Сообщение Kon.pasc »

Отрисовываю кнопки своим кодом через LMPaint (WMPaint). Решил обновиться из СВН. Теперь код в LMPaint не работает :(.
За лето что-то поменяли и теперь всегда Msg.DC=0 и Msg.PaintStruct=nil. Кроме того, приложение бесконечно крутится в LMPaint, если не вызывать его inherited - но мне он нафиг не нужен.
Я или чего-то не знаю или это новый баг? Поиск по багтрекеру ничего не дал.
Вот код и пример в аттаче:

Код: Выделить всё

procedure TNewButton.LMPaint(var Msg: TLMPaint);
var
  _s: String;
begin
  inherited; {мне это не надо, Но если убрать, то LMPaint будет вызываться в бесконечном цикле;
  в revision 24474 работало без этого}

  if (Msg.DC<>0)and(Msg.PaintStruct<>nil) then begin
    {всегда Msg.DC=0 и Msg.PaintStruct=nil}
    {never go here in because Msg.DC=0 and Msg.PaintStruct=nil ALWAYS!}
    _s:='AAAAAAA';
    DrawText(Msg.DC, PChar(_s), Length(_s), Msg.PaintStruct^.rcPaint, DT_CENTER or DT_VCENTER or DT_END_ELLIPSIS);
  end;
  Msg.Result:=0;
end;
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Имхо, забросить бы это в багтрекер. Похожий баг когда-то давно был с виджетсетом QT, так что прецедент есть.
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

А почему вы не вешаетесь на "обычный" обработчик отрисовки? Или кнопка такого не предоставляет?
Kon.pasc
новенький
Сообщения: 26
Зарегистрирован: 31.10.2009 16:45:38

Сообщение Kon.pasc »

Timid писал(а):А почему вы не вешаетесь на "обычный" обработчик отрисовки?

Сейчас посмотрел - TButton и TCustomButton не имеют ни событий OnDraw ни методов отрисовки которые можно было бы переопределить.

Odyssey писал(а):Имхо, забросить бы это в багтрекер

Пойду заброшу. В ревизии 24474 всё работало.
Ответить