Главная страница
    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
2-1219413550
zoh
2008-08-22 17:59
2008.10.05
image&text


15-1218713820
cyborg
2008-08-14 15:37
2008.10.05
Алгоритм Ахо-Карасик


15-1218801331
_koha
2008-08-15 15:55
2008.10.05
Неприодалимые глюги ?


15-1218659598
Германн
2008-08-14 00:33
2008.10.05
Помогите, кто может! Сдать зачёт.


15-1218172225
Vlad Oshin
2008-08-08 09:10
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский