Форум: "Основная";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
ВнизListView и фоновая картинка Найти похожие ветки
← →
tytus (2008-01-09 12:50) [0]Доброго дня мастера. Вот пытаюсь рисовать фоновую картинку на онном компоненте посредством сообщения LVM_SETBKIMAGE.
Исходные данные:
LV1 - TListView (но переделанный - перекрыта WndProc)
ViewStyle=vsReport, три столбца, якоря по всем углам
Image3 - TImage, в нем картинка bmp 206х25
LVBmp - TBitMap - для фоновой картинки
теперь процедура:
procedure TMainFm.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-10 12:32) [1]не интересно ? - ну и ладно....
← →
clickmaker © (2008-01-10 12:45) [2]
> [1] tytus (10.01.08 12:32)
на какой строке вылетает означенная ошибка?
← →
tytus (2008-01-10 18:31) [3]>clickmaker © (10.01.08 12:45) [2]
в том то и дело, что строка не подсвечивается.
(только не нужно говорить что ошибка в 17 стр -)))
← →
clickmaker © (2008-01-10 18:33) [4]
> [3] tytus (10.01.08 18:31)
да ладно. Отладочные галки включены? use debug dcu и иже с нею?
← →
tytus (2008-01-10 18:46) [5]>clickmaker © (10.01.08 18:33) [4]
первый раз о таком слышу... где это?
← →
clickmaker © (2008-01-10 18:50) [6]
> [5] tytus (10.01.08 18:46)
чё, правда?
так до второго пришествия можно баги ловить.
в project options - compiler
галки поставь, потом rebuild all
← →
tytus (2008-01-10 18:54) [7]>clickmaker © (10.01.08 18:50) [6]
нашел... подсветилась строка в модуле Graphics
в процедуре :
procedure InvalidGraphic(Str: PResStringRec);
begin
raise EInvalidGraphic.CreateRes(Str);
end;
что-то мне сдаеться, что проблема нерешаемая...
← →
clickmaker © (2008-01-10 18:59) [8]
> [7] tytus (10.01.08 18:54)
посмотри стек вызовов (call stack), откуда ноги растут
← →
tytus (2008-01-11 09:57) [9]>clickmaker © (10.01.08 18:59) [8]
посмотрел. Получается, что последние вызовы процедур в списке call stack начинаются сначала, тоесть в начале списка. На что обратить внимание? На процедуры, где вместо параметров знаки вопроса? К примеру вот такие строки:
TMainFm.LV1Resize(???);
...
TBkListView.WndProc(???);- это я написал компонент, добавив лишь сию процедуру:
procedure TBkListView.WndProc(var Message:TMessage);
begin
if Message.Msg=WM_ERASEBKGND then
DefaultHandler(Message)
else
inherited WndProc(Message);
end;
Самым первым в списке идет сообщение "Invalid Graphic ($425B88)".
Вот так, и что из этого мне может быть полезным?
← →
clickmaker © (2008-01-11 10:32) [10]ну если из OnResize вызывается только SetBkImage, то, видимо, ошибка при манипуляциях с одним из Image или Bitmap.
Invalid Graphic - исключение VCL, а не виндозного ListView, оберткой которого является TListView
← →
tytus (2008-01-11 11:12) [11]>clickmaker © (11.01.08 10:32) [10]
ок, будем разбираться со своей процедурой SetBkImage...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c