Einzelnen Beitrag anzeigen

Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#1

TMyLabel - Refresh-Problem

  Alt 13. Feb 2007, 23:51
Hallo zusammen,

Ich habe kein kleines Problem mit einer (Zu Lernzwecken!) erstellten Komponente. Dass es auch einfacher mit einer von TLabel abgeleiteten Komponente geht, ist klar, nur möchte ich eben ein paar Dinge ausprobieren und dabei ist mir die Idee mit dieser einfachen grafischen Komponente gekommen. Das Erstellen und Anzeigen der Komponente funktioniert einwandfrei. Wird aber nun z.B. das Formular verkleinert und die Komponente etws verdeckt, dann "verschmiert" die Komponente beim erneuten vergrössern des Formulares. Ein "Repaint", "Update" etc. in der Paint-Routine hat nichts gebracht. Hoffe Ihr könnt mir weiterhelfen.

Delphi-Quellcode:
type
  TMyLabel = class(TCustomControl)
  private
    { Private-Deklarationen }
    FText : String;
    procedure SetFText(Value : String);

  protected
    { Protected-Deklarationen }
    procedure Paint; override;

  public
    { Public-Deklarationen }
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property Text : String read FText write SetFText;
    { Published-Deklarationen }
  end;

procedure Register;

implementation

constructor TMyLabel.Create(AOwner: TComponent);
begin
  inherited;
end;

destructor TMyLabel.destroy;
Begin
  inherited;
End;

procedure TMyLabel.SetFText(Value: string);
begin
  FText := Value;
  Invalidate;
end;

procedure TMyLabel.Paint;
begin
 
  inherited;

  // Falls in der IDE, dann getrichelten Rahmen anzeigen
  if csDesigning in ComponentState then
  begin
 
    Canvas.Brush.style := bsClear;
    Canvas.Pen.style := psDashDot;
    Canvas.Rectangle(0,0,width,height);

 
    canvas.TextOut((width - Canvas.TextWidth(FText)) div 2,(height - Canvas.TextHeight(FText)) div 2,FText);

    exit;
  end;

   // Zur Laufzeit einen Rahmen + Text in der Mitte anzeigen
   With Canvas do Begin;
    Canvas.Brush.Style := bsClear;
    Rectangle(Canvas.ClipRect);
    TextOut((width - Canvas.TextWidth(FText)) div 2,(height - Canvas.TextHeight(FText)) div 2,FText);
  End;

end;
SCRaT
Michael Kübler
  Mit Zitat antworten Zitat