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 imagen se ven los electrones saliendo en tiempo real de la placa de color gris hacia la placa de color rojo acelerándose cuando atraviesan el campo eléctrico.

El escenario se puede girar o rotar en todas direcciones para apreciar mejor el movimiento.


Autor:

Email: systemhalt@nm.ru


www.systemhalt.nm.ru


Codigo fuente









Obtener parametros de los paneles solares










Programa que calcula partiendo de los siguientes datos: (se obtienen de la hoja de características del fabricante de los módulos fotovoltaicos)


Intensidad de cortocircuito (Isc).

Tensión de circuito abierto (Voc).

Tensión PMP (Vm).

Intensidad PMP (Im).

Porcentaje de eficiencia.

Temperatura operación nominal (TONC) en grados Kelvin.



El software calcularía los siguientes:





Factor de forma (FF).

Temperatura de célula (Tc) en grados kelvin.

Área (Ac) en metros cuadrados.

Máxima potencia (Pm).

Resistencia para PMP (Rm).




Pulsando el botón "Calcular datos irradiancia G" la aplicación obtendrá los siguientes datos en condiciones de irradiancia G:



Temperatura célula (Tc2).

Tensión (Voc2).

Intensidad cortocircuito (Isc2).

Máxima potencia (Pm2).

Eficiencia con G.





Codigo fuente



Autor: ajpdsoft

Fuente:  http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=439



Ejemplo:

Cálculo para un sistema básico fotovoltaico














Corrección: E4=E1xE2xE3, E3 es la cantidad de horas de uso.





Cálculo de la corriente requerida





A1 Carga total diaria (sumar la columna E4)                                      273
watts-hora/día


A2 Tensión CD del sistema (generalmente 12 ó 24 V)                       12 voltios


A3 Carga diaria corriente (A1/A2)                                                     
22.8 amperios-hora


A4 Multiplicar con el factor de seguridad 20% (para
compensar


las pérdidas en las baterías y otros componentes)                           1.2


A5 Carga diaria corriente corregida (A4*A3)                                     27.3
amperios-hora


A6 Promedio de horas de sol por día.                                               
4 horas


A7 Amperaje que el sistema tendrá que producir (A5/A6)                 6.8 amperios





Cálculo del número de paneles





B1 Amperaje máximo del modulo solar seleccionado


(según especificaciones del fabricante)                                            
3.9 amperios


B2 Divida la línea A7 entre la B1 para obtener el número


de módulos que se necesita                                                             
1.75


B3 Redondee al número completo inmediato superior                       2





Cálculo del número de baterías





C1 Carga total diaria (A5)                                                                  
27.3 amperios-hora


C2 Días de reserva (este es el tiempo que el


sistema tiene que estar funcionando sin sol)                                     3


C3 Capacidad nominal del banco de baterías (C1*C2)                       81.9 amperios-hora


C4 Factor de profundidad de descarga (generalmente 80%,


significa que siempre se deja un 20% de reserva en las
baterías)    0.8


C5 Capacidad corregida del banco de baterías (C3/C4)                    102.4 amperios-hora


C6 Capacidad nominal de batería


(según especificaciones del fabricante)                                             
120 amperios-hora


C7 Número de baterías       
(C5/C6)                                                   0.9


C8 Número de baterías (redondear C7)                                              1














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.




Crear códigos QR

 


 

Los códigos QR son una forma eficiente de almacenar y acceder a información. Las ventajas de usarlos son:

  1. Facilidad de uso: Los códigos QR pueden ser escaneados fácilmente con la mayoría de los smartphones.
  2. Versatilidad: Pueden ser utilizados para una amplia gama de propósitos, desde el marketing hasta la identificación de productos.
  3. Eficiencia: Permiten un acceso rápido a la información, simplemente escaneando el código con un dispositivo móvil.
  4. Ahorro de espacio: Pueden almacenar una gran cantidad de información en un espacio muy pequeño.

Ahora, vamos a ver cómo podríamos generar códigos QR en Delphi. Para este ejemplo, se necesita una biblioteca de terceros para generar códigos QR, como “DelphiZXingQRCode”.

En el archivo adjunto les dejo al archivo  DelphiZXingQRCode.pas en la carpeta "Source"



UNIT DelphiZXingQRCodeTestAppMainForm;

// Demo app for ZXing QRCode port to Delphi, by Debenu Pty Ltd (www.debenu.com)
// Need a PDF SDK? Checkout Debenu Quick PDF Library: http://www.debenu.com/products/development/debenu-pdf-library/

INTERFACE

USES
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DelphiZXingQRCode, Vcl.ExtCtrls,
Vcl.StdCtrls, jpeg;

TYPE
TForm1 = CLASS(TForm)
edtText: TEdit;
Label1: TLabel;
cmbEncoding: TComboBox;
Label2: TLabel;
Label3: TLabel;
edtQuietZone: TEdit;
Label4: TLabel;
PaintBox1: TPaintBox;
Memo1: TMemo;
Button1: TButton;
Label5: TLabel;
PROCEDURE HazCodigoQR(texto: STRING);
PROCEDURE FormDestroy(Sender: TObject);
PROCEDURE FormCreate(Sender: TObject);
PROCEDURE PaintBox1Paint(Sender: TObject);
PROCEDURE edtTextChange(Sender: TObject);
PROCEDURE cmbEncodingChange(Sender: TObject);
PROCEDURE edtQuietZoneChange(Sender: TObject);
PROCEDURE Button1Click(Sender: TObject);
PROCEDURE CargarFichero;
PRIVATE
QRCodeBitmap: TBitmap;
PUBLIC
PROCEDURE Update;
END;

VAR
Form1: TForm1;

IMPLEMENTATION

{$R *.dfm}

PROCEDURE TForm1.Button1Click(Sender: TObject);
VAR
i: integer;
bmp: TBitmap;
MyJPEG: TJPEGImage;

BEGIN
bmp := TBitmap.Create;
MyJPEG := TJPEGImage.Create;
TRY
bmp.Width := PaintBox1.Width;
bmp.Height := PaintBox1.Height;
FOR i := 0 TO Memo1.lines.count - 1 DO
BEGIN
IF trim(Memo1.lines[i]) <> '' THEN
BEGIN

HazCodigoQR(Memo1.lines[i]);
bmp.Canvas.CopyRect(PaintBox1.ClientRect, PaintBox1.Canvas, PaintBox1.ClientRect);
WITH MyJPEG DO
BEGIN
Assign(bmp);
SaveToFile('.\imagenes\' + Memo1.lines[i] + '.jpg');
END;

END;

END;

FINALLY
bmp.Free;
MyJPEG.Free;
END;
END;

PROCEDURE TForm1.cmbEncodingChange(Sender: TObject);
BEGIN
Update;
END;

PROCEDURE TForm1.edtQuietZoneChange(Sender: TObject);
BEGIN
Update;
END;

PROCEDURE TForm1.edtTextChange(Sender: TObject);
BEGIN
Update;
END;

PROCEDURE TForm1.FormCreate(Sender: TObject);
BEGIN
QRCodeBitmap := TBitmap.Create;
Update;
CargarFichero;
END;

PROCEDURE TForm1.CargarFichero;
BEGIN
Memo1.lines.clear;
Memo1.lines.loadfromfile('codigos.txt');
Label5.caption := Memo1.lines.count.Tostring;
END;

PROCEDURE TForm1.FormDestroy(Sender: TObject);
BEGIN
QRCodeBitmap.Free;
END;

PROCEDURE TForm1.PaintBox1Paint(Sender: TObject);
VAR
Scale: Double;
BEGIN
PaintBox1.Canvas.Brush.Color := clWhite;
PaintBox1.Canvas.FillRect(Rect(0, 0, PaintBox1.Width, PaintBox1.Height));
IF ((QRCodeBitmap.Width > 0) AND (QRCodeBitmap.Height > 0)) THEN
BEGIN
IF (PaintBox1.Width < PaintBox1.Height) THEN
BEGIN
Scale := PaintBox1.Width / QRCodeBitmap.Width;
END
ELSE
BEGIN
Scale := PaintBox1.Height / QRCodeBitmap.Height;
END;
PaintBox1.Canvas.StretchDraw(Rect(0, 0, Trunc(Scale * QRCodeBitmap.Width), Trunc(Scale * QRCodeBitmap.Height)), QRCodeBitmap);
END;
END;

PROCEDURE TForm1.Update;
VAR
QRCode: TDelphiZXingQRCode;
Row, Column: integer;
BEGIN
QRCode := TDelphiZXingQRCode.Create;
TRY
QRCode.Data := edtText.Text;
QRCode.Encoding := TQRCodeEncoding(cmbEncoding.ItemIndex);
QRCode.QuietZone := StrToIntDef(edtQuietZone.Text, 4);
QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns);
FOR Row := 0 TO QRCode.Rows - 1 DO
BEGIN
FOR Column := 0 TO QRCode.Columns - 1 DO
BEGIN
IF (QRCode.IsBlack[Row, Column]) THEN
BEGIN
QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack;
END
ELSE
BEGIN
QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite;
END;
END;
END;
FINALLY
QRCode.Free;
END;
PaintBox1.Repaint;
END;

