Ręczne rysowanie TLabel

0

Chciałbym wyśrodkować tekst zarówno pionowo i poziomo. O ile sama środkowanie działa prawidłowo. To niestety sam napis wydaje się być pogrubiony i rozmazany. Co można z tym zrobić?
Dziekuję

Label34.Canvas.TextOut(Round((Label34.Width - Label34.Canvas.TextWidth(L34C)) / 2), Round((Label34.Height - Label34.Canvas.TextHeight(L34C)) / 2), L34C);
1

Przecież standardowy TLabel to wszystko potrafi, patrz właściwości: Alignment, Layout

1

Najpierw zamaluj wybranym kolorem to co już narysowała etykieta domyślnie, a dopiero później coś sam maluj; Czyli najpierw ustaw sobie kolor tła i je zamaluj, a dopiero później namaluj swój tekst:

with Label1.Canvas do
begin
  Brush.Color := clWhite;
  FillRect(ClientRect);

  Label1.Canvas.TextOut(10, 10, Label1.Caption);
end;

Powyższe kolory i współrzędne są przykładowe, więc podstaw w ich miejsce te odpowiednie;


A jeśli wszystkie etykiety na formularzu mają być w ten sposób malowane, to lepiej będzie nadpisać metodę Paint z klasy TLabel przed deklaracją klasy formularza:

interface

uses
  Forms, Graphics, StdCtrls;

type
  TLabel = class(StdCtrls.TLabel)
  public
    procedure Paint(); override; // nadpisujemy wirtualną metodę Paint
  end;

type
  TForm1 = class(TForm) // Twoja klasa formularza...
    Label1: TLabel; // ...ze wszystkimi etykietami
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

procedure TLabel.Paint(); // tu określasz nowe malowanie komponentu
begin
  with Self.Canvas do
  begin
    Brush.Color := clWhite;
    FillRect(Self.ClientRect);

    Canvas.TextOut(10, 10, Caption);
  end;
end;

end.

Dzięki temu już nic więcej nie będziesz musiał oprogramowywać, a komponent domyślnie będzie rysowany tak, jak sobie tego życzysz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1