Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ListView и фоновая картинка [D7, WinXP]


tytus ©   (2008-01-09 12:50:00) 

Доброго дня мастера. Вот пытаюсь рисовать фоновую картинку на онном компоненте посредством сообщения LVM_SETBKIMAGE.
Исходные данные:
LV1 - TListView (но переделанный - перекрыта WndProc)
  ViewStyle=vsReport, три столбца, якоря по всем углам
Image3 - TImage, в нем картинка bmp 206х25
LVBmp - TBitMap - для фоновой картинки
теперь процедура:
procedureTMainFm.SetBkImage;
var
 pw,ph,w,h:integer;
begin
pw:=Image3.Picture.Bitmap.Width;
ph:=Image3.Picture.Bitmap.Height;
w:=LV1.Width;
h:=LV1.Height;
LVBmp.Width:=w;
LVBmp.Height:=h;
StretchBlt(LVBmp.Canvas.Handle,0,0,w,h,
 Image3.Picture.Bitmap.Canvas.Handle,0,0,pw,ph,SRCCOPY);
FillChar(LVBKIMAGE,SizeOf(LVBKIMAGE),0);
LVBKIMAGE.ulFlags:=LVBKIF_SOURCE_HBITMAP or LVBKIF_STYLE_TILE;
LVBKIMAGE.hbm:=LVBmp.Handle;
LVBKIMAGE.pszImage:=nil;
LVBKIMAGE.xOffsetPercent:=0;
LVBKIMAGE.yOffsetPercent:=0;
SendMessage(LV1.Handle,LVM_SETTEXTBKCOLOR,0,CLR_NONE);
SendMessage(LV1.Handle,LVM_SETBKIMAGE,0,Integer(@LVBKIMAGE));
end;
Все рисуеццо нормально, но когда размер LV1 уменьшаеться так, что появляются полосы прокрутки (гор. к прим.) то вылетает ошибка "EInvalidGraphic with message Bitmap Image is not valid"
При увеличении контрола - все ОК.
Сию процедуру вызываю в обработчике OnResize LV1.
Вот прошу помощи в сем нелегком деле - как правильно рисовать фоновую картинку?


tytus   (2008-01-11 11:12:00) [1]

>clickmaker ©   (11.01.08 10:32) [10]
ок, будем разбираться со своей процедурой SetBkImage...


clickmaker   (2008-01-11 10:32:00) [2]

ну если из OnResize вызывается только SetBkImage, то, видимо, ошибка при манипуляциях с одним из Image или Bitmap.
Invalid Graphic - исключение VCL, а не виндозного ListView, оберткой которого является TListView


tytus   (2008-01-11 09:57:00) [3]

>clickmaker ©   (10.01.08 18:59) [8]
посмотрел. Получается, что последние вызовы процедур в списке call stack начинаются сначала, тоесть в начале списка. На что обратить внимание? На процедуры, где вместо параметров знаки вопроса? К примеру вот такие строки:
TMainFm.LV1Resize(???);
...
TBkListView.WndProc(???);- это я написал компонент, добавив лишь сию процедуру:
procedureTBkListView.WndProc( var Message:TMessage);
begin
if Message.Msg=WM_ERASEBKGND then
 DefaultHandler( Message)
else
  inheritedWndProc( Message);
end;
Самым первым в списке идет сообщение "Invalid Graphic ($425B88)".
Вот так, и что из этого мне может быть полезным?


clickmaker   (2008-01-10 18:59:00) [4]


> [7] tytus   (10.01.08 18:54)

посмотри стек вызовов (call stack), откуда ноги растут


tytus   (2008-01-10 18:54:00) [5]

>clickmaker ©   (10.01.08 18:50) [6]
нашел... подсветилась строка в модуле Graphics
в процедуре :
procedureInvalidGraphic(Str: PResStringRec);
begin
  raiseEInvalidGraphic.CreateRes(Str);
end;

что-то мне сдаеться, что проблема нерешаемая...


clickmaker   (2008-01-10 18:50:00) [6]


> [5] tytus   (10.01.08 18:46)

чё, правда?
так до второго пришествия можно баги ловить.
в project options - compiler
галки поставь, потом rebuild all


tytus   (2008-01-10 18:46:00) [7]

>clickmaker ©   (10.01.08 18:33) [4]
первый раз о таком слышу... где это?


clickmaker   (2008-01-10 18:33:00) [8]


> [3] tytus   (10.01.08 18:31)

да ладно. Отладочные галки включены? use debug dcu и иже с нею?


tytus   (2008-01-10 18:31:00) [9]

>clickmaker ©   (10.01.08 12:45) [2]
в том то и дело, что строка не подсвечивается.
(только не нужно говорить что ошибка в 17 стр -)))


clickmaker   (2008-01-10 12:45:00) [10]


> [1] tytus   (10.01.08 12:32)

на какой строке вылетает означенная ошибка?


tytus   (2008-01-10 12:32:00) [11]

не интересно ? - ну и ладно....


Наверх

Титульная страница Поиск, карта сайта Написать письмо