고객의 방문기록을 화면에 보여주는 루틴을 만들고 있습니다.
방문일자별로 필요한 내용에 ListView, richedit등의 컴포넌트로 표현하기 위해
TCategoryPanelGroup을 이행해서 해당일자별로 동적으로 패널을 생성하게 했습니다.
procedure TfrTreatList.LoadTreatList(var AList: TValueList);
var
newPanel: TCategoryPanel;
Loop : integer;
begin
pnlgrTreat.Visible := False;
for Loop := 0 to AList.Count-1 do
begin
newPanel := pnlgrTreat.CreatePanel(self) as TCategoryPanel;
NewPanel.Caption := AList.Strings[Loop];
newPanel.Tag := Integer(AList.Objects[Loop]);
newPanel.Height := 350;
newPanel.Collapsed := True;
newPanel.OnExpand := CategoryPanelExpand;
end;
pnlgrTreat.Visible := True;
end;
1. 여기서 문제점이 동적으로 패널을 생성하니 패널이 생성될때마다 화면이 갱신되어서 깜빡임이 심하네요
그래서 pnlgrTreat.Visible := False; 구문을 넣어봤는데 그래도 패널그룹의 스크롤바는 여전히 보이면서
계속 깜빡이면서 생성됩니다. 다른 그리드나 리스트뷰 컴포넌트에 보면 BeginUpdate, EndUpdate같은
함수를 지원해줘서 이런 현상이 없었는데 TCateogryPanelGroup은 이런 함수가 없는것 같네요.
어떻게하며 화면이 깜빡이지 않고 패널들을 동적으로 생성할 수 있을까요?
2. 또 하나 질문하고 싶은거는 저렇게 동적으로 패널을 생성하면 화면이 마지막에 생성한 패널이 보여지는데
당연히 TCateogryPanelGroup의 스크롤바도 제일 아래로 내려와 있고요.
전 패널목록에서 제일윗부분이 화면이 보여지게 하고 싶은데 어떻게 해야 할지 모르겠습니다.
패널 생성이 끝나면
pnlgrTreat.HorzScrollBar.Position := 0;
위처럼 코드를 넣어봐도 그대로 제일 아래부분이 보이네요.
해결방안이 없을까요?
작업환경은 Win7 32bit + Delphi XE3 입니다.
|