![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите не получается вставить картинку из ресурса.
Код:
function MessageMainProcess(Handle: HWND; Msg: UINT; WParam: Integer; LParam: Integer): Integer;stdcall;
begin
Result:=0;
case msg of
WM_CREATE:
begin
{ ...}
end;
WM_PAINT:
begin
bmp:= LoadGIFRes(hInstance, 'button_next', 'GIF');//Загрузка *.RES
SelectObject(hdcMem, bmp);
BitBlt(a, 0, 0, 100, 100, hdcMem, 100, 100, SRCCOPY);
end;
WM_DESTROY:
begin
PostQuitMessage(0);
Exit;
end;
end;
Result:=DefWindowProc(Handle,Msg,WParam,LParam);
end; |
|
#2
|
||||
|
||||
|
Загрузку файла лучше делать в сообщении WM_CREATE.
Чтобы сказать почему не отрисовывается, нужно видеть часть кода. Откуда взялась переменная а, обычно это ps.hdc, как получена hdcMem? |
|
#3
|
|||
|
|||
|
Цитата:
надо попробывать, да и самому интересно переменные чем их обозвать, скажу честно что код выдрал из интернета, так как раньше не задовался этим вопросом, и по-этому не знаю. Может как раз вы госспода поможете разобраться. |
|
#4
|
||||
|
||||
|
Поможем, если более полный код будет. В частности указанные переменные интересуют.
|
|
#5
|
|||
|
|||
|
переменные
Код:
var hdcMem,a: THandle; bmp: hBitmap; |
|
#6
|
||||
|
||||
|
Так не пойдёт. Прежде чем использовать эти переменные их нужно инициализировать. Вот этот кусок кода интересует. Кстати, переменная a, не может быть типа THandle.
|
|
#7
|
|||
|
|||
|
delete ....
Последний раз редактировалось HTTqp, 19.01.2015 в 15:16. |
|
#8
|
|||
|
|||
|
Цитата:
вот как выглядил код изначально когда я его взял Код:
bb:=LoadBitmap(HInstance, 'D:\imgs\Новая папка (2)\image.bmp'); //bb -> HBITMAP a:=GetDC(Mwindow); //Mwindow -> CreateWindowEx SelectObject(hdcMem, bb); BitBlt(a, 0, 0, 100, 100, hdcMem, 100, 100, SRCCOPY); //a; hdcmem -> HDC |
|
#9
|
||||
|
||||
|
Начнём:
Код:
var
dc, memdc : HDC;
bmp, oldbmp : HBITMAP;
...
function MessageMainProcess(Wnd : HWND; Msg : UINT; wParam, lParam : Integer) : Integer; stdcall;
var
ps : PAINTSTRUCT;
begin
case Msg of
WM_CREATE :
begin
dc := GetDC(0);
memdc := CreateCompatibleDC(dc);
bmp := LoadGIFRes(hInstance, 'button_next', 'GIF');//Загрузка *.RES
oldbmp := SelectObject(memdc, bmp);
end;
WM_PAINT :
begin
BeginPaint(Wnd, ps);
BitBlt(ps.hdc, 0, 0, 100, 100, memdc, 0, 0, SRCCOPY);
EndPaint(Wnd, ps);
end;
WM_DESTROY :
begin
DeleteObject(SelectObject(memdc, oldbmp));
DeleteDC(memdc);
ReleaseDC(0, dc);
PostQuitMessage(0);
Exit;
end;
end;
Result := DefWindowProc(Wnd, Msg, wParam, lParam);
end; |
|
#10
|
|||
|
|||
|
Большое, спасибо. Наверное тему не стоит удалять. Думаю не только мне будет наглядным примером)
|
|
#11
|
|||
|
|||
|
а подскажите еще как отловить нажатие на вставленную картинку
Код:
WM_COMMAND:
begin
case loWord(wParam) of
{не знаю что здесь написать}: messageBox(Handle,'Сообщение','Имя константы',mb_ok);
end; |
|
#12
|
||||
|
||||
|
Отлов будет производится не при нажатии на картинку, а при нажатии на окно на котором оная картинка отрисована.
Код:
case Msg of
...
WM_LBUTTONDOWN :
...
end;Цитата:
|