Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2010, 20:47   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию HBITMAP => DRAW

Люди, умоляю, объясните по-человечески!
Нахожу только разрозненную информацию и уже получил кашу в голове.

Я хочу научиться загружать файл (bmp) в HBITMAP ( http://msdn.microsoft.com/en-us/libr...45(VS.85).aspx ) и рисовать его на форме.

Просьба объяснить каждый шаг и его значение. Я самоучка.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 28.04.2010, 01:12   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вот примерчик
Код:
var H:HBITMAP;
    bm:BITMAP;//в принципе можно было локальной сделать.

procedure TForm1.FormCreate(Sender: TObject);
begin
 H:=LoadImage(GetModuleHandle(nil),'D:\coding\delphi\1.bmp',IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//грузим битмап
 if H=0 then ShowMessage(IntToStr(GetLastError()));//проверка
end;

procedure TForm1.FormPaint(Sender: TObject);
var M,DC:HDC;
begin
 DC:=GetDC(Handle);//берем контекст формы
 M:=CreateCompatibleDC(DC);//создаем временный контекст
 SelectObject(M,H);//применяем к нему наш битмап
 GetObject(H,sizeof(BITMAP),@bm);//берем данные битмапа
 BitBlt(DC,1,1,bm.bmWidth,bm.bmHeight,M,0,0,SRCCOPY);//рисуем битмап на контексте формы(используя ширину и высоту)
 DeleteDC(M);//стираем временный контекст
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 DeleteObject(H);//стираем наш битмап.
end;
не самый идеальный, но вполне рабочий
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 28.04.2010 в 02:00.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.04.2010, 10:49   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Код:
 bm:BITMAP;
Это случаем не TBitMap?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 28.04.2010, 11:22   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нет, это структура из windows.pas
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.04.2010, 11:30   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нет. TBitMap - это класс, а BITMAP это:
Цитата:
The BITMAP structure defines the type, width, height, color format, and bit values of a bitmap.

typedef struct tagBITMAP { // bm
LONG bmType;
LONG bmWidth;
LONG bmHeight;
LONG bmWidthBytes;
WORD bmPlanes;
WORD bmBitsPixel;
LPVOID bmBits;
} BITMAP;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2010, 15:07   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
LPVOID
Что это есть? Я не силен в Сипп.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 28.04.2010, 15:46   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
{ Bitmap Header Definition }
  PBitmap = ^TBitmap;
  {$EXTERNALSYM tagBITMAP}
  tagBITMAP = packed record
    bmType: Longint;
    bmWidth: Longint;
    bmHeight: Longint;
    bmWidthBytes: Longint;
    bmPlanes: Word;
    bmBitsPixel: Word;
    bmBits: Pointer;
  end;
  TBitmap = tagBITMAP;
  {$EXTERNALSYM BITMAP}
  BITMAP = tagBITMAP;
я же сказал откуда она.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.04.2010, 18:06   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Благодарю, буду расшифровывать суть действий.

Вот, кстати, нашел еще один способ рисования, он глобально отличается?
Код:
SendMessage(Handle , STM_SETIMAGE, IMAGE_BITMAP, BIT {HBITMAP});
Возник такой вопрос: а как изменять изображение от HBITMAP`а?
Знаю, что get и setpixel, но где в коде выше (пост 2) их вставлять?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Stilet; 29.04.2010 в 17:02.
Alex Cones вне форума Ответить с цитированием
Старый 28.04.2010, 20:56   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Вот, кстати, нашел еще один способ рисования, он глобально отличается?
это установка изображения компоненту, но я бы сказал, не совсем все таки рисование.

после SelectObject и до DeleteDC
используем временный контекст(M)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.04.2010, 00:25   #10
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Тебе нужно слегка мелкомягкую теорию проштудировать, чтобы каша рассосалась. Контекст устройства и все что с ним связано, как с ним работать, виды битмапов (DDB, DIB). А то что ты плюсами обозвал, это вроде как типы принятые в Windows, они непосредственно к С++ отношения не имеют. Короче нужно сделать шаг на одну ступеньку вниз по лестнице абстракции, и встать по колено в Windows API
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
где можно скачать corel draw x4 Полный ноль Помощь студентам 2 24.02.2011 11:06
Hbitmap из png zumm Мультимедиа в Delphi 1 27.03.2010 20:55
Рисование картинки методом Draw Nazar1994 Общие вопросы Delphi 2 21.11.2009 01:57
Работа для знающих corel draw Sanja Фриланс 2 22.10.2008 07:08
Corel Draw - рисунки после редактирования здорово увеличиваются Viteef Свободное общение 8 19.02.2008 09:16