
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
▻★★★ Blog sobre el lenguaje de programación delphi, incluye software, tutoriales, aplicaciones, videos, código fuente, trucos (about delphi, tips, tutorials, applications, source code, advanced programs, code snippets )
Cálculo de valores de resistencias eléctricas
Programas Delphi que utilizan OPENGL
1) Generador de curvas de Bezier
Codigo fuente y programa
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.
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
Author: Dennis Malkoff
E-mail: info@sminstall.com
Codigo fuente
Redondear numeros reales
Aquí tienen varias formas de redondear correctamente números reales:
======
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)));
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;
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
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
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
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
Gravedad pixelada
Simulación del movimiento de miles de píxeles bajo la influencia de las reglas de la gravedad.
Autor: Gerben Wijnja
Ver los cambios en el sistema de archivos
Muestra en tiempo real los cambios producidos en cualquier fichero del PC
Utiliza un CallBack definida en la unit WFSU:
PInfoCallBack = ^TInfoCallBack;
TInfoCallBack = record
FAction : Integer;
FDrive : string;
FOldFileName : string;
FNewFileName : string; end;
TWatchFileSystemCallBack = procedure (pInfo: TInfoCallBack);
Sniffer de red
Indicando una IP, podemos ver el tráfico de datos de entrada y salida.
Podemos filtrar por puerto o por tipo de trama (SYS, RST, ACK, FIN, URG)
Autor:
Pierre Freby pfreby@hotmail.com
Descargar codigo fuente
Podemos filtrar por puerto o por tipo de trama (SYS, RST, ACK, FIN, URG)
Autor:
Pierre Freby pfreby@hotmail.com
Descargar codigo fuente
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).
Suscribirse a:
Entradas (Atom)
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...
-
Seguidamente os dejo una lista bastante amplia de funciones escritas en Delphi que se utilizan cuando estamos programando una aplicación q...
-
Para trabajar con archivos pdf dentro de tu aplicación Delphi tienen que seguir los siguientes pasos: 1) Asegurarte que tienes la última ver...
-
A continuación os presento el software que os permitirá manejar vuestra Webcam con Delphi. Primeramente tenéis que instalar en vuestro sis...
