Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1219221012
Petr V. Abramov
2008-08-20 12:30
2008.10.12
Wifi


2-1220629617
New_ser
2008-09-05 19:46
2008.10.12
Как программно переместить курсор в Edit?


2-1220607629
lordalex
2008-09-05 13:40
2008.10.12
Старый добрый Excel


15-1219157629
int64
2008-08-19 18:53
2008.10.12
Вакансия. Delphi, MSSQL


15-1219085524
self.name
2008-08-18 22:52
2008.10.12
размер Record





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский