2010-04-18 6 views
2

작은 문제가 하나 있습니다. 일부 컨트롤을 동적으로 생성하고 TScrollbox 구성 요소에 배치합니다. 그러나 스크롤 상자가 보이면 사용자가 생성되고 배치 된 각 컨트롤을 명확하게 볼 수 있다는 것을 알게되었습니다. 그래서 많은 일이 끝나고 느린 것처럼 보입니다.TScrollBox에서 스크롤 막대를 다시 표시 한 후 표시하는 방법은 무엇입니까?

스크롤 상자를 숨기고 그 위에 모든 컨트롤을 생성 했으므로 훨씬 적은 시간과 깜박 거림이 필요하지 않았습니다. 그러나 여기에 문제가 있습니다. 실제로 스크롤 상자를 표시 할 때 폼의 크기를 조정할 때까지 해당 '스크롤 막대가 나타나지 않습니다. (스크롤 상자의 정렬은 alClient입니다.

해결 방법에 대한 아이디어가 있습니까?

시도했지만 다시 작동하지 않았습니다. 새로 고침이 작동하지 않았습니다.

당신에게

편집 감사합니다 내가 숨기고 스크롤 박스를 표시하는 방법을

TScrollBox(Form1.FindComponent('termai')).Visible:= false; 
for I := 0 to mazgas.GrafasPagalVarda(sActiveGrafas).Termai.Count - 1 do 
begin 
    fNaujasTermas(i,oHook); 
end; 
TScrollBox(Form1.FindComponent('termai')).Visible := true; 

위의 코드를 보여줍니다.
fNaujasTermas은 여러 트랙바, 이미지 및 수정이있는 패널을 생성합니다.

단계별 설명이 무엇인지 잘 모르겠습니다. 많은 컨트롤이있는 패널을 생성하고 ScrollBox를 부모로 설정하는 절차를 수행하기 만하면됩니다. 아무것도 생성하지 않고 스크롤 박스를 숨기고 모든 작업이 끝난 후에 다시 숨김을 해제하십시오.
아, 패널이 alTop으로 정렬되었습니다. 따라서 새 패널이 만들어져 스크롤 상자에 배치 될 때마다 맨 위에 표시되고 다른 모든 패널은 아래로 이동합니다. 나는이 문제를 재현하는 방법을 알고 있다고 생각 :

이것은 내가 자체가

pTermai := TScrollBox.Create(Self); 
pTermai.Parent := pLeft; 
pTermai.Align := alClient; 
pTermai.Name := 'termai'; 
pTermai.BorderStyle := bsNone; 
pTermai.VertScrollBar.Increment := 40; 

EDIT2 스크롤 박스를 생성하는 방법이다.
새 패널을 스크롤 상자에 추가 할 때 이미 해당 스크롤 상자에있는 모든 컨트롤의 전체 높이로 계산되지 않는 것으로 보입니다.

예를 들어 설명해주십시오. 1 Panel의 높이가 200px라고 가정 해 보겠습니다.
ScrollBox 높이가 300px입니다.

그래서 두 번째 패널의 절반이 보이지 않더라도 스크롤바는 스크롤바를 표시하지 않습니다. 하나 더 패널 = 600px 합계를 추가하면 scrollbox는 스크롤 막대를 보여 주며, 스크롤 막대는 3 개가 아닌 2 개 패널에서만 스크롤하는 것처럼 보입니다. 이러한 창을 스크롤하려고하면 값이 다시 계산되고 모든 것이 잘 표시됩니다.

그래서 주된 문제는 스크롤 상자 표시 스크롤 막대를 "시간상"으로 설정하여 패널을 반으로 자르지 않게하는 방법입니다.

+0

내가 D2009에 문제를 재현 할 수없는입니다. –

답변

4

스크롤 막대를 다시 요청하려면 스크롤에서 상속하는 Realign() 메서드를 호출하여 스크롤 막대 속성을 다시 계산하십시오. 아직 눈에 보이지 않는있는 동안 깜박임을 최소화하기 위해 당신과 같이,이 작업을 수행해야합니다

ScrollBox.Visible := False; 
try 
    // create your new panel ... 
finally 
    ScrollBox.Realign; 
    ScrollBox.Visible := True; 
end; 
0

의견에서 언급했듯이 문제를 재현 할 수 없습니다. 문제를 재현하는 방법에 대한 단계별 지침을 제공하면 도움이됩니다.

그러나 양식의 크기를 조정해도 문제가 해결된다고 말하면 단순히 양식의 크기를 조정하면 안됩니까? 어쩌면 SetWindowPos을 사용하여 0 픽셀의 크기를 조정할 수 있습니다. ScrollBox1.Perform(WM_VSCROLL, SB_PAGEUP, 0);을 사용해보십시오.

관련 문제