2012-06-12 4 views
0

위의 일부 속도 버튼을 사용하여 TCustomRichEdit을 생성하려고합니다. 이 동작을 어떻게 수행 할 수 있습니까? 구성 요소의 높이는 버튼 + 리치 헷트 일 필요가 있습니다.TCustomRichEdit 위에 속도 버튼 추가

private 
    FBoldButton: TSpeedButton; 

constructor TA1RichEdit.Create(AOwner: TComponent); 
begin 
    inherited Create(AOwner); 

    FBoldButton := TSpeedButton.Create(Self); 
    FBoldButton.Parent := Self; 
end; 

destructor TA1RichEdit.Destroy; 
begin 
    FreeAndNil(FBoldButton); 

    inherited; 
end; 

이합니다 (리치 에디트는 부모 때문에), 나는 리치 에디트 이상이어야 버튼을 필요로하는 리치 에디트에 speedbutton 페인트 :

[B][I][U] 
+-------+ 
|A1REdit| 
|  | 
+-------+ 

현재 나는 다음과 같은 코드가 있습니다. 이 코드 조각을 따라야하는 것처럼 부자가 페인트 자체를 페인트하지 않습니다.

+2

부자와 버튼이 자식으로 표시되는 패널 만들기 – whosrdaddy

+3

'TToolbar'는 나에게 맞는 해결책처럼 들립니다. 그러나 리치 헷드를 툴바 (또는 버튼)의 부모로 사용할 수는 없습니다. 다른 컨테이너가 필요합니다. 패널, 툴바 (alTop), 리치 에디트 (alClient)로 구성됩니다. –

+1

관련 : http : // stackoverflow.com/questions/10902749/is-it-wise-to-create-composite-controls –

답변

5

TToolbar을 사용하십시오.

TImageListTActionList도 양식에 넣으십시오.

ImageList를 ActionList 및 ToolBar에 할당하십시오.

그러면 ActionList ("새 작업"버튼의 드롭 다운 메뉴)에 소위 표준 액션을 추가 할 수 있습니다.

Format 카테고리에서 TRichEditBold, TRichEditItalicTRichEditUnderline을 찾을 수 있습니다. 해당 항목을 선택하고 OK을 클릭하십시오.

그런 다음 툴바에 3 개의 툴 버튼을 추가하고 툴바에 액션을 할당합니다.

이 상태의 항목을 선택하고 자동으로 굵게, 기울임 꼴 또는 밑줄로 설정하면 모든 코드를 쓰지 않고 처리됩니다.

+0

(코드에서 제공하는 클래스 이름을 기반으로합니다.) 질문은 richedit 위의 툴바로 구성 요소를 만드는 것에 관한 것입니다.) downvoting하지,하지만 당신이 질문을 잘못 읽은 것 같아요. :-) –

+1

나는 오해하지는 않았지만 내 제안은 사실상 아무런 이익이 없기 때문에 부작용 자체에 버튼을 추가하는 대신에 이렇게하는 것입니다. 워렌이 지적한대로 프레임을 사용하면 작업이 꽤 잘되고 구성 요소처럼 동작합니다. –

+0

이것은 내 질문에 대한 답변이 아니라 내 문제에 대한 최상의 솔루션입니다. 나는 이것을 다음과 같이 할 것이다. – A1rPun

2

프레임 만들기를 고려하십시오. 프레임은 "복합 컨트롤"을 만드는 일반적인 방법이며 코딩이 필요하지 않습니다.이 경우 폼 디자이너와 속성 관리자 만 사용하면됩니다.

파일 -> 새로 만들기 -> 프레임 (파일 -> 새로 만들기 -> 기타를 클릭하고 새 항목 메뉴에없는 경우 프레임을 찾아야 할 수도 있음)을 클릭하십시오.

이제 버튼과 리치 편집을 추가하십시오. Rich Edit의 Anchors를 Top + Left + Right + Bottom으로 설정하십시오 (모두 4 개 On).

이제이 "프레임"을 응용 프로그램의 아무 곳에 나 배치 할 수 있으며 단일 컨트롤처럼 작동합니다.

프레임에 대해 마음에 들지 않는 점은 프레임 편집을 인스턴스화 한 사람을 막을 수 없다는 것입니다. 기본적으로 프레임 안의 컨트롤을 이동하고 컨트롤을 추가 할 수 있습니다. 사실, Frames에 대한 종류의 고통.

두 번째 방법은 "복합 컨트롤"입니다. TPanel에서 상속 받고 RIch Edit와 단추를 추가하여 코드로 작성하십시오. 높이와 레이아웃 코드는 원하는대로 작성할 수 있습니다. 차이점과 제안한 점은 Rich Edit에 다른 컨트롤이 포함되도록하려는 것인데, David이 분명히 말했듯이 가능하지 않습니다.

+0

질문은 코드 샘플의 클래스 이름을 기반으로 구성 요소 (프레임이 아님)를 만드는 것에 관한 것입니다. 프레임은 훌륭하지만 모든 경우의 구성 요소를 대체하지는 않습니다. –

+0

다른 해결책으로 워렌에게 감사드립니다.) – A1rPun

+0

동의. 그러나 아마도 사용자는 실제로 프레임과 같은 재사용을 원합니다. 여러 개의 개별 시각 구성 요소 (컨트롤)로 구성된 "복합 구성 요소"를 시각적으로 만듭니다. –

관련 문제