Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1399631848
brother
2014-05-09 14:37
2015.09.27
TFileStream


15-1423776652
Юрий
2015-02-13 00:30
2015.09.27
С днем рождения ! 13 февраля 2015 пятница


2-1398789485
FIL-23
2014-04-29 20:38
2015.09.27
FMX Treeviwe потомки и доступ к ним


15-1423258204
Юрий
2015-02-07 00:30
2015.09.27
С днем рождения ! 7 февраля 2015 суббота


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский