2012-01-27 4 views
3

이것은 매우 간단한 문제처럼 보입니다. 그러나 스크롤바를 표시하기 위해 스크롤 상자를 가져올 수 없으며, 그것이 나를 미치게합니다.TScrollBox에 스크롤 막대가 표시되지 않는 이유는 무엇입니까?

여기 상황이 있습니다. 폼의 일부에 다양한 프레임 수를 표시해야합니다. 이러한 프레임이 표시되는 영역은 TSplitter를 통해 또는 양식의 크기를 조정하여 크기를 조정할 수 있습니다.

양식을 만들 때 데이터베이스의 레코드를 기반으로 프레임을 동적으로 생성하고 있습니다. 이 프레임은 프레임 배치를 담당하는 FlowPanel을 부모로 사용합니다. FlowPanel은 ScrollBox에 있습니다.

FlowPanel 때문에 사용자가 TSplitter를 사용하거나 양식의 크기를 조정하면 프레임 자체가 다시 정렬 될 수 있습니다. 어떤 프레임이 폼의 뷰에서 벗어나면 ScrollBox에 스크롤 막대가 표시되어 사용자가 액세스 할 수없는 프레임까지 스크롤 할 수 있습니다. 이것은 일어나지 않습니다. 스크롤 박스의 크기를 벗어난 flowpanel 영역에있는 프레임은 액세스 할 수 없습니다.

스크롤 상자에 간단한 개체를 사용하여 몇 가지 테스트를 작성했으며 스크롤 상자는 포함 된 개체가 스크롤 상자의 크기를 벗어난 경우 스크롤 막대를 올바르게 배치합니다.

스크롤 패널이 clClient (스크롤 상자)에 정렬되거나 스크롤 상자의 측면에 고정되어 있는지 여부는 중요하지 않습니다.

대신 TPanel을 사용할 수 있으며 패널의 OnResize 이벤트 핸들러에서 프레임의 배치 및 위치 재 지정을 수행 할 수 있다는 것을 알고 있지만 FlowPanel의 용도입니다.

여기 무슨 일 이니? 나는 많은 다른 scrollbox 속성으로 주변을 둘러 보았지만 여전히 작동시킬 수는 없습니다. 무엇이 문제이며 해결책이 있습니까?


확인. 저는 Ewe의 답을 옳은 것으로 선택하고 있지만,이 작업을 만드는 데있어서의 속임수는 그의 의견 중 하나였습니다. 그리고 나는 여전히 결과로 완전히 만족하지 못했습니다.

여기가 특종입니다. 나는 ScrollBox와 FlowPanel을 Ewe가 제안한 방식으로 구성했지만 구성이 제대로 작동하지 않았기 때문에 여러 가지 설정으로 재생했습니다. 나는 이것이 폼의 사용자 인터페이스의 복잡성 때문에, 패널에 많은 패널을 가지고 있고, 많은 스플리터가 있고, 폼 자체가 PageControl의 TabSheet에 부모가되어 있다고 확신한다. (필자는 폼을 스탠드로 테스트 한 이후 생략했다. 혼자서도 같은 결과가 나왔다.)

흐릿한 방식이긴하지만 효과가있는 것은 Ewe의 제안으로 FlowPanel의 자동 고침 기능을 껐다가 다시 켜거나 끕니다. 크기 조절시

procedure TCurrentJobsForm.ScrollBox1Resize(Sender: TObject); 
begin 
    Flowpanel1.Autowrap := False; 
    FlowPanel1.AutoWrap := True; 
end; 

눈에 띄는 깜박임이 있지만, 원하는 결과를 생성하기 때문에 나는 그와 함께 살 수 : 나는 스크롤 박스의하여 onResize 이벤트 처리기에 다음 코드를 추가했습니다. 사용자가 양식의 크기를 조정하면 해당 크기를 사용하여 항상 다시 작성되므로 크기 조정은 사용자가 자주 수행하지 않는 작업입니다.

답변

7

스크롤 상자는 콘트롤이 보이는 사각형을 초과 할 때만 스크롤바를 표시합니다. 스크롤 박스 내부의 유일한 컨트롤은 플로우 패널이므로 클라이언트가 스크롤 박스 내부의 플로우 패널을 정렬하는 데 도움이되지 않습니다. 이렇게하면 항상 스크롤 패널의 크기와 동일하게되므로 스크롤이 필요하지 않습니다.

