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

Вниз

Созадать иконку (ico) на WinApi   Найти похожие ветки 

 
ORMADA ©   (2005-05-12 08:02) [0]

Добрый день !
Скажу сразу вынь апи знаю плохо.. очень плохо, фактически не знаю. Потому и возникают вопросы.
Написал я маленькую программу которая делает иконку в трее и не фига больше не делает. Захотел всунуть свою иконку в трей
делаю это так..

     
FIcon := CreateIcon;
try
 IconData.hIcon := FIcon.Handle;
 DecodeDateFully(Now, FYear, FMonth, FDay, FDOW);
 StrPCopy(IconData.szTip, IntToStr(FDay) + " " + AllMonths[FMonth] + #13 + DaysOfWeek[FDOW]);
 Shell_NotifyIcon(NIM_ADD, @IconData);
finally
 FreeAndNil(FIcon);
end;

для этого использую такую функцию

function CreateIcon: TIcon;
var
 IconSizeX: integer;
 IconSizeY: integer;
 AndMask: TBitmap;
 XOrMask: TBitmap;
 IconInfo: TIconInfo;

 Icon: TIcon;
 Day: string[2];
begin
 IconSizeX := 16;
 IconSizeY := 16;

 AndMask := TBitmap.Create;
 try
   AndMask.Monochrome := true;
   AndMask.Width := IconSizeX;
   AndMask.Height := IconSizeY;

   AndMask.Canvas.Brush.Color := clBlack;
   AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));

   XOrMask := TBitmap.Create;
   try
     XOrMask.Width := IconSizeX;
     XOrMask.Height := IconSizeY;

     XOrMask.Handle := LoadBitmap(HInstance, PAnsiChar("DOFW" +          IntToStr(DayOfWeek(Now))));
     XOrMask.Canvas.Font.Name := "Arial";
     XOrMask.Canvas.Font.Color := clWhite;
     XOrMask.Canvas.Font.Style := [fsbold];
     XOrMask.Canvas.Font.Size := 8;

     XOrMask.Canvas.Brush.Style := bsClear;

     Day := IntToStr(DayOf(Now));
     if Length(Day) = 1 then Day := "0" + Day;

     XOrMask.Canvas.TextOut(2, -2, Day);

     Icon := TIcon.Create;
     try
       IconInfo.fIcon := True;
       IconInfo.xHotspot := 0;
       IconInfo.yHotspot := 0;

       IconInfo.hbmMask := AndMask.Handle;
       IconInfo.hbmColor := XOrMask.Handle;

       Icon.Handle := CreateIconIndirect(IconInfo);

       Result := TIcon.Create;
       Result.Assign(Icon);
     finally
       Icon.Free;
     end;
   finally
     XOrMask.Free;
   end;

 finally
   AndMask.Free;
 end;
end;

но чтоб её использовать приходиться добавлять в юсес Graphics, а не хотелось бы...
как можно сделать без использования Graphics ?
заранее благодарен..


 
MBo ©   (2005-05-12 08:14) [1]

Windows.CreateIcon(Indirect)


 
VMcL ©   (2005-05-12 08:18) [2]

Уберите в CreateIcon создание TIcon и возращайте просто результат функции CreateIconIndirect. В вызывающей подпрограмме: IconData.hIcon := CreateIcon;

P.S. Удалять иконку посредством DestroyIcon, но после того, как она перестанет использоваться.


 
ORMADA ©   (2005-05-12 09:43) [3]

а как исчо тады объявить  
AndMask и XOrMask ? чтобы можно было рисовать на канве или может как то по другому на ней рисовать ?


 
ORMADA ©   (2005-05-13 07:23) [4]

как объявить AndMask и XOrMask чтобы можно было рисовать на канве или может как то по другому на ней рисовать ?
мне надо самому нарисовать иконку, потом следовательно передам нарисованное CreateIconIndirect


 
MBo ©   (2005-05-13 08:45) [5]

