Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

PageScroller "правильная прокрутка"


Саня ©   (16.03.19 18:39

Добрый вечер, хочу сделать примерно такую прокрутку, как на палитре компонентов Delphi 7.  Задача чтобы:
1) Стрелки прокрутки влево\право не всплывали поверх кнопок - этот пункт работает.
2) Прокрутка была кратна ширине кнопки.

Впервые пришлось сегодня с таким повозится.
Вперед крутит как положено на 32px, а назад на 48px, что у меня не правильно?
Вот набросал примерчик:

unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.ExtCtrls,
 Vcl.Buttons;

type
 TForm1 = class(TForm)
   PageScroller1: TPageScroller;
   Button1: TButton;
   Panel1: TPanel;
   procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer;
     var Resize: Boolean);
   procedure FormCreate(Sender: TObject);
   procedure PageScroller1Scroll(Sender: TObject; Shift: TShiftState; X,
     Y: Integer; Orientation: TPageScrollerOrientation; var Delta: Integer);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 N: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 //ширина срелочек влево/право
 PageScroller1.ButtonSize := 16;
 //счетчик кнопок
 N := 0;
end;

procedure TForm1.PageScroller1Scroll(Sender: TObject; Shift: TShiftState; X,
 Y: Integer; Orientation: TPageScrollerOrientation; var Delta: Integer);
begin
 //на ширину кнопки
 Delta := 32;
end;

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
 NewHeight: Integer; var Resize: Boolean);
begin
 //ширина PageScroller всегда крата ширине кнопок (32 px)
 PageScroller1.Width := Form1.ClientWidth div 32 * 32;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 SB: TSpeedButton;
begin
 //добавляем кнопки в ряд одна за одной
 SB := TSpeedButton.Create(Panel1);
 SB.Parent := Panel1;
 SB.Caption  := IntToStr(N);
 SB.Flat  := True;
 SB.SetBounds(N * 32 + PageScroller1.ButtonSize, 0, 32, 32);
 Inc(N);
 Panel1.Width := N * 32 + PageScroller1.ButtonSize * 2;
end;

end.


Саня ©   (16.03.19 20:12[1]

тысяча извинений.

procedure TForm1.PageScroller1Scroll(Sender: TObject; Shift: TShiftState; X,
 Y: Integer; Orientation: TPageScrollerOrientation; var Delta: Integer);
begin
 if (Delta > 0) then
   Delta := 32
 else
   Delta := -32;
end;


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо