У меня очень грязный способ синхронизации свитков из 7 списков, все они имеют одинаковую высоту, поэтому, когда я перемещаю позицию любого из них, остальные 6 также должны перемещаться в что позицияDelphi/Firemonkey make Listboxses sync прокрутка лучше
что я делаю Предположим listbox1 прокручивается и ViewportPositionChange() обжигают Я говорю
Listbox2.ViewportPosition := NewViewportPosition;
Listbox3.ViewportPosition := NewViewportPosition;
и все это работает, и я просто добавить этот код к каждому событию Listboxses ViewportPositionChange(), но его ужасно рывкий и слишком медленный на Андриоде, мне все равно нужно прокручивать l из любого списка, но нет ли способа улучшить производительность свитка?
Хорошо, если честно, это не очень медленно, но вы можете почувствовать, что это не совсем быстро, а также каждый список может иметь множество списков, и каждый список может также иметь несколько элементов управления и больше элементов управления в этих элементах управления, поэтому многие из них перекрашивание сделано, я думаю, и это то, что делает его менее быстрым.
Пример код
Во-первых разместить макет GridPanel на форме, добавить 6 столбцов и добавить ListBox каждый, каждый Listbox представляет день, где Listbox 1 является понедельник, также Совместите их клиенту.
Глобальные переменные
private Glistbox : array[0..6] of TListBox;
О форме Создать
Glistbox[0] := ListBox1;
Glistbox[1] := ListBox2;
Glistbox[2] := ListBox3;
Glistbox[3] := ListBox4;
Glistbox[4] := ListBox5;
Glistbox[5] := ListBox6;
Glistbox[6] := ListBox7;
И теперь каждый listboxses OnViewportPositionChange
//Note that this would be for Listbox1 so for listbox 2 it needs to be changed acordingly
ListBox2.ViewportPosition := NewViewportPosition;
ListBox3.ViewportPosition := NewViewportPosition;
ListBox4.ViewportPosition := NewViewportPosition;
ListBox5.ViewportPosition := NewViewportPosition;
ListBox6.ViewportPosition := NewViewportPosition;
ListBox7.ViewportPosition := NewViewportPosition;
Затем добавить кнопку со следующим кодом:
var
mainlayout,item1,item2 : Tlayout;
listboxitem : TListBoxItem;
myrec,myrec2 : TRectangle;
lbl1,lbl2 : TLabel;
I: Integer;
begin
for I := 0 to 6 do
begin
listboxitem := TListBoxItem.Create(nil);
mainlayout := TLayout.Create(nil);
mainlayout.Align := TAlignLayout.Client;
mainlayout.Parent:= listboxitem;
item1 := TLayout.Create(nil);
item1.Align:= TAlignLayout.Left;
item1.Parent := mainlayout;
item2 := TLayout.Create(nil);
item2.Align:= TAlignLayout.Right;
item2.Parent := mainlayout;
myrec := TRectangle.Create(nil);
myrec.Align := TAlignLayout.Client;
myrec.Parent := item1;
myrec2 := TRectangle.Create(nil);
myrec2.Align := TAlignLayout.Client;
myrec2.Parent := item2;
lbl1 := TLabel.Create(nil);
lbl1.Align := TAlignLayout.Client;
lbl1.TextAlign := TTextAlign.Center;
lbl1.Text := '1';
myrec.AddObject(lbl1);
lbl2 := TLabel.Create(nil);
lbl2.Align := TAlignLayout.Client;
lbl2.TextAlign := TTextAlign.Center;
lbl2.Text := '2';
myrec2.AddObject(lbl2);
Glistbox[I].AddObject(listboxitem);
item2.Width:= mainlayout.Width/2;
end;
Там иногда может быть больше контроля в ListBoxItem, но в целом я думаю, что это будет нормой, теперь добавьте несколько предметов и попробовать свиток
Рассматривали ли вы использование элемента управления сеткой с семью столбцами? –
К сожалению, я был слишком далеко от кроличьей дыры, чтобы перейти к управлению сеткой, не меняя слишком много другого кода, как я уже сказал, что он не доволен, но теперь он работоспособен –
Другими словами, вы уже решили, t хочу рассмотреть другие варианты. В этом случае, почему задайте вопрос. По крайней мере, честно об этом. Скажите, что вы не можете столкнуться с изменением дизайна, но есть ли какой-то волшебный переключатель, который делает приложение супер шикарным. Как 'Application.AwesomeScrolling: = True'. –