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?

War es hilfreich?

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! : -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top