Создавать за тебя прогу это дело неблагодарное, но могу кинуть кусок проги, где я делал динамически курсор в виде круга (как в фотожопе)
| Код | procedure newcursor; var l:integer; b:tbitmap;
AndMask : TBitmap; IconInfo : TIconInfo; i,j:integer; bit:tbitmap; begin l:=math.min(200, math.max(2,round(strtoint(edit3.text)*zoom))); //т.е. нахожу величину курсора... юзалось для создания иммитации величины кисти для разного зума (редактор графический был) bit:=tbitmap.create; bit.Width:=l; bit.Height:=l; bit.PixelFormat:=pf4bit; AndMask := TBitmap.Create; AndMask.Monochrome := true; AndMask.width:=l; AndMask.height:=l; AndMask.Canvas.Brush.Color := $ffffff; AndMask.Canvas.pen.Color:=$ffffff; AndMask.Canvas.FillRect(Rect(0, 0, bit.width, bit.height));
bit.Canvas.pen.color:=$0; bit.Canvas.Brush.Color:=$0; bit.Canvas.FillRect(Rect(0, 0, bit.width, bit.height)); bit.Canvas.pen.color:=$ffffff; bit.Canvas.ellipse(Rect(0, 0, bit.width, bit.height));
IconInfo.fIcon := true; IconInfo.xHotspot := 1; IconInfo.yHotspot := 1; IconInfo.hbmMask := AndMask.Handle; IconInfo.hbmColor := bit.Handle; cur:=CreateIconIndirect(IconInfo); // вот тут мы создали курсор... по сути дальше можешь не смотреть. Т.е. тебе нужно сделать редактор битмапок с возможным прозрачным цветом, а потом просто-напросто преобразовать результат в курсор (да по сути в иконку). AndMask.free; bit.Free; if brushmode_ then begin screen.Cursors[100]:=cur; MyControl.Cursor:=100; end else MyControl.Cursor:=crCross; end;
| |