Форум: "WinAPI";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизЗагрузка и отображение картинки Найти похожие ветки
← →
Варяг © (2006-05-30 21:20) [0]как правильно загрузить картинку из ВМР файла или ресурса?
привожу свой код моэет кто знает в чем неправильный подход..
function CreateImg:LongInt;
begin
Result:=CreateWindow(
"STATIC",
nil,
WS_VISIBLE or WS_CHILD or WS_BORDER or SS_BITMAP
, // styles
250, // x
100, // y
100,//Width,
100,//Height
MyWnd,
Id_Btn1,
(HINSTANCE) ,
nil);
If Result=0 then
MessageBox(0,"Error of controls","",0);
Img:=result;
end;
....
img:= LoadBitMap(hInstance,"BITMAP")"Error",nil,0); -для ресурса
...
Img:=LoadImage(hInstance,PChar("c:\pic1.bmp"),IMAGE_BITMAP,
150,150,LR_DEFAULTSIZE ); -для ВМР
подозреваю что неверно выбран объект для отображени..
← →
Delphi_is_cool © (2006-05-31 20:21) [1]
> Варяг © (30.05.06 21:20)
> как правильно загрузить картинку из ВМР файла или ресурса?
По поводу ресурсов, если тип ресурса BITMAP, то стандартными ф-циями(LoadBitmap, LoadImage), а если ты загнал bmp в ресурс в виде RCDATA, то смотри здесь: http://delphimaster.net/view/4-1148709908/
Что касается загрузки из файла ... помоему придётся грузить вручную:
type
PBitmap_Info = ^TBitmap_Info;
TBitmap_Info = record
Width: LongInt;
Height: LongInt;
end;
function LoadBitmapFromFile(const FileName: String; lpBitmap_Info: PBitmap_Info) : HBITMAP;
var
pMem: Pointer;
DC, MemDC: HDC;
dwFileSize: LongWord;
BitmapInfo: TBitmapInfo;
hFile, hBmp: LongWord;
begin
Result := 0;
hFile := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hFile <> INVALID_HANDLE_VALUE then
begin
dwFileSize := GetFileSize(hFile, nil) - SizeOf(TBitmapFileHeader);
SetFilePointer(hFile, SizeOf(TBitmapFileHeader), nil, 0);
pMem := Pointer(LocalAlloc(LPTR, dwFileSize));
if pMem <> nil then
begin
if ReadFile(hFile, pMem^, dwFileSize, dwFileSize, nil) then
begin
DC := GetDC(0);
if DC <> 0 then
begin
MemDC := CreateCompatibleDC(DC);
if MemDC <> 0 then
begin
ZeroMemory(@BitmapInfo, SizeOf(TBitmapInfo));
CopyMemory(@BitmapInfo.bmiHeader, pMem, SizeOf(TBitmapInfoHeader));
if lpBitmap_Info <> nil then
with lpBitmap_Info^, BitmapInfo.bmiHeader do
begin
Width := biWidth;
Height := biHeight;
end;
hBmp := SelectObject(MemDC, CreateCompatibleBitmap(DC, 1, 1));
Result := CreateDIBitmap(MemDC, BitmapInfo.bmiHeader, CBM_INIT, Pointer(LongWord(pMem) + SizeOf(TBitmapInfoHeader)), BitmapInfo, DIB_RGB_COLORS);
DeleteObject(SelectObject(MemDC, hBmp));
DeleteDC(MemDC);
end;
ReleaseDC(0, DC);
end;
end;
LocalFree(LongWord(pMem));
end;
end;
CloseHandle(hFile);
end;
// Пример использования:
function CreateImage(const ParentHWnd: HWND; const X, Y, Width, Height: LongInt) : HWND;
begin
Result := CreateWindow("Static", nil, WS_CHILD or WS_VISIBLE or WS_BORDER or SS_BITMAP or SS_CENTERIMAGE, X, Y, Width, Height, ParentHWnd, 0, hInstance, nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hBmp: HBITMAP;
hImage: HWND;
Bitmap_Info: TBitmap_Info;
begin
hBmp := LoadBitmapFromFile("C:\1.bmp", @Bitmap_Info);
hImage := CreateImage(Handle, 50, 50, Bitmap_Info.Width, Bitmap_Info.Height);
SendMessage(hImage, STM_SETIMAGE, IMAGE_BITMAP, hBmp);
end;
← →
Варяг © (2006-06-01 23:05) [2]спасибо за ответ Delphi_is_cool
а то я уже надежду начал терять...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c