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

Вниз

ListView_SetBkImage   Найти похожие ветки 

 
dsoft ©   (2008-02-19 01:02) [0]

Знает ли All как правильно работать с этой функцией? Сколько не пробовал не получается и поиск ничего не дал. Загружать картинки из файлов получается, теперь бы понять как загрузить из памяти. MSDN по этому поводу молчит, хотя такая возможность имеется.


 
DVM ©   (2008-02-20 12:13) [1]


> dsoft ©

Зачем тебе далась эта функция? Загрузи сам вручную любой битмап откуда хочешь и отрисуй его на ListView по приходу сообщения WM_ERASEBKGND.


 
dsoft ©   (2008-02-20 22:34) [2]

Так я могу и через указанную функцию загрузить, но не совсем удобно. Преимущество в том, что можно грузить все форматы которые понимает система, не используя дополнительных библиотек. А так разницы действительно никакой нет, что так фон скролируется, что так.


 
Sapersky   (2008-02-21 19:47) [3]

Можно и так загрузить любой формат, который понимает система, точнее, Explorer - см. OleLoadPicture.


 
dsoft ©   (2008-02-22 00:07) [4]

Я это знаю так как они использую один механизм, только один явно, а другой нет. Но это не ответ на вопрос.


 
Sapersky   (2008-02-22 14:20) [5]

MSDN по этому поводу молчит, хотя такая возможность имеется.

А это:
http://msdn2.microsoft.com/en-us/library/bb774742(VS.85,printer).aspx
ulFlags=LVBKIF_SOURCE_HBITMAP, в поле hbm указывается Handle битмапа.
Хотя практически - работает или нет - не проверял.


 
dsoft ©   (2008-02-22 20:19) [6]

Я эту страничку давно нашел, но почему то Мелкософт не удосужился привести пример, если просто подставить хэндл загруженного битмапа, то выдает ошибку. Возможно нужна какая-то комбинация флагов, но пока у меня ничего не получилось.


 
Lacmus ©   (2008-02-26 13:46) [7]



unit Unit7;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, ComCtrls, StdCtrls, Buttons;

type
 TListView = class(ComCtrls.TListView)
   procedure WMEraseBkgnd(var aMessage: TMessage); message WM_ERASEBKGND;
 end;

 TForm7 = class(TForm)
   ListView1: TListView;
   Image1: TImage;
   BitBtn1: TBitBtn;
   procedure BitBtn1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form7: TForm7;

implementation

{$R *.dfm}

uses
 CommCtrl, XPMan;

procedure TListView.WMEraseBkgnd(var aMessage: TMessage);
begin
 DefaultHandler(aMessage)
end;

procedure TForm7.BitBtn1Click(Sender: TObject);
var
 Image: TLVBKIMAGE;
begin
 FillChar(Image, SizeOf(Image), 0);
 Image.ulFlags := LVBKIF_SOURCE_HBITMAP;
 Image.hbm := Image1.Picture.Bitmap.Handle;
 ListView_SetBkColor(ListView1.Handle, CLR_NONE);
 ListView_SetBkImage(ListView1.Handle, @Image);
end;

end.


 
dsoft ©   (2008-03-01 23:54) [8]

Вообще я предполагал, что этот форум по WinAPI, но не суть важно. Не знаю каким образом проверялся приведенный код, но последнюю строчку стоит изменить на нечто подобное:

if not ListView_SetBkImage(ListView1.Handle, @Image) then
  MessageBox(0, "error", "error", MB_OK or MB_ICONERROR or MB_SYSTEMMODAL);


и глянуть на результат. Я думаю, комментарии будут излишне.

P.S. Да, причем тут XPMan, MSDN об этом умалчивает. Данная функция обязана работать и в Win98.


 
Lacmus ©   (2008-03-02 09:10) [9]

Код рабочий на Windows XP SP2, на Windows 98 работает LVBKIF_SOURCE_URL из файлов и ресурсов


 
dsoft ©   (2008-03-03 06:48) [10]


> Код рабочий на Windows XP SP2, на Windows 98 работает LVBKIF_SOURCE_URL
> из файлов и ресурсов


MSDN обещает работу и в Win98.
То что код по СУТИ рабочий видно и не вооруженным глазом, но что не РАБОЧИЙ по существу вот это значительнее.


 
dsoft ©   (2008-03-03 06:57) [11]


> Код рабочий на Windows XP SP2


Для проверки этого утверждения, переключился в WinXP. Код как не работал, так и не работает. Увы.


 
Аноним   (2008-03-20 01:01) [12]

Здраствуйте. А не подскажите ли как на чистом WinApi будет WM_ERASEBKGND сообщение? А то не проходит DefaultHandler(aMessage) без VCL. И заодно подскажите пожалуйста как поменять цвет выделенного элемента и текста в ListView при таком способе помещения в него изображения? А то хоть и указано LVM_SETTEXTCOLOR и LVM_SETTEXTBKCOLOR, а цвета не меняются. Спасибо. =)


 
DVM ©   (2008-03-20 20:55) [13]


> А не подскажите ли как на чистом WinApi будет WM_ERASEBKGND
> сообщение?

Так и будет. WM_ERASEBKGND


 
Аноним   (2008-03-31 00:01) [14]

Да нет... Я не про это. Что нужно вместо DefaultHandler(aMessage) прописать?
Например:

   WM_MEASUREITEM :
     begin
       DC := GetDC(hApp);
       lpmis:=Pointer(LParam);
       item:=Pointer(lpmis.ItemData);
       GetTextExtentPoint32(DC, item.text, StrLen(item.text), size);
       lpmis.itemWidth := size.cx - 18;
       lpmis.itemHeight := 18;
       ReleaseDC(hApp, DC);
     end;


На VCL видел много примеров где вконце функций часто вставляют этот самый DefaultHandler. Когда я просто указываю DefaultHandler, то компилятор ругается. Вот и хотелось бы узнать что надо прописать. =)


 
DVM ©   (2008-03-31 10:38) [15]


> Когда я просто указываю DefaultHandler

Надо вызывать DefWindowProc()



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

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

Наверх




Память: 0.5 MB
Время: 0.017 c
15-1231493354
Vainuu
2009-01-09 12:29
2009.03.15
Экзамен!!!!


15-1232005368
Jeer
2009-01-15 10:42
2009.03.15
Продукт Delphi Prism


15-1231283649
Alkid
2009-01-07 02:14
2009.03.15
Из системы "пропал" DVD-RW


2-1232518754
charoey_mag
2009-01-21 09:19
2009.03.15
Потоки и Indy


2-1232790296
Anton Shestakov
2009-01-24 12:44
2009.03.15
Вычисляемые поля