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

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

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

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

Вход

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


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

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

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

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

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



Иногда, при рисовании визуальной части проекта, берет досада на родной и любимый 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
Материал прочитан: 14741 раз(а)
[ Назад ]



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

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