PDA

Ver la Versión Completa : Convertir codigo Delphi a Builder


_Willa
14-02-2008, 16:26:07
HOla,

Ahora q tengo un poco más de tiempo estoy convirtiendo a una serie de componentes que estan creados en Delphi a Builder...
Lo bueno es que son de codigo abierto, por eso me he decidido a convertir los ejemplos a Builder.

Me han surgido una serie de dudas a la hora de convertir, y por eso lo indico aqui a ver si hay alguien que sepa me puede indicar . "el paso a builder"


L=Round(Sqrt(Sqr(PT.x-LastBrushX)+Sqr(PT.y-LastBrushY)));

Necesito aqui las instrucciones Round, Srt, Sqr


if (SXSkinLibrary1.Styles[A] is TSXSkinGeneralStyle) then

La sentencia if, especialmente la clausula is, indicar que SXSkinLibrary1.Styles[A] es del tipo TSXSkinStyleList



Dec(StartDragPT.X,Left);

Creo que es decrementar tantan vaces como indique "Left"

Al igual que creo que Inc(BrushCounter,2); // en Delphi
creo que en Builder, seria algo asi como BrushCounter+=2; si existe alguien q me lo confirme.

Bueno, pues eso si hay alguien que sepa delphi o que tb ha realizado alguna que otra adaptación a builder, ...y tiene tiempo pues que me heche una manilla. Gracias.
Si alguien ha trabajado con estos componentes que se ponga en
contacto conmigo y comente que tal le va, los problemas que ha tenido, etc.

Los componentes son:
http://www.saarixx.info/sxskincomponents/en/

Ñuño Martínez
15-02-2008, 09:15:30
{ Object Pascal. }
L = Round (Sqrt (Sqr (PT.x - LastBrushX) + Sqr (PT.y - LastBrushY)));

// C++
L == (int)(sqrt (pow (PT->x - LastBrushX, 2) + pow (PT->y - LastBrushY, 2)));
Fíjate que en Object Pascal has escrito "L = ..." y no "L := ..." ;)

Por otro lado utilizo el operador flecha (->) ya que, por lo que sé, Builder utiliza punteros para referenciar los objetos.


{ Object Pascal. }
if (SXSkinLibrary1.Styles[A] is TSXSkinGeneralStyle) then

// C++
if (strcmp (typeid (SXSkinLibrary1->Styles[A]).name (), "TSXSkinGeneralStyle") == 0) {
El código anterior fallará más que una escopeta de feria. Deberías buscar otro mecanismo. Lee esto (http://en.wikibooks.org/wiki/C%2B%2B_Programming/RTTI).


{ Object Pascal }
Dec (StartDragPT.X, Left);
Inc (BrushCounter, 2);

// C++
StarDragPT->X -= Left;
BrushCounter += 2;

Gabo
15-02-2008, 10:10:13
Sólo una pequeña nota...

= es para las asignaciones en una variable y == para preguntar si una expresión es igual a otra, por lo que:

// C++
L == (int) (sqrt (pow (PT->x - LastBrushX, 2) + pow (PT->y - LastBrushY, 2));


Debería ir con un solo =.

Ñuño Martínez
15-02-2008, 11:37:10
[Gabo], tienes razón, pero como ya escribí antes _Willa escribió "L =..." (comparación) y no "L :=..." (asignación). De todas formas, buena puntualización que seguro que alguno se despista.