Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как нормально вставить фоновый рисунок в ListView ? [D7, WinXP]


Midaw ©   (2004-02-08 00:36:00) 

Есть функция ListView_SetBKImage(..), но как она работает и вообще работает ли?


Acildex   (2004-03-02 11:53:00) [1]

Подскажите пожалуйста, как как сделать свою форму как Desktop.

Чтобы держать свою форму на заднем плане я делал так

TfmMain = class(TForm)
//...
 public
   { Public declarations }
 protected
   procedure xxx(var msg: TMessage); message WM_ACTIVATE;
 end;
//...

procedure TfmMain.xxx;
begin
 SendToBack;
end;

Вобщем работает, но не так как хотелось бы.


Midaw   (2004-02-29 22:09:00) [2]

Все верно, спасибо за ценные советы.
Еще вот какие есть параметры у функции Windows.DrawText(..), не могут найти русское описание этих самых параметров.


DVM   (2004-02-20 21:32:00) [3]

А, нет соврал я. Правильно так:

для текста под значками

ListView_SetTextBkColor(hListView, CLR_NONE);

и соответственно

ListView_SetBkColor(hListView, CLR_NONE);

для фона под значками.


DVM   (2004-02-20 21:27:00) [4]


> Прозрачного цвета ListView_SetBKColor не дает так как там
> можно указать только RGB Color

Слово TRANSPARENT волшебное не пробовал писать вместо цвета?


Midaw   (2004-02-20 21:21:00) [5]

Не плохо выглядит PaintDesktop(..)
Вообще спасибо за хорошие советы DVM.
Прозрачного цвета ListView_SetBKColor не дает так как там можно указать только RGB Color, пробовал по другому, а точнее менять режим Pen (Pen.Mode), но почему-то он не влияет.
Вот если бы он был в свойствах ListView
Также пробовал полностью перерисовать WMPaint ListView, но там проблема с функцией Canvas.TextRect(..), выводит рамку под текст, но самого текста вывести не хотит. А ведь самому писать  функцию прорисовки текста под значками довольно сложно, много ньюансов.


DVM   (2004-02-15 13:24:00) [6]


> думаю что это можно сделать только с помощью ListView_SetBKImage.
> Смысл сделать заменитель рабочего стола, без панелей задач,
> без двойного нажатия на иконки и т.д. и т.п.

можно и с ListView_SetBKImage и без него, дело не в этом.
Надо установить прозрачный цвет фона для иконок и подписей под ними.
попробуй так сделать для своего ListView;

WM_ERASEBKGND:
 begin
  PaintDesktop(wParam);
  result:=1;
 end;

Прозрачный цвет иконок вроде как ListView_SetBkColor() или вроде этого.


Midaw   (2004-02-13 19:39:00) [7]

Хочу чтобы иконки нормально отображались на фоне ListView,
думаю что это можно сделать только с помощью ListView_SetBKImage. Смысл сделать заменитель рабочего стола, без панелей задач, без двойного нажатия на иконки и т.д. и т.п.


VMcL   (2004-02-09 19:09:00) [8]

>>}{enon ©  (09.02.04 18:52) [7]

>вирус/кривой софт или ОС и т.д.)
Не пущу!!! :)

>По-моему мы начинаем флудить...
Во-во, пора уже в потрепаццццца.


}{enon   (2004-02-09 18:52:00) [9]


> Не так уж легко. Переустановка W2K - минимум где-то час

Легко устроить, а не сделать. Т.е. легко заставить кого-то переустановить windows несколько раз (вирус/кривой софт или ОС и т.д.)
P.S. По-моему мы начинаем флудить...


VMcL   (2004-02-09 18:27:00) [10]

>>}{enon ©  (09.02.04 18:17) [5]

Не так уж легко. Переустановка W2K - минимум где-то час :)


}{enon   (2004-02-09 18:17:00) [11]


> моему компу еще не исполнилась 16-я переустановка Windows!

Ну это легко исправить :)


VMcL   (2004-02-09 14:08:00) [12]

>>DeadMeat ©  (08.02.04 16:32) [3]

Нет! Я мне еще рано умирать, у меня иждивенцы: моему компу еще не исполнилась 16-я переустановка Windows!


DeadMeat   (2004-02-08 16:32:00) [13]

> [2] VMcL ©   (08.02.04 01:19)
Не обманывайте людей... Это не в System.iniнадо писать, а в реестре...
Да и вообще, это секретная информация... Разглашению не подлежит... Теперь придётся всех свидетелей убирать...


VMcL   (2004-02-08 01:19:00) [14]

>>Midaw ©  (08.02.04 00:36)
>Есть функция ListView_SetBKImage(..), но как она работает и вообще работает ли?

Не работает. Microsoft специально пишет функции, которые не работают. Вставь в system.iniстроку "bugs=off"


DVM   (2004-02-08 00:57:00) [15]

Работает она, но только почему-то с ListView, созданном без применения VCL.

procedure SetBackGroundImage(hImageList: HWND; 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;

Это будет работать только при наличии в системе IE.

Но проще отрисовать нужное изображение по  WM_ERASEBKGND. Тоже получается нормально.


Наверх

Титульная страница Поиск, карта сайта Написать письмо