Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.09.27;
Скачать: CL | DM;

Вниз

прокрутка кнопок   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.005 c
15-1420320602
Юрий
2015-01-04 00:30
2015.09.27
С днем рождения ! 4 января 2015 воскресенье


15-1423690240
Юрий
2015-02-12 00:30
2015.09.27
С днем рождения ! 12 февраля 2015 четверг


15-1423603829
Юрий
2015-02-11 00:30
2015.09.27
С днем рождения ! 11 февраля 2015 среда


2-1399458720
oleg_teacher
2014-05-07 14:32
2015.09.27
Вставить форматированый текст


15-1422336953
ANTPro_
2015-01-27 08:35
2015.09.27
Ускорить экспорт в Excel