Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизСозадать иконку (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 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.052 c