![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скроллер на панели
Steep © (2007-04-04 10:15:00)Добрый день!
Хотел бы узнать как сделать так чтобы если на панели не хватает места (т.е. динамичски создаваемая кнопка если создается дальше чем находится видимая область) появлялась прокрутка (скроллер или что там еще) и скроллером можно было прокручивать панель...
PS надеюсь правильно выразился
Steep (2007-04-04 15:21:00) [1]О пасип!
{RASkov} (2007-04-04 15:08:00) [2]> а как сделать на каждую новую созданную кнопку свое событие?
Ну и присвайвай не OnClick :=FastButtonClick;, а нужное... т.е. вместо FastButtonClick; подставляй любой совместимый(TNotifyEvent) метод.
Для этого создание кнопки вынеси в отдельную процедуру, например так:
procedure CreateMyButton(.....; Evn: TNotifyEvent);
begin
....
OnClick:=Evn;
....
end;
SergGG (2007-04-04 14:17:00) [3]> а как сделать на каждую новую созданную кнопку свое событие?
в процедуре FastButtonClick
TTSpeedButton(Sender).name
для каждой кнопки имеет свой
Steep (2007-04-04 13:38:00) [4]И еще вопросик- создаю я кнопки
procedure TFrm_RunPanel.Button1Click(Sender: TObject);
begin
With TSpeedButton.Create(Self) do
begin
//Parent := IconPanel;
Parent := ScrollBox1;
SetBounds( 1, (32*FBC)+(1*(FBC+1)), 32, 32 );
Caption := IntToStr(FBC);//'Кнопка';
Glyph.LoadFromFile('FastButton.bmp');
Name := 'FastButton'+IntToStr(FBC);
Anchors := [akTop, akLeft];
inc(FBC);
OnClick :=FastButtonClick;
end;
end;
И событие у меня на них на все одно OnClick :=FastButtonClick;
и оно заранее описано..
а как сделать на каждую новую созданную кнопку свое событие?
Steep (2007-04-04 12:42:00) [5]нет от панелек я вобще отказался ;)
Я создаю кнопки прям на ScrollBox..
И уже в самом ScrollBox я хотел бы чтобы было виден ScrollBar..
Вот так...
SergGG (2007-04-04 12:40:00) [6]Вы хотите сказать, чтобы ScrollBar был виден всегда или когда увеличивается поле?
Если всегда, то См. [1]
Если при увеличении поля, то надо следить за Panel2.height.
Т.е. Если Panel2.height>Panel1.height, то ScrollBar.Visible:=True, иначе
ScrollBar.Visible:=False
Steep (2007-04-04 12:19:00) [7]Только вопрос как сделать чтобы прокрутка сразу была видно (не не работала типа Enabled := false), а не появлялось только когда больше (а просто типа Enabled := true)
Steep (2007-04-04 12:15:00) [8]Не как я понял легче не на панели создавать а на скролбоксе ;)
Он сам и прокручивает ;)
SergGG (2007-04-04 10:59:00) [9]Попробуй код:
{dfm}
object Form1: TForm1
Left = 186
Top = 106
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnPaint = FormPaint
OnResize = FormResize
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 264
Top = 56
Width = 249
Height = 185
Caption = 'Panel1'
TabOrder = 1
object Panel2: TPanel
Left = 0
Top = 0
Width = 249
Height = 285
Caption = 'Panel2'
Color = clBtnHighlight
TabOrder = 0
end
object ScrollBar1: TScrollBar
Left = 232
Top = 1
Width = 16
Height = 183
Align = alRight
Kind = sbVertical
Max = 2
PageSize = 0
TabOrder = 1
OnChange = ScrollBar1Change
end
end
........
{pas}
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
ScrollBar1.Max:=Panel2.Height;
ScrollBar1.Min:=Panel1.Height;
Panel2.Top:=ScrollBar1.Position-Panel2.Height;
end;
На Panel2 создавай кнопки