Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-7439
ViJen
2003-06-23 14:07
2003.07.03
Все те же текстовые файлы


4-7757
STAINER
2003-05-02 01:42
2003.07.03
НЕ МОГУ СОЗДАТЬ COM-ОБЬЕКТ ЧЕРЕЗ CREATECOMOBJECT


1-7517
Rafik
2003-06-20 11:27
2003.07.03
DateTimePicker


3-7353
???
2003-06-10 16:26
2003.07.03
как нибудь можно синхронзировать 2 грида? обращение к одной базе


8-7565
hunter_
2003-03-20 18:33
2003.07.03
Проблема с TImage





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский