델파이 (2006)가 양자가되면 : 나는 당신이 그것을 관찰하는 방법에 따라 TToolBar와 TPanel 인 것처럼 보이는 "무언가"를 가지고 있습니다. 무슨 일이 일어나고 있는지 알고 싶습니다. 여기TPanel을 TToolBar에 추가하면 TPanel 또는 TToolButton이 생깁니 까?
그것을 만들고 어떤 일이 발생하는 방법은 다음 DFM
- 에서
TToolBar를라는 줄을 추가;
- 그 TToolBar에 TPanel을 넣습니다. 코드에서 런타임에
- 는 bar.Buttons는 []의 인덱스 내가
- bar.Buttons [I]에서에서 가정 해 봅시다 뷰의 컴파일러 포인트하는 TToolButton이다
- bar.Buttons [I] .ClassName과 = 'TPanel과'
- (bar.Buttons [I] TToolButton이다)에 해당 =하지만 즉 "로 호출을 최적화 컴파일러의 '밖으로;
- 사실 IsBarButton (bar.Buttons [i])은 IsBarButton 함수 (아래 정의 됨)에 대해 false입니다.
- 그것이 속성 '자막'을 갖는다 :
- bar.Buttons [I] .NAME 내가 디버깅 값 bar.Buttons [I]을의 점검 DFM
- 에 TPanel과 준 이름이며 실제 TToolButton에는
- 이 이상하게 없으며 TToolButton.Indeterminate (= true)와 같이 모든 속성이 있습니다.
IsToolButton :
그래서function IsToolButton(X : TObject) : boolean;
begin
Result := X is TToolButton;
end;
bar.Buttons [I] 모두이며 TToolButton ... 무슨 일이야 아닌가요?
(아래쪽 이야기는 내 TPanel을 정품 TToolButton과 구별하고 싶습니다.이 방법은 다소 hackish 한 방법으로 할 수 있습니다.이 질문에 대한 나의 궁극적 인 목표는 무엇이 실제로 일어나고 있는지를 이해하는 것입니다. 여기를 클릭하십시오.)
질문 : 무슨 일이 일어나고 있습니까? 하위 질문 : TToolBar에 TPanel을 추가하는 것이 합법적입니까?
감사합니다. 예를 들어 '캡션'속성이 TPanel에 대해 표시되었지만 다음 실제 TToolButton에는 표시되지 않는 등의 이상한 일들이있었습니다. 여기서 'OnStartDrag'속성 (중복 된)으로 대체되었습니다. Vegar가 썼을 때,이 TPanel은 저에게 약간의 문제를 가져올 것입니다 ... IDE가 맹목적으로 (겉으로보기) IDE를 TToolButton에 행복하게 던져 놓은 사실은 이미 저에게 약간의 떨림을줍니다. – user192472
다른 사람들과 마찬가지로 (그리고 나는 무시했다) ... –