Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

Как сделать фон картинкой в TListView?   Найти похожие ветки 

 
nester ©   (2003-06-17 21:08) [0]

Господа. Не подскажет ли кто, как в качестве фона подложить картинку в TListView. Если предложите через Canvas, то подскажите как эту картинку нарисовать под текстом, а не поверх него.
Заранее благадарю.


 
Song ©   (2003-06-17 21:19) [1]

WM_ERASEBKGRND


 
Ученик ©   (2003-06-17 21:55) [2]

uses
CommCtrl;

procedure TForm1.FormShow(Sender: TObject);
begin
ListView_SetBkColor(ListView1.Handle, CLR_NONE);
ListView_SetTextBkColor(ListView1.Handle, CLR_NONE);
ListView1.Brush.Bitmap := Image1.Picture.Bitmap;
end;


 
nester ©   (2003-06-17 22:23) [3]

Так работает, но только без XP-ишного стиля, в XP-ишном стиле глючит, как это пофиксить?


 
Ученик ©   (2003-06-17 22:28) [4]

>nester © (17.06.03 22:23)
А в чем глюк, у меня XP, и не глючит


 
nester ©   (2003-06-17 22:39) [5]

А ты файл manifest к своей программе создавал? попробуй:)))
А глюк в том, что появляется фон черного цвета под каптином


 
Ученик ©   (2003-06-17 22:42) [6]

>nester © (17.06.03 22:39)
Манифест, естественно, подключен, а вот что такое "каптин" увы не знаю, что это ?


 
Makhanev A.S. ©   (2003-06-18 02:29) [7]

Наверное nester имел ввиду Caption"ы ListItem"ов


 
nester ©   (2003-06-18 07:20) [8]

Да, именно их и имею в виду:)) Проблема возникает когда я создаю файл стиля XP. в часности sat.exe.manifest - после этого, если сделать так, как предложил Ученик, возникает фон черного цвета под Caption ListItem"a а под SubItem не возникает. Вот это блин мне и не нравиться. Я пробовал на customdrawitem вешаться, тут размер шрифта, его цвет, наклонность менять могу, а цвет бэкграунда надписей не получается.:(( делаю так:
ListViewResults.Canvas.TextFlags:= ListViewResults.Canvas.TextFlags - ETO_CLIPPED;
Но у меня такое ощущение, что нужно не вычесть, а помоему проксорить или типа того.


 
nester ©   (2003-06-19 10:23) [9]

А кроме ListViewResults.Canvas.TextFlags:= ListViewResults.Canvas.TextFlags - ETO_CLIPPED Есть еще способы изменить стиль писания текста? и всетаки тут нужно - или or ставить?


 
DVM ©   (2003-06-19 14:41) [10]

Вот так можно:

procedure SetBackGroundImage(hListView:THandle; ImagePath:string);
var
BKImage: PLVBKImage;
BKSize: LongInt;
sI:string;
begin
CoInitialize(nil);
sI:=ImagePath;
BKSize:= SizeOf(TLVBKImage);
GetMem(BKImage, BKSize);
BKImage.pszImage:=Pchar(sI);
BKImage.cchImageMax:=StrLen(PChar(sI));
BKImage.ulFlags := LVBKIF_SOURCE_URL Or LVBKIF_STYLE_TILE;
ListView_SetBkImage(hListView,BKImage);
FreeMem(BKImage, BKSize);
end;


 
DVM ©   (2003-06-19 14:43) [11]


> Song © (17.06.03 21:19)
> WM_ERASEBKGRND

Ну, ну. Советую попробовать. Не получится.


 
nester ©   (2003-06-21 19:33) [12]

Почему??? А обосновать, еще не пробовал, но щас попробую


 
Song ©   (2003-06-21 21:30) [13]

DVM, а что у Вас за тон странный такой? Давно уже заметил. Если не в духе, можете не посещать конференцию.

Пожалуйста, посмотрите, правда на Дельфи было лень переделывать:

class MyListView : public TListView
{
public:
Graphics::TBitmap *BrushBmp;
__fastcall MyListView(AnsiString Path, TComponent *Owner);
__fastcall ~MyListView();
private:
void __fastcall WmEraseBkgnd(TMessage& Message);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_ERASEBKGND,TMessage,WmEraseBkgnd);
END_MESSAGE_MAP(TListView)

};
__fastcall MyListView::MyListView(AnsiString Path, TComponent *Owner) : TListView(Owner)
{
BrushBmp = new Graphics::TBitmap();
BrushBmp->LoadFromFile(Path);
}

__fastcall MyListView::~MyListView()
{
delete BrushBmp;
}

void __fastcall MyListView::WmEraseBkgnd(TMessage& Message)
{
if( BrushBmp == NULL ) return;
HDC hDC = (HDC)Message.WParam;
TCanvas *Canvas = new TCanvas();
Canvas->Handle = hDC;
Canvas->Brush->Bitmap = BrushBmp;
Canvas->FillRect(Rect(0,0,this->ClientWidth, this->ClientHeight));
}

где-нибудь в тексте программы
MyListView *lw = new MyListView("bgnd.bmp", Form1);
lw->Width = 300;
lw->Height = 300;
lw->Parent = Form1;



 
nester ©   (2003-06-21 21:35) [14]

Извеняюсь, я хотел как можно более дружелюбно, просто компьютер не передает оттенков человеческого настроения и все воспринимаю надписи по разному, прошу прощения если обидел. А за совет спасибо


 
DVM ©   (2003-06-22 14:00) [15]


> Song ©

Извините, обидеть не хотел. Ей богу. Просто действительно не получилось бы если в WM_ERASEBKGRND попытаться отрисовать картинку на ListView. Выже не написали как рисовать и пр. Возникнет много проблем с отрисовкой итемов, надписей под ними, прокруткой. То, что вы написали будет работать после небольшой доработки. С этим я не спорю.

А насчет тона. Очень часто в этой конференции стал использоваться такой тон, который невольно начинаешь перенимать.




Страницы: 1 вся ветка

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
9-7283
MRB_SPB
2003-01-15 18:16
2003.07.03
PlayStation2


1-7511
A
2003-06-21 16:54
2003.07.03
Свойство компонента ListBox


1-7434
delphimun
2003-06-20 13:10
2003.07.03
Выполнение программы при открытии в данный момент модального окна


14-7718
uw
2003-06-17 16:49
2003.07.03
Чудо на Садовом


1-7495
Subdigger
2003-06-17 12:01
2003.07.03
pointer