f.i.수직 스크롤, flowpanel 상단 정렬 및 자동 크기를 확인하십시오. 더 많은 프레임이 내부에 배치되면 플로우 패널 높이가 더 커야합니다.

경우에 따라 수직 스크롤 막대의 Visible 속성이 true로 설정되어 있는지 확인하십시오.

+0

TFlowPanel은 이제 clTop에 맞춰지고 VertScrollBar.Visible 속성은 True로 설정됩니다. 그건 그걸하지 않았어. 사실, FlowPanel은 컨트롤을 다시 위치시키지 않았으며, 수평 또는 수직 스크롤바도 나타나지 않습니다. 길을 따라 속성을 엉망으로 만든다면 flowpanel과 scrollbox를 삭제하고 새로운 인스턴스를 배치했습니다. ScrollBox는 alClient에, AutoScroll은 True로, VertScrollBar.Visible은 True로 정렬됩니다. FlowPanel Align이 alTop로 설정되면 AutoSize가 True입니다. 아직도 기쁨이 없습니다. 스크롤바가 나타나지 않고 flowpanel이 흐르지 않습니다. 흠. –

+0

완벽하게 작동합니다. 자동 크기 조절 옵션을 사용하면 스크롤 상자의 크기를 조절할 때 스크롤바와 아무런 관련이없는 컨트롤의 순서가 변경되는 것을 방지 할 수 있습니다. 스크롤 상자의 크기가 조정 된 후 AutoWrap을 false로 전환하고 true로 되돌릴 수 있습니다. –

+0

나는 귀하의 대답이 올바른 것이라고 믿고, 다른 누군가가 해결책을 찾지 못하면 다음 날에 그것을 받아 들일 것입니다. 나는 아직도 문제가있다. 그러나 나의 형태는 복잡하다. 그것은 8 개의 패널, 4 개의 스플리터, 4 개의 DBGrids, 그리고 20 개의 프레임 (플로우 패널에 있음)을 가지고 있습니다. FlowPanel은 다른 패널에서 Client와 정렬 된 ScrollBox 위에 있습니다. ScrollBox가있는 동일한 패널에는 상단에 정렬 된 다른 패널이 있습니다. 내 간단한 테스트가 작동하지만이 테스트 중 어느 것도이 특정 폼의 복잡성을 복제하지 못합니다. –

1

필자는 Autosize를 true로 설정하지 않았습니다.
스크롤 패널에 플로우 패널이 있습니다. 흐름 평면 정렬이 leftRightTopBottom으로 설정됩니다. formresize 이벤트에

나는이 작업을 수행 :

procedure TForm2.FormResize(Sender: TObject); 
var 
i,h:integer; 
begin 
h:=0; 
for i:=0 to FlowPanel1.ControlCount - 1 do 
    h:=Max(FlowPanel1.Controls[i].BoundsRect.Bottom,h); 
ScrollBox1.VertScrollBar.Range:=h; 
end; 

큰 작동합니다.

0

나는 비슷한 문제가 있었고 @ Mark의 코드를 적용하여 해결했습니다. 당신이 FlowPanel1하고 Form1ScrollBox1을 고려할 때, 당신은 시도 할 수 있습니다 :

  • alClientScrollBox1Align 속성을 설정;
  • FlowPanel1ScrollBox1에 넣으십시오.
  • FlowPanel1FlowStyle 속성을 fsLeftRightTopBottom으로 설정하십시오.

는 이제 Form1OnResize 이벤트, 단지 할에 :

procedure TForm1.FormShow(Sender: TObject); 
var 
    I: Integer; 
    VButton: TButton; 
begin 
    for I := 1 to 10 do 
    begin 
    VButton := TButton.Create(FlowPanel1); 
    VButton.Parent := FlowPanel1; 
    VButton.Name := 'Button' + I.ToString; 
    VButton.Height := 200; 
    VButton.Width := 200; 
    end; 
end; 

는 아래 그림과 결과를 참조하십시오

FlowPanel with scroll bars

HTH를.

0

TScrollBox를 작동시키려는 모든 노력이 실패했지만, TFlowPanel을 AutoSize 및 AutoWrap과 함께 삭제하고 Orientation = soVertical 인 TPageScroller로 alTop로 정렬하는 것이 좋았습니다. 스크롤이 계속되었습니다.

페이지 목록의 눈에 띄기 위해 페이지 컨트롤러의 ButtonSize를 사용하고 싶을 수도 있습니다. 18 옳은 것처럼 보입니다.

관련 문제