Добрый вечер, хочу сделать примерно такую прокрутку, как на палитре компонентов 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
public
end;
var
Form1: TForm1;
N: Integer;
implementation
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
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.