Форум: "Прочее";
Текущий архив: 2015.09.27;
Скачать: [xml.tar.bz2];
Внизпрокрутка кнопок Найти похожие ветки
← →
SvetaZ © (2015-02-13 10:51) [0]Здравствуйте. Ветка "начинающим" не работает, напишу сюда.
Задача такая: есть TPanel на которой нужно прокручивать кнопки.
Делаю примерно так:procedure TMainForm.ScrollBarScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
//для прокрутки вниз
Button1.Top := (ScrollBar.Position mod 400) -200;
end;
Высота кнопки и панели = 200px, т.е. кнопка постепенно появлеятся свеху, затем уходит за нижнюю границу и перепрыгивает на Top = -200px.
Не пойму как "тосовать" две кнопки последовательно, т.е. вторая кнопка прокручивается следом за первой, затем скрываясь за нижней границей идущая впереди кнопка становитя назад ( Top := -200px) и тд. Помогите.
← →
Ega23 © (2015-02-13 11:05) [1]Если я правильно понял вопрос, то что-то типа
if Button1.Top >= Panel1.Height then
Но вопрос слишком сумбурен, попробуй уточнить.
Button1.Top := - 200;
← →
SvetaZ © (2015-02-13 11:10) [2]
> Если я правильно понял вопрос, то что-то типа
Да именно так, но прокручивать нужно не одну а две кнопки с разницей
Button1.top = Button2.top - 200
← →
Ega23 © (2015-02-13 11:21) [3]Если топ первой кнопки достигл низа панели, то значит, что первая кнопка полностью скрылась, а вторая кнопка полностью показана.
← →
SvetaZ © (2015-02-13 11:27) [4]
> Ega23 © (13.02.15 11:21) [3]
Именно так, только как выразить кодом.
← →
Kilkennycat © (2015-02-13 11:34) [5]сделать громадную TPanel с кнопками и сдвигать ее.
> Именно так, только как выразить кодом.
надо перебирать в
цикле их последовательно и добавлять или уменьшать им координату.
← →
Ega23 © (2015-02-13 11:37) [6]
> Именно так, только как выразить кодом.
Надо завести список из N кнопок.
В цикле пробежаться, всем присвоить Top := Top + 1;
Если у последней кнопки Top >= K, то
Передвинуть кнопку вверх списка
Присвоить ей Top = какому-то начальному значению.
Выполнять в цикле.
← →
Dimka Maslov © (2015-02-13 11:43) [7]TPanel, на которой можно прокручивать, назвается TScrollBox
← →
SvetaZ © (2015-02-13 11:47) [8]
> Если у последней кнопки Top >= K, то
при быстрой прокрутке не всегда срабатывает условие.
Если ScrollBar.position = 100000, то и условие должно быть выполнено
(100000 / (Button.Height*2)) раз, при разной скорости прокрутки этого не происходит.
← →
SvetaZ © (2015-02-13 11:49) [9]
> TPanel, на которой можно прокручивать, назвается TScrollBox
ну и дальше что?
← →
Dimka Maslov © (2015-02-13 12:05) [10]
> ну и дальше что?
А дальше все кнопки имеют постоянные координаты относительно сколлбокса, а прокрутка сколлюокса меняет координаты кнопок относительно панели, формы, или на чём находится скроллбокс.
← →
SvetaZ © (2015-02-13 12:12) [11]В скроллбоксе данная задача работает не корректно
← →
Германн © (2015-02-13 12:54) [12]
> В скроллбоксе данная задача работает не корректно
А кто виноват? Скроллбокс?
← →
SvetaZ © (2015-02-13 12:59) [13]
> Германн © (13.02.15 12:54) [12]
Не думаю.
Просто в такой задаче нужно самостоятельно придумать алгоритм перемещения кнопок.
← →
han_malign © (2015-02-13 13:59) [14]посмотри как в TGrid прокрутка с выравниванием на границу ячейки производится...
...
procedure TCustomGrid.WMVScroll(var Msg: TWMVScroll);
begin
ModifyScrollBar(SB_VERT, Msg.ScrollCode, Msg.Pos, True);
end;
procedure TCustomGrid.WMHScroll(var Msg: TWMHScroll);
begin
ModifyScrollBar(SB_HORZ, Msg.ScrollCode, Msg.Pos, True);
end;
...
← →
Плохиш © (2015-02-13 14:10) [15]В школе арифметику совсем больше не изучают?
← →
han_malign © (2015-02-13 14:17) [16]основной принцип:
- метод прокрутки на кнопку(по номеру)
- вычисление нужного номера кнопки по текущей невыровненной позиции
- собственно все...
главное обратить внимание наif (NewTopLeft.X <> FTopLeft.X) or (NewTopLeft.Y <> FTopLeft.Y) then
- иначе на WM_HSCROLL/WM_VSCROLL ==> ScrollWindowEx() - тыдыщь может получиться(EStackOverflow)...
← →
han_malign © (2015-02-13 14:38) [17]и еще одна засада - конвульсии - когда пиксельная прокрутка происходит в пределах одного и того же элемента прокрутки([стрелки]/колесо)
см.:
TCustomGrid.ModifyScrollBar
CalcScrollBar
← →
SvetaZ © (2015-02-13 14:44) [18]
> В школе арифметику совсем больше не изучают?
не все так просто, как может показаться сначала.
← →
SvetaZ © (2015-02-13 15:01) [19]
> Плохиш © (13.02.15 14:10) [15]
Так может блеснете знанием?
← →
MBo © (2015-02-13 15:09) [20]Вот это, что ли, требуется?
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
Button10.Top := (ScrollBar1.Position mod 400) -200;
Button11.Top := ((ScrollBar1.Position + 200) mod 400) -200;
end;
← →
Игорь Шевченко © (2015-02-13 20:48) [21]Работоспособность конференции "Начинающим" восстановлена.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2015.09.27;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.002 c