문제

Tlabel에서 상속 된 구성 요소 Delphi와 함께 Tlabel.Paint에 사용자 정의 그래픽이 추가되었습니다. 그래픽이 텍스트의 왼쪽에 있기를 원하므로 GetClientRect를 무시합니다.

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

이 솔루션은 내가 해결하고 싶은 큰 문제가 있습니다. 컨트롤의 "그래픽 영역"을 클릭 할 수는 없습니다. 캡션이 빈 문자열 인 경우 디자이너의 구성 요소를 전혀 클릭하여 구성 요소를 선택할 수 없습니다. 어떤 아이디어?

도움이 되었습니까?

해결책

처음에는 내 나쁜 영어에 대한 변명.
좋은 생각이 아니라고 생각합니다. 구성 요소의 클라이언트를 변경합니다. 이 속성/정보는 구성 요소의 많은 방법 및 절차 내부에 사용되며 구성 요소의 기능을 변경할 수 있습니다.

나는 당신이 텍스트를 쓸 수있는 지점을 변경할 수 있다고 생각합니다 (20 픽셀 DODRODTEXT 절차 -예를 들어) 및 구성 요소는 그래픽 영역의 이벤트에 응답 할 수 있습니다.

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;

다른 팁

이 구성 요소가 필요한 방법/기능을 tlabel에서 얻는 방법/기능은 무엇입니까?

아마도 당신은 아마도 (예 : 시계)의 후손을 만들고 페인트 방법의 일부로 텍스트를 그린 것입니까?

그것이 실제로 Tlabel 자손이되어야한다면 (이 모든 것이 수반되는 모든 것을 가지고 있음), 캡션이 비어있을 때 어쨌든이 문제를 겪지 않기 때문에이 설계 시간 문제에 갇힐 것이라고 생각합니까?

나는 당신이 얻는 다른 답변에 관심이 있습니다! :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top