Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Полосы прокрутки фреймов


Автор: Timi 7.6.2007, 19:01
Народ есть фрейм у которого автоматиски созданы только вертикальные полосы проктутки. 
Как сделать чтобы полосы прокручивались при вращении колесика, а также при удержании кнопок Page UP/Page Down. и кнопок верх вниз.!!!

P.S прога написана на delphi. Модеры извените забыл  написатьв заголовке.!

Автор: Sunvas 8.6.2007, 10:53
Timi, ну так отлавливай соответствующие сообщения кнопок и перемещай ползунки.

Автор: Alexeis 8.6.2007, 11:31
Нужно сделать следующие обработчики фрейму

Код

procedure TFrame2.FrameMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
   Perform(WM_VSCROLL, SB_LINEUP, 0);
end;

procedure TFrame2.FrameMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  Perform(WM_VSCROLL, SB_LINEDOWN, 0);
end;

Автор: Timi 8.6.2007, 18:18
Цитата(Alexeis @ 8.6.2007,  11:31)
Нужно сделать следующие обработчики фрейму

Код

procedure TFrame2.FrameMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
   Perform(WM_VSCROLL, SB_LINEUP, 0);
end;

procedure TFrame2.FrameMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  Perform(WM_VSCROLL, SB_LINEDOWN, 0);
end;

так не получилось! Сдела вот как:
Код

procedure TForm3.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  form3.Frame41.VertScrollBar.Position:=  form3.Frame41.VertScrollBar.Position+5;
end;

procedure TForm3.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  form3.Frame41.VertScrollBar.Position:=  form3.Frame41.VertScrollBar.Position-5;
end;


Пробовал поступить с клавишами таким макаром:
Код


procedure TForm3.FormKeyPress(Sender: TObject; var Key: Char);
begin


if (key=#34) or (key =#40) then
  form3.Frame41.VertScrollBar.Position:=  form3.Frame41.VertScrollBar.Position+5;
if (key=#33) or (key =#38) then
  form3.Frame41.VertScrollBar.Position:=  form3.Frame41.VertScrollBar.Position-5;

 end;

не получилось...

Автор: Alexeis 8.6.2007, 20:14
Timi, Определитесь что нужно прокручивать, фрейм или форму. Мой пример для фрейма в котом не вмещаются все компоненты. А тут вижу что прокручивается сама форма.

Автор: Timi 9.6.2007, 08:27
Цитата(Alexeis @ 8.6.2007,  20:14)
Timi, Определитесь что нужно прокручивать, фрейм или форму. Мой пример для фрейма в котом не вмещаются все компоненты. А тут вижу что прокручивается сама форма.

Почему форму! Я отработчик событий ставлю на форму, а фрейм прокручиваю! 
Ставил твой код! Фрейм ни как не реарировал! Нещнаю почему!

Автор: Alexeis 9.6.2007, 10:53
Цитата(Timi @  9.6.2007,  08:27 Найти цитируемый пост)
Почему форму! Я отработчик событий ставлю на форму, а фрейм прокручиваю! 

  Фрейм это же отдельный модуль (типа формы), если в самом фрейме не помещаются контролы, то у фрейма появляются полосы прокрутки. Их легко спутать с полосами прокрутки формы, которые появляются в случае если уже сам фрейм слишком большой и не вмещается на форму.

  Раз обработчики сделались у формы значит все таки фрем больше формы и полосы прокрутки самой формы.

Добавлено через 11 минут и 40 секунд
АА я понял в чем глюк! Полосы прокрутки таки у фрейма а обработчики почему-то сделаны у формы!
  Вот это то и неверно. Нужно залезть в свойства фрейма, а не формы и там создать обработчики. См. на приведенный код 

 TFrame2.FrameMouseWheelDown

Не работало потому что Perform(WM_VSCROLL, SB_LINEUP, 0); - производится для того кому принадлежит метод (обработчик) . Т.о. их нужно создавать в модуле самого фрейма.

Автор: Timi 9.6.2007, 11:50
Ок!
С скролом разобрались!!
Но остались кнопочки 
Page UP/Page Down. и кнопок верх вниз.!!!
Код

procedure TForm3.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (key=#34) or (key =#40) then
  form3.Frame41.VertScrollBar.Position:=  form3.Frame41.VertScrollBar.Position+5;
if (key=#33) or (key =#38) then
  form3.Frame41.VertScrollBar.Position:=  form3.Frame41.VertScrollBar.Position-5;

 end;


Вот так не работает! 
А если  заметить строку
Код

if (key=#34) or (key =#40) then

на
Код

if key='w' then

полосы будут опускаться, принажатии клавиши "w" 
У меня есть прога определяющая код нажатой клавиши. 
Результат:
34 - page down
33 - page up
40 стрелка вниз
38 стрелка вверх
 Беру эти коды и не чё не получается!...:(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)