Низкоуровневая графика в Amibroker

Опубликовано в AmiBroker

Встроенный язык Амиброкера (AFL) предоставляет неплохие возможности для интерактивного общения с алгоритмом. Можно использовать кнопки, строить меню и даже двигать объекты по экрану. 

 

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

 

function DrawButton( Text, x1, y1, x2, y2, BackColor )
{
GfxSetOverlayMode( 0 );
GfxSelectFont( "Tahoma", 12, 800 );
GfxSelectPen( colorBlack );
GfxSetBkMode( 1 );
GfxSelectSolidBrush( BackColor );
GfxSetBkColor( BackColor );
GfxSetTextColor( 1 );
GfxRectangle( x1, y1, x2, y2 );
GfxDrawText( Text, x1, y1, x2, y2, 32 | 1 | 4 );
}


ParamSqrSize = 100;
Reset = ParamTrigger( "Reset Coordinates", "RESET" );
xOffset = StaticVarGet( "xOffset" );
YOffset = StaticVarGet( "YOffset" );

if ( IsNull( xOffset ) OR IsNull( yOffset ) OR Reset )
{
StaticVarSet( "xOffset", 20 );
StaticVarSet( "yOffset", 20 );
X1 = XOffset;
Y1 = YOffset;
X2 = XOffset + ParamSqrSize;
Y2 = YOffset + ParamSqrSize;
StaticVarSet( "X1", X1 );
StaticVarSet( "X2", X2 );
StaticVarSet( "Y1", Y1 );
StaticVarSet( "Y2", Y2 );
StaticVarSet( "MoveinProgress", False );
}

X1 = Nz( StaticVarGet( "X1" ) );

X2 = Nz( StaticVarGet( "X2" ) );
Y1 = Nz( StaticVarGet( "Y1" ) );
Y2 = Nz( StaticVarGet( "Y2" ) );
LButtonTrigger = GetCursorMouseButtons() == 9;
MousePx = Nz( GetCursorXPosition( 1 ) );
MousePy = Nz( GetCursorYPosition( 1 ) );

CursorInField = MousePx > X1 AND MousePx < X2 AND MousePy > Y1 AND MousePy < Y2;

MoveInProgress = Nz( StaticVarGet( "MoveInProgress" ) );

BackColor = colorYellow;

if ( NOT MoveInProgress )
{
if ( LButtonTrigger AND CursorInField )
{
StaticVarSet( "BackColor", colorRed );
StaticVarSet( "DownPx1", MousePx );
StaticVarSet( "DownPy1", MousePy );
StaticVarSet( "MoveinProgress", True );

}
}
else
if ( LButtonTrigger )
{
StaticVarSet( "BackColor", colorYellow );
DownPx1 = StaticVarGet( "DownPx1" );
DownPy1 = StaticVarGet( "DownPy1" );
xMove = MousePx - DownPx1;
yMove = MousePy - downPy1;
PrevxOffset = StaticVarGet( "xOffset" );
PrevYOffset = StaticVarGet( "YOffset" );
xOffset = PrevxOffset + xMove;
yOffset = PrevYOffset + yMove;
StaticVarSet( "xOffset", xOffset );
StaticVarSet( "yOffset", yOffset );
StaticVarSet( "MoveinProgress", False );
}


BackColor = Nz( StaticVarGet( "BackColor" ), colorYellow );

xOffset = StaticVarGet( "xOffset" );
YOffset = StaticVarGet( "YOffset" );
X1 = XOffset;
Y1 = YOffset;
X2 = XOffset + ParamSqrSize;
Y2 = YOffset + ParamSqrSize;
StaticVarSet( "X1", X1 );
StaticVarSet( "X2", X2 );
StaticVarSet( "Y1", Y1 );
StaticVarSet( "Y2", Y2 );
DrawButton( "TEST", x1, y1, x2, y2, BackColor );

 

Этот пример рисует на экране прямоугольник желтого цвета, отслеживает клик на нем и по второму клику перемещает его на новое место. При этом цвет прямоугольника изменяется.

 


См. также:

Комментарии   

# Otokar 10.12.2012 17:30
Пригодилось. спс!

Недостаточно прав для комментирования