Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Вниз

Конвертирование bmp в ico   Найти похожие ветки 

 
demon ©   (2008-08-18 04:44) [0]

Вот примерчик http://njg.890m.com/ico_bmp.zip
Но он написан с использованием модуля Graphics, подскажите как сделать на API?
От Tbitmap смог избавиться, а вот как скопировать часть bmp-шки с помощью API не разобрался.
Так что загвоздка в этой строчке:
XOrMask.Canvas.CopyRect(rect(0,0,16,16),tempBitmap.Canvas,rect(numberIcon*16,0,n umberIcon*16+16,16));
Как это сказать на API?


 
AlexanderMS ©   (2008-08-18 07:29) [1]


> Как это сказать на API?

Для начала посмотреть исходный код метода CopyRect. Там всё есть.


 
demon ©   (2008-08-18 13:23) [2]

Изучил. Там нужны HDC, а у меня есть HBITMAP, вобщем тупик...


 
Renegat ©   (2008-08-19 00:29) [3]

> вобщем тупик...

Блин! Мне бы ваш тупик!!!
Создаёте DC (CreateCompatibleDC фпомощь), и линкуете к нему ваш HBITMAP через SelectObject. Выводите. И не забудьте потом DC удалить.
ЗЫ: Телепатируя последующий вопрос "А что дальше?", отвечаю: дальше нужно курить Windows SDK (пункт главного меню Делфей в разделе Help) по ключевой фразе "Device Context Functions".


 
Германн ©   (2008-08-19 01:23) [4]


> Renegat ©   (19.08.08 00:29) [3]
>
> > вобщем тупик...
>
> Блин! Мне бы ваш тупик!!!
>

А в чём основная проблема?
:)


 
demon ©   (2008-08-24 03:05) [5]

Сделал вот так

procedure TForm1.Button1Click(Sender: TObject);
var
 IconInfo: TIconInfo;

 inDC,
 OutDC:hdc;

 Long_BMP,
 Mask_BMP,
 OutBmp : HBITMAP;

 OldInDC,
 OldOutDC: THandle;

begin

 Long_BMP := LoadBitmap(hInstance, "LONG_BMP");
 Mask_BMP := LoadBitmap(hInstance, "MASK");

 OutBmp   :=  CreateBitmap(16, 16, 2, 16, Nil);

 inDC     :=  CreateCompatibleDC( 0 );
 OutDC    :=  CreateCompatibleDC( 0 );

 OldInDC  :=  SelectObject( inDC, Long_BMP );
 OldOutDC :=  SelectObject( OutDC, OutBmp );

 StretchBlt( OutDC,
            0,
            0,
            16,
            16,
            inDC,
            0,
            0,
            16,
            16,
            SRCCOPY );

 IconInfo.fIcon := true;
 IconInfo.xHotspot := 0;
 IconInfo.yHotspot := 0;
 IconInfo.hbmMask  := Mask_BMP;
 IconInfo.hbmColor := OutBmp;
 Icon.Handle := CreateIconIndirect(IconInfo);

 // Зачем нужно это?
 SelectObject( OutDC, OldOutDC );
 SelectObject( inDC, OldInDC );

 DeleteObject(Long_BMP);
 DeleteObject(Mask_BMP);
 DeleteObject(OutBmp);

 DeleteDC( inDC );
 DeleteDC( OutDC );

 // проверяем
 Application.Icon := Icon;
 InvalidateRect(Application.Handle, nil, true);

end;


Это правильно?

А зачем нужны манипуляции с OldInDC и OldOutDC???


 
DVM ©   (2008-08-24 14:55) [6]


> demon ©   (24.08.08 03:05) [5]
>
> Сделал вот так
>

противоречит


> А зачем нужны манипуляции с OldInDC и OldOutDC???


Или это не ты сделал?


 
demon ©   (2008-08-24 18:49) [7]

Ну, я смотрел другие примеры, и отталкиваясь от них делал. Во всем разобрался, только не понял зачем перед удаленим DC нужны эти манипуляции.


 
DVM ©   (2008-08-24 21:48) [8]


> только не понял зачем перед удаленим DC нужны эти манипуляции.

SelectObject при выборе какого либо объекта GDI (кисть, перо, битмап и т.д.) в контекст окна, возвращает хэндл старого объекта. Принято по окончании манипуляций с DC окна возвращать все обратно. Тебя сбили с толку, наверное, неудачные имена переменных.

OldInDC  :=  SelectObject( inDC, Long_BMP );
OldOutDC :=  SelectObject( OutDC, OutBmp );

OldInDC  вероятно стоило бы называть hOldInBitmap, а OldOutDC - hOldOutBitmap или как то в этом духе


 
demon ©   (2008-08-25 13:37) [9]

Нет, мне просто непонятно зачем вообще старый хэнд, он ведь нигде не используеться...


 
DVM ©   (2008-08-25 14:48) [10]


> Нет, мне просто непонятно зачем вообще старый хэнд, он ведь
> нигде не используеться...

Затем, чтобы выбрать его обратно в контекст. Ибо объект не мы создавали, не нам и уничтожать.


 
demon ©   (2008-08-25 18:25) [11]

Почему не мы? а это

inDC     :=  CreateCompatibleDC( 0 );
OutDC    :=  CreateCompatibleDC( 0 );


 
Правильный$Вася   (2008-08-25 18:39) [12]


> Почему не мы? а это

old создавал не ты, ты его заменил на свои, но после нужно вернуть на место



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
3-1207230280
ANB
2008-04-03 17:44
2008.10.05
Оракл : как попользовать в запросе два with ?


15-1218525210
oldman
2008-08-12 11:13
2008.10.05
Последовательность действий при заправке кардриджа (лазер)


2-1219757900
Евгений Р.
2008-08-26 17:38
2008.10.05
Координаты компонента


4-1197378338
Игорь00
2007-12-11 16:05
2008.10.05
Static без мерцания


2-1219661561
aaaaa
2008-08-25 14:52
2008.10.05
посчитать слова





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский