Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2010, 11:49   #1
boget
Пользователь
 
Аватар для boget
 
Регистрация: 06.05.2010
Сообщений: 10
По умолчанию Scrollbar не прокручивает

Устанавливаю на форму компонент TScrollbar, делаю его вертикальным, выравниваю по правому краю, кидаю на форму компоненты ниже границы, компилирую - прокрутка не работает.

Если у формы поставить autoscroll и убрать TScrollbar, то прокрутка появляется и работает, но при этом при параметре Position = 0 она по умолчанию появляется прокрученная вниз.

Помогите пожалуйста, как сделать, чтоб TScrollbar заработал?

Для наглядности прикрепляю скрин скролбара
http://www.programmersforum.ru/attac...1&d=1286956142
Изображения
Тип файла: jpg Без-имени-3.jpg (127.5 Кб, 311 просмотров)
boget вне форума Ответить с цитированием
Старый 13.10.2010, 12:06   #2
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

Цитата:
по правому краю, кидаю на форму компоненты ниже границы, компилирую - прокрутка не работает.
Ниже границы ScrollBar- а? Вообще- то, позицию ползунка ScrollBar- а можно задавать программно.

Цитата:
Сообщение от boget Посмотреть сообщение
Если у формы поставить autoscroll и убрать TScrollbar, то прокрутка появляется и работает, но при этом при параметре Position = 0 она по умолчанию появляется прокрученная вниз.
Свойство ScrollBar- а Position поставь на 50(если вверх, ставь на 100). У тебя оно на нуле. Это если хочешь чтобы был ползунок в середине


p.s. У меня все прекрасно работает, даже, без компонентов(за исключением TScrollBar).

Последний раз редактировалось vasek123; 13.10.2010 в 12:50.
vasek123 вне форума Ответить с цитированием
Старый 13.10.2010, 12:14   #3
boget
Пользователь
 
Аватар для boget
 
Регистрация: 06.05.2010
Сообщений: 10
По умолчанию

Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, StdCtrls, jpeg, ExtCtrls, ShellAPI;

type
  TForm2 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Splitter1: TSplitter;
    Memo1: TMemo;
    ScrollBar1: TScrollBar;
    procedure FormCreate(Sender: TObject);
    procedure Label4Click(Sender: TObject);
    procedure Label4MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label4MouseLeave(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}



procedure TForm2.FormCreate(Sender: TObject);
var
  s : string;
begin

end;

procedure TForm2.Label4Click(Sender: TObject);
begin
  ShellExecute(handle,'open','http://www.ya.ru',nil,nil,SW_SHOW);
end;


procedure TForm2.Label4MouseLeave(Sender: TObject);
begin
  label4.Font.Color := clHighlight;
end;

procedure TForm2.Label4MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  label4.Font.Color := $b60e00;
end;


end.

Последний раз редактировалось Stilet; 13.10.2010 в 13:24.
boget вне форума Ответить с цитированием
Старый 13.10.2010, 12:22   #4
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
Сообщение

Цитата:
Сообщение от boget Посмотреть сообщение
Устанавливаю на форму компонент TScrollbar, делаю его вертикальным, выравниваю по правому краю, кидаю на форму компоненты ниже границы, компилирую - прокрутка не работает.
Вероятно, необходимо связать форму, и скроллбар.
хотя, самому интересно, каким образом это возможно, и зачем вообще. чем так плохи стандартные скроллбары?
)Игнат( вне форума Ответить с цитированием
Старый 13.10.2010, 13:20   #5
boget
Пользователь
 
Аватар для boget
 
Регистрация: 06.05.2010
Сообщений: 10
По умолчанию

Компоненты кидаю ниже формы, скролбар выровнен по правому краю, размеры формы зафиксированы (640*480)

С Autoscroll = true:
Задаю position на 1 - ползунок в редакторе прыгает вверх, компилирую, открываю форму - он внизу. position задаю на 100 - ползунок в редакторе прыгает вниз, компилирую - так же внизу. А может быть такое из-за того, что изначально форма, на которой отображается прокрутка, скрыта (visible установлено в false)?

У компонента ScrollBar при отображении формы ползунок сам вниз не смещается, но он совсем не работает (при перетаскивании перетаскивается, а содержимое формы остается на месте).
boget вне форума Ответить с цитированием
Старый 13.10.2010, 13:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Подозреваю что нужно что-то в таком роде:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    ScrollBar1: TScrollBar;
    procedure FormCreate(Sender: TObject);
    procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
      var ScrollPos: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
 ScrollBar1.Max:=0;
 for i:=0 to ControlCount-1 do
  if ScrollBar1.Max<(Controls[i].Top+Controls[i].Height) then
   ScrollBar1.Max:=(Controls[i].Top+Controls[i].Height);
 ScrollBar1.Max:=ScrollBar1.Max-Height;
end;

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
  Form1.ScrollBy(0,ScrollBar1.Tag-ScrollPos);
  ScrollBar1.Tag:=ScrollPos;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.10.2010, 13:48   #7
boget
Пользователь
 
Аватар для boget
 
Регистрация: 06.05.2010
Сообщений: 10
По умолчанию

Stilet так работает! В создание формы не писал, оставил только

Код:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
  Form1.ScrollBy(0,ScrollBar1.Tag-ScrollPos);
  ScrollBar1.Tag:=ScrollPos;
end;
Но скролбар как-то дергается при прокручивании - граница моргает и сам дрожит на 1-2 пикселя периодически съезжает на мгновение
boget вне форума Ответить с цитированием
Старый 13.10.2010, 23:25   #8
boget
Пользователь
 
Аватар для boget
 
Регистрация: 06.05.2010
Сообщений: 10
По умолчанию

Решил проблему! Оказывается, в свойсте tabstop у компонента TMemo нужно было false поставить - после компиляции программа обозначала первый таб и автоматически прокручивала окно к нему По мне это нелогично, когда явно задаешь нулевую позицию бегунка, прокручивать к табу автоматически.. особенно когда он не на первом экране. Автоскролл не дергается - буду использовать его.
Из-за чего ScrollBar дергается, не ясно - позиция в свойствах компонента жестко закреплена.
boget вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает scrollbar qwertyk Компоненты Delphi 4 10.10.2010 21:07
scrollbar grater83 Общие вопросы Delphi 2 08.10.2009 12:00
ScrollBar Rebel123 Общие вопросы Delphi 2 19.07.2009 11:35
scrollbar street-walker Общие вопросы Delphi 4 29.04.2009 23:45