Problem mit dem Hinzufügen von Grafiken zu TLabel
-
02-07-2019 - |
Frage
Ich versuche, mit Delphi eine Komponente aus TLabel, mit einigen benutzerdefinierten Grafiken hinzugefügt, um es auf TLabel.Paint geerbt zu erstellen. Ich möchte, dass die Grafiken auf der linken Seite des Textes sein, so dass ich overrode GetClientRect:
function TMyComponent.GetClientRect: TRect;
begin
result := inherited GetClientRect;
result.Left := 20;
end;
Diese Lösung hat großes Problem Ich mag lösen: Es ist nicht möglich, auf dem „Grafikbereich“ klicken der Steuerung nur Beschriftungsfeldes. Wenn die Beschriftung leere Zeichenkette ist, dann ist es nicht möglich, die Komponente in Designer auszuwählen, indem es überhaupt klicken. Irgendwelche Ideen?
Lösung
Auf dem ersten Vorwand-ich für mein schlechtes Englisch.
Ich denke, dass nicht eine gute Idee ist es, die ClientRect der Komponente ändern. Diese Eigenschaft / Information wird für viele Methoden und Verfahren Interna an Komponente verwendet, und Sie können die functionemnt / Betrieb des Bauteils verändern.
Ich denke, dass Sie den Punkt ändern können den Text (20 Pixel in den DoDrawText Verfahren -in Beispiel-) und die Komponente kann auf Ereignisse im Grafikbereich reagieren zu schreiben.
procedure TGrlabel.DoDrawText(var Rect: TRect; Flags: Integer);
begin
Rect.Left := 20;
inherited;
end;
procedure TGrlabel.Paint;
begin
inherited;
Canvas.Brush.Color := clRed;
Canvas.Pen.Color := clRed;
Canvas.pen.Width := 3;
Canvas.MoveTo(5,5);
Canvas.LineTo(15,8);
end;
Andere Tipps
Welche Methoden / Funktionen sind Sie von TLabel bekommen, dass Sie diese Komponente benötigen, zu tun?
Möchten Sie vielleicht besser machen einen Abkömmling von (sagen wir, TImage) und ziehen Sie Ihren Text als Teil seiner Farbe Methode?
Wenn es wirklich bekam ein TLabel Nachkomme zu sein (mit allem, was dies mit sich bringt), dann denke ich, werden Sie mit diesem Entwurfszeit Problem stecken, als nicht der Fall ist TLabel dieses Problem sowieso, wenn die Beschriftung leer ist?
Ich werde in den anderen Antworten interessieren Sie erhalten! : -)