Mostrando entradas con la etiqueta Windows. Mostrar todas las entradas
Mostrando entradas con la etiqueta Windows. 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.




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


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














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










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





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












Mini visor del registro







Muestra los items del registro de nuestro PC ( regedit.exe ) utilizando dos componentes: tTreeView y tListView.

Es lo que veríamos si vamos al botón de inicio->ejecutar y escribimos "regedit.exe"



Codigo fuente




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










Delphi Chromium Embedded Framework

Para los que quieran tener embebido en su aplicación un navegador que encapsula a Chrome y que además es compatible con Firemonkey (con alguna particularidad) aquí se lo pueden descargar:


Clic aqui para descargar




Una vez que se ha descargado hay que instalar el componente cefcomponent.dpk de la carpeta src (No olvidar poner la ruta de la carpeta "src" en Opciones-Library) 

Espero que este componente no tenga el memory leak que observé en el TWebBrowser.







Las nuevas funciones que ofrece son:

-Embebe un web browser con html5/css3

-parsing javascript

-html5 drag&drop

-Soporte para geolocalizacion

-Aceleracion por GPU

-Manejo de la configuracion para proxy

-Clases para utilizarlo en linea de comandos, url, xml y zip para lectura / parsing

-Acceso a las cookies

-Menu contextual 

-Acceso directo a DOM

-Notificacion e interceptacion de pulsaciones de teclas y foco de la aplicacion

-Manejo de zoom

-Manejo de descargas

-Soporte para webrequest -

-Soporte para multi_threaded_message_loop

-Puede trabajar sin el VCL o como un componente



Ejemplos:

Cargar una URL: (siendo crm: TChromium)

      crm.Browser.MainFrame.LoadUrl(edAddress.Text); 



Recargar una URL:

  if crm.Browser <> nil then
    if FLoading then
      crm.Browser.StopLoad else
      crm.Browser.Reload;




Hacer Zoom:

crm.Browser.ZoomLevel := crm.Browser.ZoomLevel + 0.5;



Obtener el codigo de la pagina:

var
  frame: ICefFrame;
  source: ustring;
begin
  if crm.Browser = nil then Exit;
  frame := crm.Browser.MainFrame;
  source := frame.Source;
  source := StringReplace(source, '<', '<', [rfReplaceAll]);
  source := StringReplace(source, '>', '>', [rfReplaceAll]);
  source := 'Source:
' + source + '

';
  frame.LoadString(source, 'http://tests/getsource');
end;




Ejecutar javascript:

    crm.Browser.MainFrame.ExecuteJavaScript(
      'alert(''JavaScript execute works!'');', 'about:blank', 0);




Mostrar herramientas del programador:

crm.Browser.ShowDevTools;



Ejecutar DOM:

begin
{$IFDEF DELPHI12_UP}
  crm.Browser.MainFrame.VisitDomProc(
    procedure (const doc: ICefDomDocument) begin
      doc.Body.AddEventListenerProc('mouseover', True,
        procedure (const event: ICefDomEvent) begin
          caption := getpath(event.Target);
        end)
  end);
{$ELSE}
  crm.Browser.MainFrame.VisitDomProc(domvisitorcallback);
{$ENDIF}
end;




Imprimir una pagina:

crm.Browser.MainFrame.Print;










Links para resolucion de problemas en Delphi

Navegando por la red he encontrado este trabajado post con links donde acudir para resolver problemas de programación.



Fuente:

https://anmiguel.wordpress.com/2012/02/02/lenguaje-delphi-y-resolucion-de-problemas/





Relación de links:






























































































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