Показать сообщение отдельно
  #1  
Старый 02.07.2009, 16:29
ardent ardent вне форума
Прохожий
 
Регистрация: 02.07.2009
Сообщения: 2
Репутация: 10
По умолчанию ListView,прокрутка

Добрый день, подскажите пожалуйста, что можно сделать в этом случае...
При клике в ListView, на строке появляются панели (Panel) для некоторых столбцов. Происходит это вот так:
Код:
procedure TForm1.ListView12MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
r0,r1,r2,r3: TRect;
pb0,pb1,pb2,pb3: TPanel;
begin
panel63.Visible:=false;
panel65.Visible:=false;
panel67.Visible:=false;
panel69.Visible:=false;
if chset='' then exit;
if (listview12.Items.Count=0) or (listview12.selected=nil) then exit;
r0:= Listview12.Items[listview12.Selected.Index].DisplayRect(drBounds);
r1:= Listview12.Items[listview12.Selected.Index].DisplayRect(drBounds);
r2:= Listview12.Items[listview12.Selected.Index].DisplayRect(drBounds);
r3:= Listview12.Items[listview12.Selected.Index].DisplayRect(drBounds);

r0.Left := r0.Left + Listview12.columns[0].Width+Listview12.columns[1].Width;
r0.Right:= r0.Left + Listview12.columns[2].Width;

r1.Left := r1.Left + Listview12.columns[0].Width+Listview12.columns[1].Width+Listview12.columns[2].Width;
r1.Right:= r1.Left + Listview12.columns[3].Width;

r2.Left := r2.Left + Listview12.columns[0].Width+Listview12.columns[1].Width+Listview12.columns[2].Width+Listview12.columns[3].Width;
r2.Right:= r2.Left + Listview12.columns[4].Width;

r3.Left := r3.Left + Listview12.columns[0].Width+Listview12.columns[1].Width+Listview12.columns[2].Width+Listview12.columns[3].Width + Listview12.columns[4].Width;
r3.Right:= r3.Left + Listview12.columns[5].Width;

panel63.Height:=r0.Bottom-r0.Top;
panel64.Height:=r0.Bottom-r0.Top;

panel65.Height:=r1.Bottom-r1.Top;
panel66.Height:=r1.Bottom-r1.Top;

panel67.Height:=r2.Bottom-r2.Top;
panel68.Height:=r2.Bottom-r2.Top;

panel69.Height:=r3.Bottom-r3.Top;
panel70.Height:=r3.Bottom-r3.Top;

pb0 := panel63;
pb0.Parent := Listview12;
pb0.BoundsRect := r0;
Listview12.Items[0].Data := pb0;
edit11.Text:=listview12.Selected.Su bItems.Strings[1];
panel75.Visible :=false;
panel63.Visible:=true;

pb1 := panel65;
pb1.Parent := Listview12;
pb1.BoundsRect := r1;
Listview12.Items[0].Data := pb1;
edit18.Text:=listview12.Selected.Su bItems.Strings[2];
panel65.Visible:=true;

pb2 := panel67;
pb2.Parent := Listview12;
pb2.BoundsRect := r2;
Listview12.Items[0].Data := pb2;
edit19.Text:=listview12.Selected.Su bItems.Strings[3];
panel76.Visible:=false;
panel67.Visible:=true;

pb3 := panel69;
pb3.Parent := Listview12;
pb3.BoundsRect := r3;
Listview12.Items[0].Data := pb3;
edit20.Text:=listview12.Selected.Su bItems.Strings[4];
panel69.Visible:=true;
end;
Admin: Пользуемся тегами!

сделано это для расширенного способа редактирования выделенной строки. На появляющихся панелях находятся необходимые компоненты для этого. Если после выделения строки начать прокрутку то появившиеся панели естественно остаются на месте, а выделенная строка уползает вверх/вниз по списку.
Как синхронизировать при прокрутке списка выделенную строку и панели на ней?
Ответить с цитированием