From 199d0ffa85fbefc77f3be2ef90df9cf7e2d199d2 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 4 Aug 2026 19:30:54 +0300 Subject: [PATCH] =?UTF-8?q?ui(tx):=20=D1=82=D1=80=D0=B5=D1=83=D0=B3=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=B8=D0=BA=20=D0=BF=D0=B8=D0=BB=D1=8E=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=BE=D1=84=D0=B8=D0=BB=D1=8F=20=D0=B2?= =?UTF-8?q?=D1=8B=D1=80=D0=BE=D0=B2=D0=BD=D0=B5=D0=BD=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=D0=BF=D0=B8=D1=81=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Треугольник центрировался по прямоугольнику пилюли, а текст — по TextHeight, который включает выносные элементы вниз. В подписи одни заглавные, они сидят в верхней части бокса, поэтому треугольник визуально проваливался: по пикселям текст занимал строки 7..13, треугольник 11..15. Считаем от метрики самой надписи (TxtY + TextHeight div 2 - 2), а не от бокса, чтобы выравнивание пережило смену шрифта или кегля. После правки текст 7..13, треугольник 8..12. Co-Authored-By: Claude Opus 5 --- VfoOverlay.pas | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/VfoOverlay.pas b/VfoOverlay.pas index b1f937d..804a649 100644 --- a/VfoOverlay.pas +++ b/VfoOverlay.pas @@ -1236,7 +1236,7 @@ procedure TVfoOverlay.DrawSelf(C: TCanvas; W, H: Integer); var FreqStr, SStr, BWStr, DMRStr, TxStr, PStr: string; CurY, X, RW, i, DMRX, DMRRight, TxRight, TxW: Integer; - ProfLeft, ProfRight, ProfW: Integer; + ProfLeft, ProfRight, ProfW, TxtY, TriY: Integer; R: TRect; Tri3: array[0..2] of TPoint; BarL, BarW, MeterX: Integer; @@ -1347,14 +1347,19 @@ begin C.Brush.Style := bsClear; while (Length(PStr) > 1) and (C.TextWidth(PStr) > ProfW - 14) do SetLength(PStr, Length(PStr) - 1); - C.TextOut(R.Left + 4, R.Top + (HDR_BADGE_H - C.TextHeight('A')) div 2, PStr); + TxtY := R.Top + (HDR_BADGE_H - C.TextHeight('A')) div 2; + C.TextOut(R.Left + 4, TxtY, PStr); // Треугольник «список» справа — рисуем, а не пишем: в Courier New - // юникодных стрелок может не оказаться. + // юникодных стрелок может не оказаться. Центрируем не по прямоугольнику + // текста, а по САМИМ буквам: TextHeight включает выносные элементы, а в + // подписи одни заглавные, они сидят в верхней части бокса — иначе + // треугольник визуально проваливается ниже надписи. + TriY := TxtY + C.TextHeight('A') div 2 - 2; C.Brush.Color := C.Font.Color; C.Brush.Style := bsSolid; C.Pen.Color := C.Font.Color; - Tri3[0] := Point(R.Right - 9, CurY + 5); - Tri3[1] := Point(R.Right - 3, CurY + 5); - Tri3[2] := Point(R.Right - 6, CurY + 9); + Tri3[0] := Point(R.Right - 9, TriY - 2); + Tri3[1] := Point(R.Right - 3, TriY - 2); + Tri3[2] := Point(R.Right - 6, TriY + 2); C.Polygon(Tri3); C.Font.Size := 8; RegisterHit(R, HIT_TXPROF);