PROCEDURE TForm1.HazCodigoQR(texto: STRING);
VAR
QRCode: TDelphiZXingQRCode;
Row, Column: integer;
BEGIN
QRCode := TDelphiZXingQRCode.Create;
TRY
QRCode.Data := texto;
QRCode.Encoding := TQRCodeEncoding(cmbEncoding.ItemIndex);
QRCode.QuietZone := StrToIntDef(edtQuietZone.Text, 4);
QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns);
FOR Row := 0 TO QRCode.Rows - 1 DO
BEGIN
FOR Column := 0 TO QRCode.Columns - 1 DO
BEGIN
IF (QRCode.IsBlack[Row, Column]) THEN
BEGIN
QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack;
END
ELSE
BEGIN
QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite;
END;
END;
END;
FINALLY
QRCode.Free;
END;
PaintBox1.Repaint;
END;

END.

 

Una vez compilado el programa se muestra así:


 

No se necesita instalar librerías, ni dlls adicionales, únicamente hay que utilizar la unit DelphiZXingQRCode.pas

Lo que hace el programa es leer las líneas del fichero "codigos.txt"

El fichero contiene números del 100 al 104.

Para cada línea genera su código QR como si fuese una imagen y la guarda en la carpeta "imágenes" siguiendo el esquema:  <linea>.jpg

Y al final el resultado es el siguiente:


 Descargar programa


Cálculo de valores de resistencias eléctricas





Este programa sirve para calcular los valores de un resistor en función del color de las bandas de colores que lleva serigrafiadas en su superficie.



Author : Nicolas Paglieri

e-mail : webmaster@ni69.info
 

Descarga código fuente

Programas Delphi que utilizan OPENGL






1) Generador de curvas de Bezier



Esta aplicación genera un array de vértices utilizados para construir curvas de Bezier. Requiere que la tarjeta gráfica sea compatible con OpenGL.



Codigo fuente y programa








2) Utilización de una Webcam






Utilizando las primitivas OpenGL, permite ver la imagen de una webcam en una rejilla tridimensional, con la posibilidad de cambiar el ángulo de la cámara, la distancia del observador y la rotación de la imagen.











3) Bandera















4) Simulación del movimiento de los electrones































Simulador de circuitos lógicos



Simulador de circuitos con código fuente que permite diseñar circuitos basándose en puertas lógicas: Y, AND, OR, etc.



Una vez que se termina el diseño se puede activar virtualmente para ver su resultado.
Utilizando o no una tabla es posible realizar funciones básicas: sumador, comparador, etc y simular cualquier expresión booleana de una forma fácil.
El autor incluye varios ejemplos:
-Un display de 7 segmentos
-Un multiplicador binario.

Descargar codigo

Autor: Montero-Ribas

Web: ADMR.CAD.Free.fr





OCR simplificado

Realiza una limpieza del fondo de una imagen y a continuación pasa a texto su contenido haciendo la función de un OCR.




Author: Dennis Malkoff


E-mail: info@sminstall.com




Codigo fuente














Redondear numeros reales

Aquí tienen varias formas de redondear correctamente números reales:



Opcion1:

======



function RoundStr(Zn: Real; kol_zn: Integer): Real;

var

snl, s, s0, s1, s2: string;

n, n1: Real;

nn, i: Integer;

begin

s := FloatToStr(Zn);

if (Pos(',', s) > 0) and (Zn > 0) and

(Length(Copy(s, Pos(',', s) + 1, length(s))) > kol_zn) then

begin

s0 := Copy(s, 1, Pos(',', s) + kol_zn - 1);

s1 := Copy(s, 1, Pos(',', s) + kol_zn + 2);

s2 := Copy(s1, Pos(',', s1) + kol_zn, Length(s1));

n := StrToInt(s2) / 100;

nn := Round(n);

if nn >= 10 then

begin

snl := '0,';

for i := 1 to kol_zn - 1 do

snl := snl + '0';

snl := snl + '1';

n1 := StrToFloat(Copy(s, 1, Pos(',', s) + kol_zn)) + StrToFloat(snl);

s := FloatToStr(n1);

if Pos(',', s) > 0 then

s1 := Copy(s, 1, Pos(',', s) + kol_zn);

end

else

s1 := s0 + IntToStr(nn);

if s1[Length(s1)] = ',' then

s1 := s1 + '0';

Result := StrToFloat(s1);

end

else

Result := Zn;

end;



Opcion 2:



function RoundEx(X: Double; Precision: Integer ): Double;



// Precision : 1, 10,100 ...



var

ScaledFractPart, Temp: Double;

begin

ScaledFractPart := Frac(X) * Precision;

Temp := Frac(ScaledFractPart);

ScaledFractPart := Int(ScaledFractPart);

if Temp >= 0.5 then

ScaledFractPart := ScaledFractPart + 1;

if Temp <= -0.5 then

ScaledFractPart := ScaledFractPart - 1;

Result := Int(X) + ScaledFractPart / Precision;

end;



Opcion 3:



function FormatData(s: String; i: Integer): String;

begin

Result:=FloatToStr(Round(StrToFloat(s)*exp(i*ln(10)))/(exp(i*ln(10))));

end;



Opcion 4:



function RoundFloat(R: Extended; Decimals: Integer): Extended;

var

Factor: Extended;

begin

Factor := Int(Exp(Decimals * Ln(10)));

Result := Round(Factor * R) / Factor;

end;




La llamada sería de la siguiente forma:



showmessage(FloatToStr(RoundStr(2.3456789,3)));

showmessage(FloatToStr(RoundEx(2.3456789,1000)));

showmessage(formatdata('2,3456789',3));

showmessage(FloatToStr(RoundFloat(2.3456789,3)));




Al trabajar con imágenes en 3D he tenido que utilizar alguna de estas funciones y lo que he hecho para acelerar su cálculo es aumentar la prioridad de mi aplicación con la siguiente función:



procedure TForm1.AumentaPrioridad;

var

ProcessID : DWORD;

ProcessHandle : THandle;

ThreadHandle : THandle;

begin

ProcessID := GetCurrentProcessID;

ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION,

false, ProcessID);

SetPriorityClass(ProcessHandle, REALTIME_PRIORITY_CLASS);

ThreadHandle := GetCurrentThread;

SetThreadPriority(ThreadHandle, THREAD_PRIORITY_TIME_CRITICAL);

end;








Reproducir archivo MIDI en piano virtual





Con esta aplicación puedes abrir un archivo MIDI y reproducirlo en un piano virtual. Para que funcione hay que instalar previamente el package zzPianoEx.dpk con lo que tendremos los componentes: TPianoKeyBoard, TMidiOutput, TMidiFile, TMidiInput, TMidiPlayer, TPianoChannels, TPianoTracks.





XI'AN Science and Technology University, Shanghai, China


http://www.PianoEx.com


Author: ZHONG WAN


Email: webmaster@PianoEx.com


MSN: ziziiwan@hotmail.com




Descargar programa

Codigo fuente

Ejemplos archivos MIDI


Archivo1.mid

Archivo2.mid
Archivo3.mid








 


Firewall en Delphi




iSafer es un firewall winsock que permite entre otras cosas añadir / quitar reglas de acceso en función de IPs, modificar el nivel de seguridad, crear un registro de acceso, comprobar el estado de los puertos. Es bastante completo y para su instalación antes hay que descargar madCodeHook desde http://madshi.net  y el componente TrayIcon.pas que viene incluido en el código fuente.

Ha sido diseñado y creado por Do Duc Truong (Truong2D@yahoo.com) y LTH(LuuTruongHuy@yahoo.com)





























================================================================




MOSTRAR PROPIEDADES DEL FW











La siguiente aplicación permite controlar diferentes aspectos del Firewall que viene incluido en Windows (Probado en WindowsXP)




- Muestra sus propiedades


- Permite activarlo o desactivarlo


- Hace un listado de los programas autorizados


- Activa la configuración por defecto


- Lista servicios relacionados


- Muestra la configuración ICMP



Codigo fuente 











Antikeylogger






Los componentes TAntiKeyLoggerEdit  TAntiKeyLoggerMem sirven para dificultar las acciones de los keyloggers insertando en el buffer de teclado del PC caracteres basura. Podéis ver un ejemplo en la imagen del texto capturado por un keylogger cuando se usa el notepad y cuando se usa este programa.


Mediante la propiedad GarbageCount se puede especificar el número de caracteres falsos que se añaden en el buffer.





Autor: Wuul  Wuuldev@googlemail.com


Web:



 




=========================================================





PSMAntiKeyLogger


Real-time protection, protects you against KeyLoggers (For Windows 9x/ME/NT/2K/XP)
(C) 2003-2004 PSMKorea - Do Duc Truong, Truong2D@Yahoo.com

Project description:

PreSetup\PreSetup.dpr:            Create PreSetup.exe, killing processes before copying new files (For setup only)
PSMAntiK.Dll\PSMAntiK.dpr:            Injected DLL
PSMAntiSpy_Kr\PSMAntiSpy.dpr:        Main application
PSMAntiSpySvc\PSMAntiS.dpr:        Service
PSMStartupCfg_Kr\PSMStartupCfg.dpr:        Additional tool
Setup\setup.wse:                Script to create the full setup (Wise Installation System - Professional Edition)

NOTE for developers:
- Special component used: madCodeHook/madX : www.madshi.net
- Need to Install the TrayIcon compnent in TrayIcon.pas
- Change the const Lang in every project to switch between two language English/Korean. for ex: const Lang='KO';









Antivirus

AiD Scanner free Antivirus v3.4.3  es un antivirus totalmente operativo que viene con código fuente e incorpora una base de firmas de 60.000 virus que se pueden ampliar incluyendo otras nuevas, utilizando la aplicación "Aid database creator" que viene incluida en el soft.





Autor: DoGeR                       

BlackCash2006@Yandex.ru          

DoGeR@bit-lab.info 



Codigo fuente










Comprimir jpgs



Con este programa se comprimen imágenes bmp y jpg en archivos jpg.

Características:

-Regulación del nivel de compresión.

-6 formatos standards de redimiensionamiento.

-Varios formatos de exportación, incluyen zip.

-Gestión completa de exif, xmp, miniaturas, thumbnails, copyright.

-Posibilidad de añadir copyrights o cualquier texto sobre la imagen.

-Posibilidad de cambiar la fecha de creación o modificación.



Autor:

Nicolas Plagieri

http://www.ni69.info/

Aplicacion


Codigo fuente

Ping Alert


Este programa envia un ping a intervalos regulares a un PC para comprobar su estado, si no obtiene respuesta permite lanzar un programa o un mensaje de aviso.

Muy útil para monitorizar servidores o equipos de misión crítica.

Toda la configuración se encuentra en el archivo nopingalert.conf

Codigo fuente




Movimiento de un octoedro



Movimiento de un octaedro en pantalla. (No utiliza OpenGL, GlScene)





Codigo fuente










LIBROS:














Rotación de poliedros en el espacio








Simula el movimiento de un objeto sobre los 3 ejes X,Y,Z





Efecto lupa




Programa que amplia el texto sobre el que se posiciona el cursor para facilitar su lectura.




Programa efecto lupa



Codigo fuente








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










Ver equipos de la red


Programa para ver los equipos que componen una red y sus recursos compartidos, viene con código fuente (válido para Delphi 7 en adelante)










Autor: Vadim Crits





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...