Domanda

Sto cercando di creare con Delphi un componente ereditato da TLabel, con alcuni elementi grafici personalizzati aggiunti su TLabel.Paint. Voglio che la grafica sia sul lato sinistro del testo, quindi ho scavalcato GetClientRect:

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

Questa soluzione presenta un grosso problema che vorrei risolvere: non è possibile fare clic nell'area " grafica " del controllo, solo area dell'etichetta. Se la didascalia è una stringa vuota, non è possibile selezionare il componente in Designer facendo clic su di esso. Qualche idea?

È stato utile?

Soluzione

All'inizio mi scusi per il mio cattivo inglese.
Penso che non sia una buona idea Cambiare ClientRect del componente. Questa proprietà / informazione viene utilizzata per molti metodi e procedure interni al componente ed è possibile modificare la funzione / il funzionamento del componente.

Penso che puoi cambiare il punto per scrivere il testo (20 pixel nella procedura DoDrawText -in esempio-) e il componente può rispondere agli eventi nell'area grafica.

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;

Altri suggerimenti

Quali metodi / funzionalità stai ottenendo da TLabel per cui hai bisogno di questo componente?

Forse sarebbe meglio fare un discendente di (diciamo, TImage) e disegnare il tuo testo come parte del suo metodo di disegno?

Se deve davvero essere un discendente di TLabel (con tutto ciò che ciò comporta), penso che rimarrai bloccato con questo problema in fase di progettazione, poiché TLabel non ha questo problema comunque quando la didascalia è vuota?

Sarò interessato alle altre risposte che otterrai! : -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top