Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Pie в GDI+


Автор: Gwire 26.7.2011, 17:57
Делаю что-то типа кругового многосекторного прогресс-бара (внутри часный, снаружи общий прогресс)
Все рисую на канвасе используя GDI+. 
Все кроме отрисовки сектора. Использую стандартный Canvas.Pie. Выглядит не очень.

Вопрос:
Как нарисовать сектор в GDI+ ?

Автор: Gwire 26.7.2011, 18:29

Нашел такое "полурешение"
Код

procedure TForm1.FormPaint(Sender: TObject);
var G, P, W: Pointer;
begin
    GdipCreateFromHDC ( Canvas.Handle, G );
    GdipCreatePen1    ( aclRed, 1, UnitWorld, P );
    GdipCreatePath    ( FillModeAlternate, W );
    
    GdipAddPathPie( W, 0, 0, 200, 200, 0, 120 );
    GdipDrawPath( G, P, W );  // надо GdipFillPath

    GdipDeletePath    ( W );
    GdipDeletePen     ( P );
    GdipDeleteGraphics( G );
end;

"полурешение" потому что GdipFillPath по какойто причине не рисует.

Буду искать... Если знаете причину пишите.

Автор: Gwire 26.7.2011, 18:49
Нашел решение.
Нужно вместо КАРАНДАША ( GdipCreatePen1 ) создавать Шетку ( GdipCreateSolidFill )
Код

    GdipCreateFromHDC   ( Canvas.Handle, G );
    GdipCreateSolidFill ( aclRed, B);
    GdipCreatePath      ( FillModeWinding, W );

    GdipSetSmoothingMode ( G, SmoothingModeAntiAlias );
    GdipAddPathPie       ( W, 0, 0, 200, 200, 0, 120 );
    GdipFillPath         ( G, B, W );

    GdipDeletePath    ( W );
    GdipDeleteBrush   ( B);
    GdipDeleteGraphics( G );


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)