Установка стилей конца строки для холста. LineTo

Есть ли любой способ установить стиль для lineends для TCanvas. Метод LineTo? Это, кажется, принимает значение по умолчанию к округленным концам, который выглядит очень плохо для нескольких строк подряд различных цветов когда Pen. Ширина установлена на большое значение (например, 9).

Это похоже на это (округленные концы):

 ********........******
**********........******
**********........******
 ********........******

(где *, например, синий и. является желтым),

Это еще хуже, если две внешних линии проведены после средней строки:

 ********........******
**********......********
**********......********
 ********........******

Я хотел бы, чтобы это было похоже на это (прямые концы):

 ********........******
 ********........******
 ********........******
 ********........******

Перо, кажется, не предлагает установки для этого, и ни один не делает метод LineTo. Существует ли, возможно, API-функция окон, которую я мог назвать?

5
задан NineBerry 28 November 2019 в 12:45
поделиться

2 ответа

Возможно, ExtCreatePen помогает. Проверьте PS_ENDCAP_* и PS_JOIN_* флаги.

4
ответ дан 14 December 2019 в 19:28
поделиться

Пример кода от форум DelphiPraxis (немецкий язык)

procedure TForm1.FormCreate(Sender: TObject);
   var LogBrush:TLOGBRUSH;
begin
   ZeroMemory(@LogBrush, SizeOf(LogBrush));
   LogBrush.lbColor:=ColorToRGB(Canvas.Pen.Color);
   LogBrush.lbHatch:=0;

   DeleteObject(Canvas.Pen.Handle);
   Canvas.Pen.Handle:=ExtCreatePen(PS_Geometric or PS_Solid or PS_EndCap_Square or PS_Join_Miter, 10, LogBrush, 0, nil);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
   Canvas.MoveTo(0, 0);
   Canvas.LineTo(50, 50);
end; 
1
ответ дан 14 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: