Mostrando entradas con la etiqueta Interface. Mostrar todas las entradas
Mostrando entradas con la etiqueta Interface. Mostrar todas las entradas

Rotaciones en 3D con RAD Studio


En este post veremos cómo crear y rotar una figura en 3D,  utilizando Delphi RAD Studio.

Empezamos desde File – New – Multi-Device Application y
seleccionamos “3D Application





A continuación vamos añadiendo los componentes básicos:

-     tViewPort3D : será el lienzo donde se mostrará la
animación en 3D.

-    tColorMaterialSource, en la propiedad “Color”
selecciono “Snow”
.
tLightMaterialSource, dejamos marcadas las
propiedades como se indica en la imagen: 



Ahora tenemos que indicar la orientación de la luz y la
orientación del observador de la escena.

Añadimos 2 componentes más:

tLight


tCamera






Estos dos últimos componentes tienen unos botones de control
que permiten moverlos en los 3 ejes del espacio.




Y otro botón más que permite cambiar el tamaño de cada una
de las caras del objeto.



Por último sólo nos queda añadir los bloques de la figura
que queremos crear.

En nuestro caso utilizaremos los siguientes:

tRoundcube (el bloque principal), tPlane (será la pantalla)
y dos tDisk correspondientes a las cámaras




Utilizando los controles de orientación tendremos que mover
cada bloque
hasta conseguir lo siguiente:



Ahora sólo nos queda conseguir el movimiento de la figura

Lo haremos utilizando un tTimer y variaremos el ángulo de
rotación.


PROCEDURE TForm1.Timer1Timer(Sender: TObject);


BEGIN


  WITH
RoundCube1.RotationAngle DO


    Point := Point +
Point3D(2, 0, 0);




END;





Activamos el Timer y 
¡¡ ya lo tenemos !!





UNIT Unit1;

INTERFACE

USES
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
System.Math.Vectors, FMX.Types3D, System.Sensors, System.Sensors.Components,
FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.MaterialSources,
FMX.Objects3D, FMX.Controls3D, FMX.Viewport3D;

TYPE
TForm1 = CLASS(TForm)
Viewport3D1: TViewport3D;
Dummy1: TDummy;
Camera1: TCamera;
Light1: TLight;
RoundCube1: TRoundCube;
Plane1: TPlane;
Disk1: TDisk;
LightMaterialSource1: TLightMaterialSource;
ColorMaterialSource1: TColorMaterialSource;
Disk2: TDisk;
Timer1: TTimer;
PROCEDURE Timer1Timer(Sender: TObject);
PRIVATE
{ Private declarations }
PUBLIC
{ Public declarations }
END;

VAR
Form1: TForm1;

IMPLEMENTATION

{$R *.fmx}


PROCEDURE TForm1.Timer1Timer(Sender: TObject);
BEGIN

WITH RoundCube1.RotationAngle DO
Point := Point + Point3D(2, 0, 0);

END;

END.




Mostrar los modos de visualización de la tarjeta gráfica

Pasos a seguir para mostrar con Delphi los diferentes modos de visualización de la tarjeta gráfica del  PC.



unit Main;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TForm1 = class(TForm)

    Button1: TButton;

    ListBox1: TListBox;

    Button2: TButton;

    Memo1: TMemo;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}





// En el form creamos un tLlistbox y un tButton  y en el evento Onclic de este último ponemos lo siguiente

procedure TForm1.Button1Click(Sender: TObject);

var

 d: _devicemodeA;

 i: integer;

begin

 i:=0;

 while EnumDisplaySettings(nil,i,d)<>false do

  begin

   ListBox1.Items.Add('Mode: '+IntToStr(i+1)+' - '+FloatToStr(D.dmPelsWidth)+'x'+FloatToStr(D.dmPelsHeight)+'x'+FloatToStr(D.dmBitsPerPel)+' - '+FloatToStr(D.dmDisplayFrequency)+' Hz');

   inc(i,1);

  end;

end;



// Al hacer clic sobre uno de los modos de pantalla pulsamos el Button2 y lo activamos.

procedure TForm1.Button2Click(Sender: TObject);

var

 d: _devicemodeA;

begin

 EnumDisplaySettings(nil, ListBox1.ItemIndex, D);

 ChangeDisplaySettings(D, CDS_UPDATEREGISTRY);

end;



end.



El resultado es un ListBox con todos los modos de visualización de nuestra tarjeta de vídeo.

Mode: 2 - 640x480x8 - 60 Hz

Mode: 3 - 640x480x8 - 72 Hz

Mode: 4 - 640x480x8 - 75 Hz

Mode: 5 - 640x480x8 - 85 Hz

Mode: 6 - 640x480x8 - 100 Hz

Mode: 7 - 640x480x8 - 120 Hz

Mode: 8 - 640x480x8 - 160 Hz

Mode: 9 - 640x480x8 - 200 Hz

Mode: 10 - 720x480x8 - 60 Hz

Mode: 11 - 800x480x8 - 60 Hz

Mode: 12 - 800x600x8 - 56 Hz

Mode: 13 - 800x600x8 - 60 Hz

Mode: 14 - 800x600x8 - 72 Hz

Mode: 15 - 800x600x8 - 75 Hz

Mode: 16 - 800x600x8 - 85 Hz

Mode: 17 - 800x600x8 - 100 Hz

Mode: 18 - 800x600x8 - 120 Hz

Mode: 19 - 800x600x8 - 160 Hz

Mode: 20 - 960x600x8 - 60 Hz

Mode: 21 - 1024x576x8 - 60 Hz

Mode: 22 - 1024x768x8 - 60 Hz

Mode: 23 - 1024x768x8 - 70 Hz

Mode: 24 - 1024x768x8 - 75 Hz










Juego de damas avanzado


Aquí tienen el conocido juego de las damas. Tiene como opción la posibilidad de jugar humano-máquina, máquina-máquina, giro de tablero y varios niveles (beginer, intermediate, expert).












El juego de las líneas en 3D










 Juego interesante, adictivo y muy bien programado.





Autor: Alexander Izmukhambetov 





Mostrar una regla en pantalla











Regla configurable en pantalla con las siguientes características:


  • Medida en pixels

  • Media en milímetros

  • Transparencia configurable

  • Tickers horizontales y verticales


etc..



http://delphi.about.com/library/weekly/aa080205a.htm

by Zarko Gajic

Codigo fuente










Componente para modificar la interfaz de usuario de tus programas

AlphaControls es una VCL que mejorará notablemente la interfaz gráfica de tus aplicaciones de escritorio en Delphi .





Lo que os presento ahora es la versión AlphaControls Lite Edition v.8.14 que contiene 13 componentes gratuitos y totalmente funcionales derivados del dpk de AlphaControls (TsSkinManager, TsSkinProvider, TsEdit, TsCheckBox, TsPanel, TsButton, TsScrollBar, TsLabel, TsWebLabel, TsBitBtn, TsComboBox, TsListBox and TsGauge).





Características:




  1. Es posible incorporar varios skin dentro del Exe.

  2. Los skins se pueden actualizar fácilmente.

  3. El dibujo de los componentes se producen por capas por lo que pueden tener bordes, sombras y otros bonitos efectos.

  4. También se pueden aplicar a los componentes standard (tEdit, tMemo, Tcombobox, ...)

  5. Los elementos de cada control son calculados en tiempo real, aunque cualquier control puede ser libremente movido y redimensionado en tiempo real.

  6. Los botones soportan PNG-glyhs.


Soporta los siguientes compiladores:



Delphi 5/6/7

Delphi 2005/2006/2007/2009/2010/XE/XE2/XE3 (x32/x64)

C++ Builder 6/2006/2007/2009/2010/XE/XE2/XE3





Para aplicarlo en vuestros programas tenéis que incorporar el componente tsSkinManager con la propiedad "Active=True" sobre vuestro Form y después hacer lo mismo con el tsSkinProvider.

Hay que tener la precaución de poner la carpeta "Skin" que viene en el componente, en directorio raíz del equipo (c:\skin)



Descarga del componente



Página del fabricante





Aquí tenéis varios skins gratuitos:





Click for enlarge


Download Mint

Serge Goncharov, 2012-11-15, 50.7 Kb

Rate :    9.24 / 17




