2012-06-11 6 views
2

IDE에서 양식을 디자인 할 때 비 시각적 구성 요소 (예 : TMainMenus, TDatamodules)를 자유롭게 배치하고 배치 할 수 있습니다. 위치가 유지되므로 양식을 다시로드 할 때 이러한 구성 요소가 올바른 위치에 나타납니다.비주얼 델파이 구성 요소의 디자인 위치에 액세스하는 방법은 무엇입니까?

그러나 TComponent에는 Top 또는 Left 속성이 없습니다!

내 코드가 비 시각적 구성 요소의 '디자인 된 위치'에 어떻게 액세스 할 수 있습니까?

+0

@David, 잘 IDE는 "런타임 코드"입니다. 나는 그것이 쉽지 않을 것이라고 기대하고 있지만, 가능해야합니다. – Roddy

+2

왼쪽 위치에'LongRec (YourComponent.DesignInfo) .Lo'을 사용하고 상단에는'LongRec (YourComponent.DesignInfo) .Hi'를 사용하십시오. – RRUZ

+4

런타임 코드가 비 실시간 환경의 왼쪽 및 상위 속성에 액세스 할 수있는 이점은 무엇입니까? 시각적 구성 요소? –

답변

6

이것은 런타임에 액세스 할 수 있지만 일종의 해킹입니다. (주로 해킹과 같이 구현되기 때문입니다.)

Left 및 Top 속성은 Word 크기 값으로 설정되며 그 중 두 개는 TComponent.FDesignInfo이라는 긴 문자로 함께 묶입니다. DesignInfo 속성을 사용하여 값을 얻을 수 있습니다. 사용법을 살펴 보려면 TComponent.DefineProperties을보십시오.

+0

그건 제가 필요로하는 해킹입니다. 감사. – Roddy

+0

감사! 그러나이 값을 어떻게 설정할 수 있습니까? 일부 비 시각적 구성 요소의 위치를 ​​설정해야합니다. – user1580348

0

또한 :

  • 방법 (-100, -100)과 같은 점에 DesignInfo를 설정하는 방법?

목표 : 시각적 영역 밖으로 아이콘을 가져 와서 디자인 타임에 숨 깁니다.

참고 : 예를 들어 TComponent에서 직접 파생 된 간단한 시각적 구성 요소를 만드는 경우 매우 유용합니다. 매우 간단한 레이블을 사용합니다 (기울기는 항상 위쪽에 정렬되고 allways는 왼쪽 = 0, 위쪽은 자동 계산 됨, bla bla bla) .dfm 파일에 캡션 속성 만 저장합니다. 또한 모든 로컬 라이저는 해당 캡션 속성 만 볼 수 있습니다.

솔루션은 다음과 같이 코드를 ReadState을 무시하는 것입니다

procedure TMyComponent.ReadState(Reader:TReader); 
var 
    NewDesignInfo:LongRec; 
begin 
    inherited ReadState(Reader); 
    NewDesignInfo.Hi:=Word(-100); // Hide design-time icon (top position = -100) 
    NewDesignInfo.Lo:=Word(-100); // Hide design-time icon (left position = -100) 
    DesignInfo:=Longint(NewDesignInfo); // Set the design-icon position out of visual area 
end; 

희망의 도움을 다른 사람!

관련 문제