Конференция "Начинающим" » PageScroller "правильная прокрутка"
 
  • Саня © (16.03.19 18:39) [0]
    Добрый вечер, хочу сделать примерно такую прокрутку, как на палитре компонентов 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;
 
Конференция "Начинающим" » PageScroller "правильная прокрутка"
Есть новые Нет новых   [134427   +26][b:0][p:0.003]