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

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

Как отобразить картинку на форме...


MSAlex ©   (2002-10-10 20:08:00) 

Как отобразить картинку на форме если есть только HBITMAP,
тоесть только указатель. Используя только модули Windows и Messages.
BitBlt непомагает таккакнажен hdc а у меня HBITMAP.
SelectObject(hdc,hbitmap) тоже ничего не даёт.
Чё делать?


Evgeny   (2002-10-12 07:30:00) [1]

msalex
> точнее нет времени, темболее я ленивый
Ну зачем тогда приведенный пример искажать? Ведь он был рабочий.

var
DC : HDC;
ps : TPaintStruct;
hdcCompat : HDC;

// Эти переменные локальные
BMP1 : HBITMAP;
// А эту переменную лучше сделать глобальной,
тогда Bitmap можно загрузить один раз на
стадии создания окна

WM_PAINT:
begin
DC := BeginPaint(Wnd, ps);
BMP1 := LoadBitmap(hInst, "Bitmap1");
hdcCompat := CreateCompatibleDC(DC);
SelectObject(hdcCompat, BMP1);
BitBlt(DC, 10, 30, 40, 20, hdcCompat, 0, 0, SRCCopy);
DeleteDC(hdcCompat);
EndPaint(Wnd, ps);
end;
Это будет работать.

BitmapDC:=CreateCompatibleDC( GetDC(Handle));
ReleaseDC(Handle, GetDC(Handle));

А в этих строчках ошибка. Получаемый и освобождаемый контекст разные.


msalex   (2002-10-11 21:35:00) [2]

k> но картинка всё ещё не выводится.

var

Handle: HWND; //окна
Bitmap1: HBITMAP;
BitmapDC: HDC;

...


BitMap1:=LoadBitmap(hInst,"Bitmap1");
BitmapDC:=CreateCompatibleDC(GetDC(Handle));
Bitmap1 := SelectObject(BitmapDC, Bitmap1);

...

WM_Paint:
begin
BitBlt(GetDC(Handle),10,30,40,20,BitmapDC,0,0,SRCCopy);
ReleaseDC(Handle,GetDC(Handle));
end;

...

Чё делать?


MSAlex   (2002-10-11 17:20:00) [3]

k > Thanks...

Evgeny > точнее нет времени, темболее я ленивый


k   (2002-10-11 14:10:00) [4]

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

var MemDC,WinDC:HDC;
OldHandle:HBITMAP;//старый Handle
WinDC := GetDC(Handle{окна});
MemDC := GetCompatibleDC(0);
OldHandle := SelectObject(MemDC, BMP);

BitBlt(WinDC, x, y, Width, Height, MemDC, 0,0,SRCCOPY);

SelectObject(MemDC,OldHandle);// наверное можно и без этого, но хуже не будет
ReleaseDC(Handle{окна}, WinDC);
DeleteDC(Memdc);


Evgeny   (2002-10-11 05:27:00) [5]

Нет конечно это очень хорошая идея сначала искать, а потом спрашивать. Жаль что не все это любят делать. Им бы на халяву - готовенькое. А то ведь мозги напрягать нет желания.


Suntechnic   (2002-10-10 22:51:00) [6]

Если только отобразить и не организовывать её пермещение(в смысле отрисовки какого-нибудь скачащего мячика), то проще всего для этих целей создать окно с именем класса "static" и стилем SS_BITMAP.


Ate   (2002-10-10 21:57:00) [7]

Судя по вопросу не на ФОРМЕ а на ОКНЕ.
Дык сделай себе ДС:=GetDC(хэндл окна),
Нарисуй
И не забудь его положить на место: ReleaseDC(хэндл окна, ДС)
А вообще - читай SDK, там СТОЛЬКО интересного!


Наверх

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