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