В MSDN есть пример для CreateIcon


 
ORMADA ©   (2005-05-13 09:21) [6]

в мсдн

hIcon3 = CreateIcon(hinst,    // application instance  
            32,              // icon width
            32,              // icon height
            1,               // number of XOR planes
            1,               // number of bits per pixel
            ANDmaskIcon,     // AND bitmask  
            XORmaskIcon);    // XOR bitmask

это понятно... я делаю также, практически..
вопрос сейчас в том как обхявить And и XOR битовые маски чтоб на них можно было рисовать или как то по другому рисовать ?


 
ORMADA ©   (2005-05-13 09:24) [7]

т.е. сейчас необходимо как то подготовить битовые маски раньше делал так

var
AndMask: TBitmap;
XOrMask: TBitmap;
............
AndMask.Canvas.Brush.Color := clBlack;
AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));

XOrMask := TBitmap.Create;
try
XOrMask.Width := IconSizeX;
XOrMask.Height := IconSizeY;

XOrMask.Handle := LoadBitmap(HInstance, PAnsiChar("DOFW" +          IntToStr(DayOfWeek(Now))));
XOrMask.Canvas.Font.Name := "Arial";
XOrMask.Canvas.Font.Color := clWhite;
XOrMask.Canvas.Font.Style := [fsbold];
XOrMask.Canvas.Font.Size := 8;
XOrMask.Canvas.Brush.Style := bsClear;

Day := IntToStr(DayOf(Now));
if Length(Day) = 1 then Day := "0" + Day;

XOrMask.Canvas.TextOut(2, -2, Day);

т.е. рисовал на канве если выкинуть graphics то у виндушного (модуль Windows) канвы нету :(


 
VMcL ©   (2005-05-13 11:22) [8]

>у виндушного (модуль Windows) канвы нету

Канвы нету, но есть DC - Device Context.


 
ORMADA ©   (2005-05-13 13:34) [9]


var
 CompatibleDC: HDC;
 hdcScreen: HDC;
...
 hdcScreen := CreateDC("DISPLAY", nil, nil, nil);
 CompatibleDC := CreateCompatibleDC(hdcScreen);

потом
 TextOut(CompatibleDC, 2, -2, "12", 2);
 AndMask := CreateCompatibleBitmap(CompatibleDC, 16, 16);
...
 IconInfo.hbmMask := AndMask;
 IconInfo.hbmColor := XOrMask;
CreateIconIndirect(IconInfo);

но когда создаю иконку "12" там нету, почему ?


 
MBo ©   (2005-05-13 14:11) [10]

>ORMADA ©   (13.05.05 13:34) [9]
Слушай, давай ты сначала книжки почитаешь - сначала Петцольда, потом, если будет потребность глубже разобраться, Фень Юаня, непременно соответствующие разделы MSDN изучишь (или хотя бы Саймона прочитаешь), узнаешь о принципах функционирования GDI (где в контексте выбирается битмап, а уже потом рисование идет), а потом посмотрим, какие вопросы останутся, а какие сами отпадут. ОК?


 
ORMADA ©   (2005-05-13 14:43) [11]

:( MSDN есть а вот книжек к сожалению нету...



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

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

Наверх





Память: 0.48 MB
Время: 0.033 c
14-1118053014
Vlad Oshin
2005-06-06 14:16
2005.07.11
ЗАВТРА. 1. нареч. На следующий день после сегодняшнего.


9-1111760763
Gamemaker
2005-03-25 17:26
2005.07.11
Помогите найти DelphiX!


14-1118729210
Rouse_
2005-06-14 10:06
2005.07.11
Репортажик о отдыхе в Костроме


3-1117627480
Aljona
2005-06-01 16:04
2005.07.11
Ttable иedit


3-1117530104
Hereticsoul
2005-05-31 13:01
2005.07.11
TTable





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский