English Version - www.geocities.com/vhpcg
VHP Computing Group
ТехнологииПродукцияМатериалыСпециалистыПартнёрыЗапись в Гостевую КнигуПросмотр Гостевой Книги

5 марта, 2001
Владимир Трухин
ведущий инженер-программист
ОАО "Воткинская ГЭС"
Fax: +7 (34241) 63297
E-mail:
vlt@gesvt.permenergo.ru
vlt@votges.ru

Бегущая строка

Проблема.

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

К сожалению, FoxPro не имеет таких классов, готовых к применению, и по этой причине многие разработчики ищут и используют элементы ActiveX. Однако, использование ActiveX иногда проблематично в Visual FoxPro, как в плане внедрения элементов в форму, так и в плане распространения готового приложения.  

Решение.

Во многих случаях, уместнее не тратить время на поиски подходящего элемента ActiveX, а попробовать создать класс, основанный на базовых классах Visual FoxPro, с нужными свойствами и нужным поведением. Рассмотрим создание такого класса на примере класса бегущей строки.

В первую очередь необходимо сформировать требования к новому классу:

  • Объект класса должен размещаться на форме подобно классу LABEL.

  • Он должен обладать свойствами класса LABEL.

  • Он должен иметь дополнительные свойства и методы, управляющие скорость движения строки, остановкой и запуском её движения.

Во-вторых, необходимо выбрать базовый класс. Из сформированных требований видно, что новый класс должен наследовать свойства классов LABEL и TIMER.

Для реализации этого наследования выберем в качестве базового класса класс CONTAINER, который позволит инкапсулировать объекты классов LABEL и TIMER.

Определимся с набором свойств и методов для создаваемого класса:

Методы:
Stop(), Start()

Свойства:
Interval, FontName, FontSize, FontBold, FontItalic, ForeColor, Alignment.

Определение класса:

DEFINE CLASS runline AS container

 Width = 158
Height = 28
BackStyle = 0
BorderWidth = 0
Name = "runline"
 

*-- Specifies the text displayed in an object's caption.
caption = ‘’
 

*-- Specifies if the text is italic.
fontitalic = .F.
 

*-- Specifies if the text is bold.
fontbold = .F.
 

*-- Specifies the font size for text displayed with an object.
fontsize = 10
 

*-- Specifies the name of the font used to display text.
fontname = 'Arial'
 

*-- Specifies the number of milliseconds between calls to a Timer control's Timer event.
interval = 500
 

*-- Specifies the alignment of text associated with a control.
alignment = 0
 

ADD OBJECT text AS label WITH ;
     AutoSize = .F., ;
     BackStyle = 0, ;
     Caption = "Label1", ;
     Height = 17, ;
     Left = 0, ;
     Top = 6, ;
     Width = 40, ;
     Name = "Text"
 

ADD OBJECT timer AS timer WITH ;
     Top = 3, ;
     Left = 129, ;
     Height = 23, ;
     Width = 23, ;
     Interval = 500, ;
     Name = "Timer"
 

PROCEDURE caption_access
     RETURN THIS.Text.Caption

ENDPROC
 

PROCEDURE caption_assign
     LPARAMETERS vNewVal
     THIS.Text.Caption = m.vNewVal
ENDPROC
 

PROCEDURE forecolor_access
     RETURN THIS.Text.ForeColor
ENDPROC
 

PROCEDURE forecolor_assign
     LPARAMETERS vNewVal
     THIS.Text.ForeColor = m.vNewVal
ENDPROC
 

PROCEDURE fontitalic_access
     RETURN THIS.Text.FontItalic

ENDPROC
 

PROCEDURE fontitalic_assign
     LPARAMETERS vNewVal
     THIS.Text.FontItalic = m.vNewVal
ENDPROC
 

PROCEDURE fontbold_access
     RETURN THIS.Text.FontBold

ENDPROC
 

PROCEDURE fontbold_assign
     LPARAMETERS vNewVal
     THIS.Text.FontBold = m.vNewVal

ENDPROC
 

PROCEDURE fontsize_access
     RETURN THIS.Text.FontSize
ENDPROC
 

PROCEDURE fontsize_assign
     LPARAMETERS vNewVal
     THIS.Text.FontSize = m.vNewVal
ENDPROC
 

PROCEDURE fontname_access
     RETURN THIS.Text.FontName
ENDPROC
 

PROCEDURE fontname_assign
     LPARAMETERS vNewVal
     THIS.Text.FontName = m.vNewVal
ENDPROC
 

PROCEDURE interval_access
     RETURN THIS.Timer.Interval
ENDPROC
 

PROCEDURE interval_assign
     LPARAMETERS vNewVal
     THIS.Timer.Interval = m.vNewVal
ENDPROC
 

PROCEDURE start
     THIS.Timer.Enabled=.T.
ENDPROC
 

PROCEDURE stop
     THIS.Timer.Enabled=.F.
ENDPROC
 

PROCEDURE alignment_access
     RETURN THIS.Text.Alignment

ENDPROC
 

PROCEDURE alignment_assign
     LPARAMETERS vNewVal
     THIS.Text.Alignment = m.vNewVal

ENDPROC
 

PROCEDURE Init
     THIS.text.Width=THIS.Width
     THIS.text.Height=THIS.Height

ENDPROC
 

PROCEDURE timer.Timer
     LOCAL lcFirstChar, lcSubLine
     lcFirstChar=SUBSTR(THIS.PARENT.Text.Caption,1,1)
     lcSubLine=SUBSTR(THIS.PARENT.Text.Caption,2)
     THIS.PARENT.Text.Caption=lcSubLine+lcFirstChar

ENDPROC
 

ENDDEFINE

Заключение

Созданный класс легко располагается на форме и достаточно просто управляется из программы.  

Демонстрационный пример и текст статьи в формате MS Word (zip-файл,21KB)


Главная страница | Технологии | Продукция | Материалы | Специалисты | Партнёры
Запись в Гостевую Книгу | Просмотр Гостевой Книги

 
1