2.


Click for enlarge


Download Zest

Serge Goncharov, 2012-10-26, 27.7 Kb

Rate :    9.18 / 17




3.


Click for enlarge


Download Subway

Graf Sascha, 2012-10-12, 98.4 Kb

Rate :    8.69 / 26




4.


Click for enlarge


Download Black box

Graf Sascha, 2012-09-27, 67.1 Kb

Rate :    9.08 / 48




5.


Click for enlarge


Download iOS dark

Serge Goncharov, 2012-09-11, 41.9 Kb

Rate :    8.55 / 33




6.


Click for enlarge


Download Toxic

Graf Sascha, 2012-07-13, 59.5 Kb

Rate :    9.06 / 32




7.


Click for enlarge


Download Android OS

Graf Sascha, 2012-06-24, 42.6 Kb

Rate :    9.10 / 48




8.


Click for enlarge


Download Windows 8

Graf Sascha, 2012-06-23, 60.8 Kb

Rate :    8.04 / 46




9.


Click for enlarge


Download Light Board

Serge Goncharov, 2012-04-14, 107.3 Kb

Rate :    9.10 / 42




10.


Click for enlarge


Download Autumn sky

Serge Goncharov, 2012-04-02, 66.5 Kb

Rate :    9.11 / 54




11.


Click for enlarge


Download WOT

Serge, 2012-01-22, 123.7 Kb

Rate :    8.41 / 61




12.


Click for enlarge


Download WEB2

Serge Goncharov, 2011-10-17, 37.5 Kb

Rate :    9.14 / 84












Utilizar redes neuronales para resolver un captcha


Aquí tienen una unit llamada CaptchaTrainer que se utiliza para resolver un captcha . Para ello utilizamos la biblioteca open source FANN http://leenissen.dk/fann/wp/ que sirve para implementar redes neuronales artificiales multicapa.





FANN ha sido traducido a 15 lenguajes de programación diferentes, entre ellos no podía faltar Delphi (http://leenissen.dk/fann/wp/language-bindings/ )




Una red neuronal se compone de unidades llamadas neuronas y esta formada por tres capas:

1) Capa de entrada (input layer) que recibe las señales del entorno

2) Capa oculta (hidden layer)

3) Capa de salida (ouput layer)

Cada neurona recibe una o varias entradas y tiene una o varias salidas que viene dada por una serie de funciones:

- Función de propagación: (también conocida como función de excitación), que por lo general consiste en la entrada (suma de todas las señales de entrada) multiplicada por el peso de su interconexión.

- Función de activación, que modifica a la anterior. Puede no existir, siendo en este caso 

Función de transferencia, que se aplica al valor devuelto por la función de activación. 

Se utiliza para acotar la salida de la neurona. Algunas de las más utilizadas son la función sigmoide (genera outputs de valores en el intervalo [0,1]) y la tangente hiperbólica (genera outputs de valores en el intervalo [-1,1])



El número de neuronas de entrada se selecciona en función de las variables de entrada del problema que queramos predecir.

Número de capas ocultas: Las capas ocultas proporcionarán a la red la capacidad de generalizar. En la práctica, se suelen usar redes neuronales con una o dos capas ocultas. Sin embargo, no hay un criterio natural acerca de la fórmula de selección óptima del número de neuronas ocultas. Baily y Thompson (1990) sugieren que el número de neuronas ocultas en una red neuronal de tres capas debe ser de 75% del número de neuronas de entrada mientras que Ersoy (1990) propone duplicar el número de neuronas ocultas hasta que el rendimiento de la red comience a deteriorarse.




Bien, después de esta introducción a las redes neuronales pasamos a comentar lo que hace esta unit:

Inicialmente se crea la red neuronal definiendo el número de entradas en las  3 capas:  entrada, salida y oculta. 


Como la entrada de la red es el bitmap del captcha, el número de neuronas de la entrada sería el tamaño del bitmap bitmapWidth * bitmapHeight.


Hay que tener en cuenta que los valores de cada una de las entradas / salidas siempre serán 1 o 0 (  fInputs[i]:= [1/0]     fOutputs[i]:= [1/0]   )  



