Форум FAQ О команде
Поиск по сайту:
 
Sybase
Sybase ASA  
Sybase ASE  
Sybase IQ  
Sybase PowerDesigner  
Sybase PowerBuilder  

Продукты
Наши продукты  
Продукты партнеров портала  

Сообщества
Alef community  

Меню
Регистрация  
Почта  

Вход

Рассылка
Рассылка 'РСУБД Sybase ASA 9 - мощность, легкость и надежность'
Почтовая рассылка
"Технологии обработки данных компании Sybase"


Статистика
Яндекс цитирования

Rambler's Top100
Находится в каталоге Апорт

Главная -> Полезный код
Сплит-бар своими руками

Сплит-бар своими руками

СПЛИТ-БАР СВОИМИ РУКАМИ



Иногда, при рисовании визуальной части проекта, берет досада на родной и любимый PowerBuilder – что ж так не развита палитра компонентов то? Вот незадача! Рисуем на форме рядышком два DW, а вот как сделать так, чтобы пользователь мог менять их размеры? Да не просто менять, а чтобы если одно делается шире, то другое сужается? Если мне память не изменяет, то ли в Delphi, то ли в Visual Basic есть такая штучка – сплит-бар называется. Кладешь ее на форму, и говоришь, что вот тебе левый объект, вот тебе правый объект. И больше ни о чем не задумываешься. Эх, в РВ бы такую! А ведь можно и сделать. Как? Да просто!

ШАГ 1. СОЗДАЕМ User Object
Ну, о создании нового приложения я умолчу, думаю, каждый с этим сам справится. Итак, приступим. Создаем новый User Object inherited from UserObject. Зададим ему следующие свойства:
  • BorderStyle = StyleRaised!
  • Width = 20
  • Pointer = SizeWE!
Цвет подбирайте себе по вкусу. Добавим Instance Variables:
dragobject obj_left // Объект, который будет находиться слева от сплит-бара
dragobject obj_right // Объект, который будет находиться справа от сплит-бара
boolean ib_moveinprogress = FALSE // Флаг, говорящий, что сплит-бар ухватили мышкой и двигают.
                                             // Ставим в False на стадии декларации
integer x_pos // Координата Х при перетаскивании объекта
integer ii_barthickness = 20 // Толщина самого сплит-бара. Присваиваем значение на стадии декларации.
integer window_width // Ширина окна, на котором происходит действие
Теперь описываем события.
Событие mousedown, Event ID события pbm_lbuttondown
ib_moveinprogress = TRUE
// на сплит-баре нажата левая кнопка мыши
Событие mousemove, Event ID события pbm_mousemove
// мышь движется над (вместе с) объектом
if ib_moveinprogress then // двигается объект	
    this.SetPosition(ToTop!)	
    this.Width = 1	
    this.x =x_pos
end if
Событие mouseup, Event ID события pbm_lbuttonup
// левая кнопка мыши отпущена, движение закончено.
this.width = ii_barthickness
// изменим размеры и положение левого и правого объектов
Long	 dw_xx
obj_left.width = this.X - obj_left.X
dw_xx = obj_left.X + obj_left.width + ii_barthickness
obj_right.x = dw_xx
obj_right.width =  window_width - dw_xx - 50

// сбросим флаг перетаскивания
ib_moveinprogress = FALSE
Ну вот и готов наш User Object.

ШАГ 2. ИСПОЛЬЗУЕМ СПЛИТ-БАР
На форму кладем два DW – dw_1 и dw_2 рядом друг с другом и выравниваем их по высоте. Кладем между ними User Object – наш сплит-бар st_1. Вытягиваем его по высоте DW и аккуратненько придвигаем к правому краю dw_1. А dw_2 придвигаем к сплит-бару и вытягиваем до конца окна. Примерно так:
Картинка с другого сайта.
Я специально сделал сплит-бар красного цвета, чтобы на картинке он был виднее.

А дальше все просто: на событии Open окна делаем три присвоения:
st_1.obj_left = dw_1 // левый объект
st_1.obj_right = dw_2 // правый объект
st_1.window_width = this.width // ширина окна
А на событии mousemove сплит-бара итого одна строка:
st_1.x_pos = parent.PointerX() // передаем координату курсора

ШАГ 3. ЗАПУСКАЕМ И ПРОБУЕМ. ;-)


Дата публикации: Tuesday 28 March 2006 14:16:15
Материал прочитан: 15503 раз(а)
[ Назад ]



Продвижение сайтов
Биржа ссылок

Copyright©2005 phpMS. Все права защищены.
hosted on pets-tree