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