Después necesitamos entrenar la red y para ello utilizamos la función Learn que tiene 2 parámetros de entrada: el captcha en formato bitmap y el número que representa y cuando terminemos el entrenamiento utilizaremos la función Guess  para probar la precisión de ese reconocimiento.



Otro aspecto a comentar es la línea 


 result := FANN.Train(fInputs, fOutputs);

del procedimiento Learn, y es que la variable result representa el error cuadrático medio del valor obtenido por la red respecto del valor esperado, por lo que debemos intentar que este error sea lo más pequeño posible para hacer que la red sea lo más precisa posible.





unit CaptchaTrainer;

interface

uses
SysUtils, Graphics, FannNetwork;

type
TCaptchaTrainer = class
private
fInputs, fOutputs: array of single;
public
FANN: TFannNetwork;
constructor Create;
procedure CreateNN(numInputs, numOutputs: integer); overload;
procedure CreateNN(bitmapWidth, bitmapHeight, numOutputs: integer); overload;
procedure LoadNN(fileName: string);
procedure SaveNN(fileName: string);
function Learn(bitmap: TBitmap; value: integer): single;
function Guess(bitmap: TBitmap): integer;
destructor Destroy; override;
end;

implementation

{ TCaptchaTrainer }

function MaxValueIndex(const Data: array of Single): integer;
var I: Integer;
maxvalue: single;
begin
maxvalue := Data[Low(Data)];
result := Low(Data);
for I := Low(Data) + 1 to High(Data) do
if maxvalue < Data[I] then
begin
maxvalue := Data[I];
result := I;
end;
end;

constructor TCaptchaTrainer.Create;
begin
FANN := TFannNetwork.Create(nil);
with FANN do
begin
ActivationFunctionHidden := afFANN_SIGMOID;
ActivationFunctionOutput := afFANN_SIGMOID;
TrainingAlgorithm := taFANN_TRAIN_RPROP;
ConnectionRate := 1;
LearningRate := 0.1;
end;
end;

procedure TCaptchaTrainer.CreateNN(numInputs, numOutputs: integer);
begin
SetLength(fInputs, numInputs);
SetLength(fOutputs, numOutputs);
with FANN.Layers do
begin
Add(IntToStr(numInputs));
Add(IntToStr(50));
Add(IntToStr(numOutputs));
end;
FANN.Build;
end;

procedure TCaptchaTrainer.CreateNN(bitmapWidth, bitmapHeight,
numOutputs: integer);
begin
SetLength(fInputs, bitmapWidth * bitmapHeight);
SetLength(fOutputs, numOutputs);
with FANN.Layers do
begin
Add(IntToStr(bitmapWidth * bitmapHeight));
Add(IntToStr(50));
Add(IntToStr(numOutputs));
end;
FANN.Build;
end;

destructor TCaptchaTrainer.Destroy;
begin
FANN.UnBuild;
FANN.Free;
inherited;
end;

function TCaptchaTrainer.Guess(bitmap: TBitmap): integer;
var x,y,i: integer;
begin
i:=0;
for x:=0 to bitmap.Width-1 do
for y:=0 to bitmap.Height-1 do
begin
if bitmap.Canvas.Pixels[x,y]=$00000000 then fInputs[i]:=1 else fInputs[i]:=0;
inc(i);
end;
FANN.Run(fInputs, fOutputs);
result := MaxValueIndex(fOutputs);
end;

function TCaptchaTrainer.Learn(bitmap: TBitmap; value: integer): single;
var x,y,i: integer;
begin
i:=0;
for x:=0 to bitmap.Width-1 do
for y:=0 to bitmap.Height-1 do
begin
if bitmap.Canvas.Pixels[x,y]=$00000000 then fInputs[i]:=1 else fInputs[i]:=0;
inc(i);
end;
for i:=0 to high(fOutputs) do if i=value then fOutputs[i]:=1 else fOutputs[i]:=0;
result := FANN.Train(fInputs, fOutputs);
end;

procedure TCaptchaTrainer.LoadNN(fileName: string);
begin
FANN.LoadFromFile(fileName);
end;

procedure TCaptchaTrainer.SaveNN(fileName: string);
begin
FANN.SaveToFile(fileName);
end;

end.





Además me gustaría recordarles que si quieren iniciarse en la programación con Delphi pueden utilizar una versión totalmente gratuita llamada Delphi Starter Edition que la pueden descargar desde aquí.
Te puede interesar:


Red neuronal backpropagation 

Redes neuronales con delphi

Crear un captcha con delphi



Pulsa aquí si quieres un buen libro sobre redes neuronales. 





Mi primer app Android con Delphi XE5








Muchas cosas han estado sucediendo desde que Embarcadero Delphi lanzó la versión XE4. 

Debo decir que me quedé asombrado con lo que lograron en tan poco tiempo con esa versión. 

Sólo ser capaz de desarrollar sus propias aplicaciones móviles utilizando Delphi era algo

 increíble.

 A pesar de que me encontré con que la versión era bastante engorrosa ya que no era trivial 

la manera de implementar la aplicación en un sistema iOS. Yo le di una oportunidad sin 

mucho éxito (necesitaba una máquina virtual para el dispositivo Mac y tuve que pedir 

prestado un  iPad de alguien para publicar la aplicación, pero no soy una persona Mac). 

Por lo tanto, lo que 

realmente estaba esperando era su última versión Delphi XE5 con compatibilidad Android. 

La parte más interesante: lo fácil que es crear un proyecto y desplegarlo en su dispositivo 

Android.

 En menos de un minuto usted puede tener su "hola mundo!" una app en su teléfono con

 sólo unos clics.

Delphi XE5 viene con el SDK de Android 22.0.1 32 bits (al menos el que yo tengo al instalar

 Delphi)

 y se puede ver todos los paths de configuración para un SDK, desde Tools -> SDK

 Manager:















El primer paso es habilitar el dispositivo para aceptar USB Debugging. Para lograr esto, 

puede seguir los pasos del siguiente enlace, que relaciona la forma en que tiene que activar

 el modo de desarrollador para el Samsung Galaxy Note 3. Yo tengo un Samsung Galaxy Mega,

 por lo que se aplica la misma regla:












Una vez hecho, usted verá en su móvil las siguientes opciones:









Active "Still awake" y "USB debugging". Una vez que estén activados, conecte el teléfono al

ordenador con el cable USB. Entonces, el teléfono le preguntará si desea permitir la depuración

 USB: Acéptelo y vamos a ir a Delphi UI.





Ahora, en Delphi XE5, crearé un project desde File -> New -> FireMonkey Mobile Application.








Como mi nuevo dispositivo no está en la lista de dispositivos disponibles, elijo alguno que más o

 menos tenga las mismas dimensiones. En este caso, como mi phablet es un 6,3 pulgadas,

 elijo la opción WSVGA 7 ":












Una vez hecho esto, quiero crear un simple aplicación  "hola mundo" que consiste en mostrar

 una etiqueta y cuando se pulse un botón, que muestra un mensaje. Una aplicación muy

 sencilla pero sin cambiar mi forma de pensar (Estoy construyendo una aplicación de Delphi).











1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30



unit Unit1;




interface




uses


  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,


  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls;




type


  TForm1 = class(TForm)


    Label1: TLabel;


    Button1: TButton;


    procedure Button1Click(Sender: TObject);


  private


    { Private declarations }


  public


    { Public declarations }


  end;




var


  Form1: TForm1;




implementation




{$R *.fmx}




procedure TForm1.Button1Click(Sender: TObject);


begin


  showMessage('Delphi XE5 Rocks');


end;










Como se puede ver, estoy codificando en Delphi. Una vez hecho esto, Si has seguido los pasos 

anteriores correctamente, el teléfono debe aparecer en targets para el SDK:









Ahora sólo tengo que guardar mi proyecto y ejecutarlo para que pueda ser desplegado

 automáticamente en mi teléfono. Una vez hecho esto, voy a ser capaz de ver la aplicación en

 mi teléfono y realizar las operaciones que he diseñado:






Aquí está. Como se puede ver con unos sencillos pasos y con un gran resultado: Una aplicación 

Delphi en su dispositivo Android más querido. 







Autor: Jordi Corbilla


Traducción y adaptación: delphimagic














Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...