Question

J'essaie de créer avec Delphi un composant hérité de TLabel, auquel sont ajoutés des graphiques personnalisés sur TLabel.Paint. Je veux que les graphiques soient sur le côté gauche du texte, donc j'ai remplacé GetClientRect:

function TMyComponent.GetClientRect: TRect;
begin
  result := inherited GetClientRect;
  result.Left := 20;
end;

Cette solution pose un problème majeur que je voudrais résoudre: il n’est pas possible de cliquer sur la "zone graphique". du contrôle, seule la zone d'étiquette. Si la légende est une chaîne vide, il est impossible de sélectionner le composant dans le concepteur en cliquant dessus. Des idées?

Était-ce utile?

La solution

Au début, excusez-moi pour mon mauvais anglais.
Je pense que ce n'est pas une bonne idée. Modifiez le paramètre ClientRect du composant. Cette propriété / information est utilisée pour de nombreuses méthodes et procédures internes au composant et vous pouvez modifier le fonctionnement / l'opération du composant.

Je pense que vous pouvez modifier le point pour écrire le texte (20 pixels dans la procédure DoDrawText - dans l'exemple -) et que le composant peut répondre aux événements de la zone graphique.

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;

Autres conseils

Quelles méthodes / fonctionnalités obtenez-vous de TLabel pour lesquelles vous avez besoin de ce composant?

Seriez-vous peut-être mieux de faire un descendant de (par exemple, TImage) et de dessiner votre texte dans le cadre de sa méthode de peinture?

Si cela doit vraiment être un descendant de TLabel (avec tout ce que cela implique), alors je pense que vous serez bloqué par ce problème de conception, car TLabel n’a-t-il pas ce problème quand le libellé est vide?

Je serai intéressé par les autres réponses que vous obtiendrez! : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top