Всем привет. Вобщем я создаю динамически много мелких компонентов (Панелей(скиновых) ) на 3х ScrolBoxах. И я не понимаю на двух Scrollboxах все нормально, а на третьей они при появлении постоянно перерисовываются(если их закрывает чужое окно, или просто после создании как формапоявляется) при чем перерисовываются только те которых например закрывало чужое окно. Я раньше много делал таких структур и все нормально работало. А щас я непонимаю почему. Если кому не лень посмотрите.
Это на создании формы
| Код | var pnlData : array [0..10000] of TbsskinPanel; lbData : array [0..10000] of Tlabel; pnlSurname, pnlDate: TbsskinPanel; lbSurname : TLabel;
procedure TfmJournal.CreateJournal; var Index:integer; j,i:integer; begin LockWindowUpdate(GroupBox1.Handle); // на нем лежат скроллбоксы // InvalidateRect(GroupBox1.Handle,nil,false);
Index:= 0; ActiveIndex := -1;
for i:= 0 to 15 do begin if i<>0 then begin pnlDate:=TbsSkinPanel.create(sbDateLessons); pnlDate.Parent := sbDateLessons; pnlDate.Height := 40; pnlDate.Width := 20; pnlDate.Top := 0; pnlDate.Left := i*20-20; pnlDate.OnClick := pnlDateClick; pnlDate.SkinData := fmMain.bsSkinData1; end; for j:=0 to High(StudentsList) do // грубо говоря массив строковый begin if i=0 then begin pnlSurname:=TbsSkinPanel.create(sbStudentsList); pnlSurname.Parent := sbStudentsList; pnlSurname.Height := 20; pnlSurname.Width := 150; pnlSurname.Top := j*20; pnlSurname.Left := 0; pnlSurname.SkinData := fmMain.bsSkinData1;
lbSurname:= Tlabel.Create(pnlSurname); lbSurname.Parent := pnlSurname; lbSurname.Caption := StudentsList[j].Surname + ' ' + StudentsList[j].name; lbSurname.Left := 3; lbSurname.Top:=3; lbSurname.Transparent :=true;
end else begin
// вот эти панели перерисовываются
pnlData[Index] := TbsSkinPanel.Create(sbData); pnlData[Index].Parent := sbData; pnlData[Index].Width := 20; pnlData[Index].Height:= 20; pnlData[Index].Left := i*20-20; pnlData[Index].Top := j*20; pnlData[Index].OnClick := pnlDataClick; pnlData[Index].Cursor := crHandPoint; pnlData[Index].SkinDataName := 'whitepanelblueborder'; pnlData[Index].SkinData := fmMain.bsSkinData1; pnlData[Index].Tag:= Index;
lbData[Index]:= TLabel.Create(pnlData[Index]); lbData[Index].Parent := pnlData[Index]; lbData[Index].Transparent := true; lbData[Index].Left := 6; lbData[Index].OnClick := pnlDataClick; lbData[Index].Top := 3; lbData[Index].Tag:=Index; lbData[Index].Transparent :=true;
Inc(Index); end; end; end; LockWindowUpdate(0); end;
|
если хоть на мысль наведете буду очень благодарен. |