Добрый день, подскажите пожалуйста, что можно сделать в этом случае...
При клике в 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: Пользуемся тегами!
сделано это для расширенного способа редактирования выделенной строки. На появляющихся панелях находятся необходимые компоненты для этого. Если после выделения строки начать прокрутку то появившиеся панели естественно остаются на месте, а выделенная строка уползает вверх/вниз по списку.
Как синхронизировать при прокрутке списка выделенную строку и панели на ней?