Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];

Вниз

перемещение содержимого ScrollBox   Найти похожие ветки 

 
San1   (2008-03-13 14:05) [0]

Здравствуйте! Буду признателен за помощь.
Мне необходимо прокручивать содержимое скролбокса перетаскиванием содержимого зажатой клавишой мышки (пример такой реализации - программа InfarView).

Есть два варианта решения  (которые я нашел):

1 вариант. Программное изменение свойства тор и left у вложенного в скролбокс компонента:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
SX := X;  // X start co-ordinate
SY := Y;  // Y start co-ordinate
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);

var NX: Integer;
  NY: Integer;
begin

if not (ssLeft in Shift) then
Exit;

NX := Image1.Left + X - SX;
NY := Image1.Top + Y - SY;

if (NX < 0) and (NX > LX) then
Image1.Left := NX;

if (NY < 0) and (NY > LY) then
Image1.Top := NY;

end;

Но в результате этого автоматичечки изменяются диапазоны полос прокруток(range), что в моем случае неприемлемо.

2 вариант. Программного изменения свойства positions у скролбаров, как раз то что мне нужно:

procedure TMineScrollPole.MouseDownInPole(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button<>mbMiddle then Exit;
FOldX:=X; FOldY:=Y;

end;

procedure TMineScrollPole.MouseMoveInPole(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin

if not (ssMiddle in Shift) then Exit;

HorzScrollBar.Position:=HorzScrollBar.Position+(FOldX-X); FOldX:=X;
VertScrollBar.Position:=VertScrollBar.Position+(FOldY-Y); FOldY:=Y;

end;

Все работает, но возникает проблемма с тем, что скролы при перетаскивании начинают дико дрожать. Подскажите пожалуйста как от этого избавиться.


 
{RASkov} ©   (2008-03-13 14:53) [1]

Спамить не хорошо
http://www.delphimaster.ru/forums.shtml#rule пункт 7
http://delphimaster.net/view/2-1205396612/


 
San1   (2008-03-13 15:00) [2]

Спамить больше не буду.
Спасибо за пример, буду разбираться.

Путь решения примерно ясен. Т.е., собрать новый компонент из ТPaintBox и два TScrollControls, получиться некое подобие TScrollBox, только меньше ресурсов ест.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
15-1226665932
Dmitry S
2008-11-14 15:32
2009.01.11
Книга по Flash ActiveScript 3.0


3-1212615009
rosl
2008-06-05 01:30
2009.01.11
запрос sql


15-1226603097
Дмитрий С
2008-11-13 22:04
2009.01.11
Скиномания


15-1226856379
DillerXX
2008-11-16 20:26
2009.01.11
А почему корпус компьютера


15-1226297587
Slider007
2008-11-10 09:13
2009.01.11
С днем рождения ! 10 ноября 2008 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский