Форум: "Основная";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];
ВнизКак сделать фон картинкой в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c