Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#1: 2012-02-14 06:32:07 ЛС | профиль | цитата
Возможно, ошибка в элементе PaintBox, помогите это исправить:

code_26864.txt


карма: 0

0
файлы: 1code_26864.txt [972B] [97]
Ответов: 3889
Рейтинг: 362
#2: 2012-02-14 08:40:13 ЛС | профиль | цитата
login, PaintBox тут не при чём, "прыжок" происходит из-за отрицательных координат на входе Img_Rectangle.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#3: 2012-02-14 09:00:33 ЛС | профиль | цитата
1nd1g0, а почему? как это исправить?
Ато обьекты дергаются перед тем как заехать за левую границу.
карма: 0

0
Ответов: 1376
Рейтинг: 197
#4: 2012-02-14 10:30:49 ЛС | профиль | цитата
вот такое должно было быть, а я как-то промазал
code_26865.txt
карма: 1

1
файлы: 1code_26865.txt [1.1KB] [110]
Голосовали:login
Ответов: 3889
Рейтинг: 362
#5: 2012-02-14 11:10:19 ЛС | профиль | цитата
login, нет там никакой мистики для опытного программиста, знающего, что отрицательные числа в бинарном виде выглядят как заполненные единицами в старших разрядах. Так как в старших разрядах лежит координата Y, забитая единицами она считается за -1, убедитесь сами:
code_26866.txt
------------ Дoбавленo в 11.10:
А вот и способ это "исправить"

Add(MainForm,49135,560,336)
{
Width=812
Height=171
Position=1
}
Add(PaintBox,12427585,560,182)
{
Left=325
Top=45
Width=205
Height=85
Color=-16777198
Point(Handle)
}
Add(Img_Rectangle,3190117,560,252)
{
@Hint=#17:Квадратики клипов|
Point2=3276900
Point2AsOffset=0
rX=6
rY=6
Color=4420756
BgColor=6702848
Style=1
Point(Point1)
Point(Point2)
link(onDraw,12427585:doRefresh,[(604,258)(604,232)(540,232)(540,188)])
link(Bitmap,12427585:Bitmap,[])
}
Add(TrackBar,12664311,413,245)
{
Left=5
Top=10
Width=790
Max=200
Min=-200
TickCount=10
Position=1
link(onPosition,15731501:doEvent1,[])
}
Add(Hub,15731501,483,245)
{
OutCount=3
link(onEvent1,12427585:doClear,[(522,251)(522,195)])
link(onEvent2,9269917:doOperation,[])
link(onEvent3,2645748:doConvert,[(507,265)(507,342)])
}
Add(Label,3584209,560,294)
{
Left=125
Top=40
Width=202
Height=17
Caption="Вот тут подпрыгивает на 1 пиксель! >>"
}
Add(StyleXP,8624438,560,378)
{
}
Add(ConvertorEx,2645748,518,336)
{
Mode=8
link(onResult,49135:doCaption,[])
}
Add(Math,9269917,518,252)
{
OpType=4
Op2=65535
ResultType=0
link(onResult,3190117:doDraw,[])
}


карма: 1

0
файлы: 1code_26866.txt [1KB] [90]
Ответов: 1429
Рейтинг: 50
#6: 2012-02-14 11:18:01 ЛС | профиль | цитата
1nd1g0, спасибо, а можно это в Delphi сделать?
Я посмотрел в элементе формирования точки и пишу в delphi-код такое:

res := ReadInteger(word(Y shl 16) + word(X));
Не компилируется. Что я делаю не так?

Error: Operator not applicable to this operand type
Error: Invalid typecast


Не хочется такое количество рассчетов выносить за пределы FTCG, и не хочется применять условие "if" (if используется в операторе "and")
карма: 0

0
Ответов: 3889
Рейтинг: 362
#7: 2012-02-14 11:28:59 ЛС | профиль | цитата
login, он же Вам пишет, типы не совпадают. Например, бинарный сдвиг пытаетесь применить к левому типу, например, hiEvent.
login писал(а):
а можно это в Delphi сделать?

Так, вроде, в паскале есть бинарный оператор AND.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#8: 2012-02-14 11:36:54 ЛС | профиль | цитата
Да, есть бинарный AND:

res := (X and 65535) + Y;
Error: Operator not applicable to this operand type

не компилируется, а как правильно надо писать?
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#9: 2012-02-14 11:50:29 ЛС | профиль | цитата
login писал(а):
res := (X and 65535) + Y;

Если X и Y верхние точки, то вот так должно прокатить


res := (ToIntegerEvent(X) and 65535) + ToIntegerEbent(Y);

А тебе не кажется, что X и Y надо поменять местами
карма: 22

0
Ответов: 1429
Рейтинг: 50
#10: 2012-02-14 11:53:22 ЛС | профиль | цитата
nesco,
hiFTCG_Tools_8EAC570.pas(585) Error: Incompatible types: 'THI_Event' and 'Real'

карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#11: 2012-02-14 11:55:36 ЛС | профиль | цитата
login, к Real нельзя применять AND, только к Cardinal и Integer
------------ Дoбавленo в 11.55:
login писал(а):
Incompatible types: 'THI_Event' and 'Real'

Все правильно, я же написал конкретно
nesco писал(а):
Если X и Y верхние точки

карма: 22

0
Ответов: 3889
Рейтинг: 362
#12: 2012-02-14 12:01:12 ЛС | профиль | цитата
res := (ToIntegerEvent(X) and 65535) or (ToIntegerEvent(Y) shl 16);

карма: 1

0
Ответов: 1429
Рейтинг: 50
#13: 2012-02-14 12:15:40 ЛС | профиль | цитата
1nd1g0, nesco, перевел X и Y в integer стало компилировать обычные: "(%1 shl 16) + %2" и "(%1 and 65535) + %2"

Сейчас разбираюсь почему на выходе ничего нет.
------------ Дoбавленo в 12.15:
(%2 shl 16) + %1 - работает но края всеравно "подпрыгивают".
(%2 and 65535) + %1 - Работает но координаты выдает такие что на поле ничего нет, где-то далеко за пределами поля.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#14: 2012-02-14 12:23:24 ЛС | профиль | цитата
login, блин, я же показал формулу:

(%1 and 65535) or (%2 shl 16)
карма: 1

1
Голосовали:login
Ответов: 1429
Рейтинг: 50
#15: 2012-02-14 12:26:10 ЛС | профиль | цитата
1nd1g0, сорри я просто тупой, не понял. Эта формула заработала как надо! СпасибО!
карма: 0

0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)