BIENVENIDA RAZA INFORMATICA

QUE TAL GENTE INFORMÁTICA Y DEMÁS ASOCIADOS,



MI INTENCIÓN NO ES SER EL MAS CARAJO



SI NO AYUDAR A LA GENTE COMÚN Y CORRIENTE COMO YO, DE ALGUNOS PROBLEMAS COTIDIANOS QUE NOS ENCONTRAMOS EN EL MUNDO DE LA INFORMÁTICA

jueves, 2 de diciembre de 2010

Por que no se pueden Crear Carpetas con el Nombre "AUX"

Creo que a mas de uno le ha pasado, que al quere crear una carpeta con el nombre de "AUX", ésta vuelve al nombre de "Nueva Carpeta" y por mas que queramos cambiarle el nombre este siempre volverá a al nombre que tenia anterior...

¿Por que?

la razon es por que, windows tiene reservadas esas palabras ya sea para algunos de sus dispositivos, o algun comando de windows;

algunos de esas palabras reservadas son:

CON Keyboard and display
PRN System list device, usually a parallel port
AUX Auxiliary device, usually a serial port
CLOCK$ System real-time clock
NUL Bit-bucket device
COM1 First serial communications port
COM2 Second serial communications port
COM3 Third serial communications port
COM4 Fourth serial communications port
LPT1 First parallel printer port
LPT2 Second parallel printer port
LPT3 Third parallel printer port

aunque no creo q tengan problemas con los nombres de las carpetas.

lunes, 16 de agosto de 2010

DIFERENCIA ENTRE COMO MANEJAN LOS ARCHIVOS WINDOWS Y GNU/LINUX

Hace tiempo leí en un artículo una explicación muy buena de cómo manejan los archivos Windows y GNU/Linux para comprender la diferencia. Venía a decir:

En nuestro ordenador los datos están guardados en archivos que son escritos sobre el disco duro que es como un gigantesco armario con millones de cajones y cada cajón tiene la misma capacidad (normalmente 512 bytes). Si los datos se guardan en cajones contiguos se puede acceder a ellos más rápido que si estuvieran de forma discontinua (fragmentados) dentro del armario. Hasta aquí todos sabemos que encontraremos las "cosas" más rápido en un armario ordenado que desordenado. El problema está en saber cómo conservar el armario ordenado cuando lo utilizamos frecuentemente.

Imaginemos ahora una empresa que guarda sus expedientes en un enorme armario con millones de cajones. El fin es que los documentos relativos a un mismo expediente se encuentren en cajones contiguos. Ahora necesitamos contratar una secretaria y se nos presentan dos candidatas:

La primera (Windows) trabaja de la siguiente forma: cuando un expediente se elimina del archivo, se limita a vaciar los cajones, y cuando entra uno nuevo lo separa en pequeños grupos de documentos de la medida de un cajón (512 bytes) y archiva cada grupo al azar en los primeros cajones vacíos que encuentra en el armario. Llega un momento en que va a ser muy difícil encontrar rápido todos los documentos que tienen que ver con un expediente y tendremos que contratar todos los fines de semana una docena de ayudantes para poner de nuevo todo en orden.

La segunda (GNU/Linux), conserva sobre su escritorio una lista de cajones vacíos contiguos, la cual pone al día cada vez que un expediente es cerrado y eliminado de los cajones. Cuando entra un expediente nuevo, busca en su lista un conjunto de cajones vacíos contiguos de la medida necesaria, y es ahí donde coloca el nuevo expediente. Así el armario permanecerá siempre bien ordenado, incluso aunque haya muchos movimientos de expedientes.

jueves, 15 de julio de 2010

El Experto y El Decepcionado - Usuarios de Ubuntu

Rodolfos y Nancys

Rodolfo, llamémoslo así, es un usuario de computadoras como tantos. Su sistema y el único que conoce es el popular Windows, no le trabaja mal, como en todo ya está adaptado a las virtudes y desaciertos del mismo. Sin embargo ya son varias las veces que escucha de un tal sistema llamado Ubuntu, conocido por su facilidad de uso y las libertades que da al usuario.

Ha escuchado de todo un poco: no tiene antivirus porque no lo necesita, no tiene más costo que el de descargarlo y grabarlo en un CD, es más lo puede copiar y regalar sin que esto se vea mal. Pero lo que más le ha llamado la atención es lo amigable que dicen que es, cualquiera puede usarlo le afirman.

Rodolfo entonces decide probar el tal Ubuntu, aprovecha un festival de instalación donde amablemente le instalan el sistema en su máquina. Lo prueba, se ve muy bonito, trae muchas aplicaciones, puede navegar en Internet, y se mueve rápido. Pero claro, como es de esperar surgen múltiples inquietudes. Por ejemplo Rodolfo se percata de que el teclado virtual del Banco Nacional no funciona adecuadamente, entonces pregunta a través de un foro de Ubuntu donde le responden:

- Ahh, en este caso debes usar el plugin Java de Sun Microsystems en lugar del plugin libre que trae Ubuntu. El teclado virtual usa bibliotecas no libres y nos obliga a usar esta otra opción.
- Ok, no se ve difícil, ¿qué debo hacer? - pregunta Rodolfo
- ¡Sencillísimo!, primero haces un sudo add-apt-repository "deb http://archive.canonical.com/ubuntu lucid partner" para añadir el repositorio parther de Cannonical, por supuesto seguido de un sudo aptitude update, entonces ya puedes hacer un sudo aptitude -y install sun-java6-plugin. ¡Ah! y no olvides hacer un sudo aptitude -y remove icedtea6-plugin para que quites el otro plugin.
- Que tuanis -piensa Rodolfo con un tanto de ironía- ¿No se supone que Ubuntu es para “seres humanos”?

Quizás hubiera sido más conveniente responder algo como: te vas a Orígenes del Software, marcas el repositorio parther, al cerrar te pregunta si quieres recargar la información acerca del software disponible entonces le dices que si. Luego te vas al Gestor de Paquetes Synaptic, instalas el paquete sun-java6-plugin y desinstalas icedtea6-plugin. ¡Listo! Todo sencillo, de manera gráfica como Rodolfo está acostumbrado a hacer las cosas y como espera seguir haciéndolas.

Por otro lado tenemos el caso de Nancy, una chica que, al igual que Rodolfo, no tiene mucho conocimiento técnico en cuando a computadoras pero, a diferencia, quiere aprender a hacer las cosas como su amigo Mario, todo un experto en lo que a computadoras se refiere.

A Nancy no le importa invertir un poco más de tiempo en aprender a hacer las cosas como lo hacen los expertos: escribiendo comandos para ejecutar acciones o modificando archivos de configuración con el editor de texto para definir la funcionalidad de su sistema. A ella no le importa que le sugieran las opciones que para muchos se verán extrañas, luego de una o dos preguntas de más a la comunidad y unas cuantas búsquedas en Internet probablemente ya tendrá una idea de lo que está haciendo y se sentirá complacida.

No hay duda de la eficiencia del soporte que brindan las diversas comunidades de Software Libre a los usuarios, sin embargo pareciera que no hemos aprendido a diferenciar un Rodolfo de una Nancy, de hecho difícilmente brindamos espacios para Rodolfos.

Rodolfo es una persona que podría contribuir enormemente a la comunidad, quizás es diseñador, músico, pedagogo o tal vez orador. Es decir perteneciente a un área ajena a la computación pero por ello un excelente complemento para este gran mundo que llamamos Software Libre o bueno, vamos un poco más allá, Cultura Libre.

Al ver tal respuesta (y posiblemente otras más de este tipo) Rodolfo se percató de que esto no es lo suyo, o por lo menos así se lo hicieron ver. Por supuesto los cuestionamientos sobre la facilidad que le prometieron no se hicieron esperar. No dejemos que los Rodolfos se vayan frustrados llevándose con sí lo que pudieron ser grandes aportes a la comunidad.

Tecla de Windows

Tecla Windows: abre y cierra el menú de inicio.

Tecla Windows + E: abre el explorador de archivos.

Tecla Windows + R: abre ventana ejecutar.

Tecla Windows + F: abre la ventana buscar.

Tecla Windows + D: minimiza o restaura todas las ventanas a la vez.

Tecla Windows + L: bloquea la estación de trabajo.

Tecla Windows + U: abre el administrador de utilidades.

Tecla Windows + M: minimiza todas las ventanas.

Tecla Windows + Shift + M: deshace la minimización de las ventanas.

Tecla Windows + F1: abre la ventana de ayuda y soporte técnico.

Tecla Windows + Tecla Pause/Break: abre la ventana de propiedades del sistema.

Tecla Windows + Tecla Tab: se mueve entre las diferentes aplicaciones en la barra de tareas y con la barra espaciadora se activa la aplicación seleccionada.

Tecla Windows + Tecla Ctrl + F: abre la búsqueda de equipos.

Tecla Windows + Tecla Ctrl + Tecla Tab: permite moverse entre pestañas de una aplicación.

lunes, 12 de julio de 2010

Bloqueo de USB

Hola que tal Gente ... este es un proyecto que realice en mi trabajo,
como muchos tenemos el problema que los usuarios meten las memorias usb, y sabra Dios en donde mas las habran metido, por lo que tal vez la galeria de virus que traen es muy buena, para evitarme este problema, hice un programa que me bloqueara solo las memorias usb; las impresoras, mouse, y demas accesorios usb si se pueden accesar.


El programa necesita ejecutarse una sola vez y lo que hace es:
- Crea un registro en el que hace que se inicie junto con Windows
- Deshabilita los puertos USB; Bloquea el registro, y cambia el nombre de los archivos que contienen los drivers, por lo que si es la primera vez que se conecta la memoria no lo va a instalar, y si ya estaba instalado, no lo permite por que el registro esta deshabilitado.
- Tanto la ruta como la contraseña son fijas, es decir, no se pueden cambiar, al menos que se cambie desde código.
- Para habilitar los puertos, es necesario dar clic derecho en él, este estará iconizado (al lado izquierdo del reloj)
- Al introducir la contraseña este mostrara un botón para habilitar el puerto, y entonces si puedes conectar la memoria USB
- La próxima vez que se inicie, este deshabilitará los puertos USB solo para memorias


aqui les dejo el enlace...



http://cid-dd6c7076675d0866.office.live.com/self.aspx/P%c3%bablico/Programas%20Varios/UsbLocal.rar


el programa se tendria que poner en "C:\Archivos de Programa\" para que se ejecute siempre desde ahi.....



el programa esta hecho en delphi 7.0, por lo que aqui les dejo el código
unit FUsb;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Registry,ShellAPI, StdCtrls, ExtCtrls, TlHelp32, Buttons;

const
WM_ICONTRAY = WM_USER + 1; // Mensaje definido por el usuario

type
Tusbs = class(TForm)
BHabilitar: TButton;
BDeshabilitar: TButton;
Pass: TEdit;
Minimizar: TButton;
BMostrar: TButton;
Timer1: TTimer;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure MinimizarClick(Sender: TObject);
procedure BMostrarClick(Sender: TObject);
procedure Icontray(var Msg: TMessage); message WM_ICONTRAY;
procedure BDeshabilitarClick(Sender: TObject);
procedure BHabilitarClick(Sender: TObject);
procedure PassKeyPress(Sender: TObject; var Key: Char);
procedure Timer1Timer(Sender: TObject);
Procedure MadrearArchivo(Sender: TObject);
Procedure ComponerArchivo(Sender: TObject);
private
{ Private declarations }

public
{ Public declarations }
end;

var
usbs : Tusbs;

NotifyIconData : TNotifyIconData;
Hecho : Boolean;
Intentos: Integer;
SearchRec: TSearchRec;

implementation

Uses PopupMenu1;
{$R *.dfm}

{-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+
este proceso cambia el nombre del usbtor para
que no se instale la memoria usb
-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+}
Procedure Tusbs.MadrearArchivo(Sender: TObject);
Var
lpFileOp: TSHFileOpStruct;
ArchivoABuscar1,ArchivoABuscar2:String;
Begin
ArchivoABuscar1:='C:\WINDOWS\inf\usbstor.inf';
If FindFirst(ArchivoABuscar1, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then
Begin
lpFileOp.Wnd := Self.Handle;
lpFileOp.wFunc := FO_RENAME;
lpFileOp.pFrom := PChar('C:\WINDOWS\inf\usbstor.inf' + #0#0);
lpFileOp.pTo := PChar('C:\WINDOWS\inf\usbstorinf.Txt' + #0#0);
lpFileOp.fFlags:= FOF_SIMPLEPROGRESS or FOF_FILESONLY;
lpFileOp.fAnyOperationsAborted := FALSE;
lpFileOp.hNameMappings := nil;
lpFileOp.lpszProgressTitle := PChar('Trasladando archivos al disco D' + #0#0);
if ShFileOperation(lpFileOp) <> 0 then
ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstor.inf a usbstorinf.Txt');
end
Else
Begin
ArchivoABuscar1:='C:\WINNT\inf\usbstor.inf';
If FindFirst(ArchivoABuscar1, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then
Begin
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_RENAME;
lpFileOp.pFrom := PChar('C:\WINNT\inf\usbstor.inf' + #0#0);
lpFileOp.pTo := PChar('C:\WINNT\inf\usbstorinf.Txt' + #0#0);
lpFileOp.fFlags:= FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if ShFileOperation(lpFileOp) <> 0 then
ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstor.inf a usbstorinf.Txt');
End;
End;



ArchivoABuscar2:='C:\WINDOWS\inf\usbstor.PNF';
If FindFirst(ArchivoABuscar2, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then
Begin
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_RENAME;
lpFileOp.pFrom := PChar('C:\WINDOWS\inf\usbstor.PNF' + #0#0);
lpFileOp.pTo := PChar('C:\WINDOWS\inf\usbstorPNF.Txt' + #0#0);
lpFileOp.fFlags:= FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if ShFileOperation(lpFileOp) <> 0 then
ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstor.PNF a usbstorPNF.Txt');
End
Else
Begin
ArchivoABuscar2:='C:\WINNT\inf\usbstor.PNF';
If FindFirst(ArchivoABuscar2, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then
Begin
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_RENAME;
lpFileOp.pFrom := PChar('C:\WINNT\inf\usbstor.PNF' + #0#0);
lpFileOp.pTo := PChar('C:\WINNT\inf\usbstorPNF.Txt' + #0#0);
lpFileOp.fFlags:= FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if ShFileOperation(lpFileOp) <> 0 then
ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstor.PNF a usbstorPNF.Txt');
end;
End;

End;
{-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+
Regresa a la nomralidad los archivos para que se
instalen las memorias
-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+-*/+}
Procedure Tusbs.ComponerArchivo(Sender: TObject);
Var
lpFileOp: TSHFileOpStruct;
ArchivoABuscar1,ArchivoABuscar2:String;
SearchRec: TSearchRec;
Begin


ArchivoABuscar1:='C:\WINDOWS\inf\usbstorinf.Txt';
If FindFirst(ArchivoABuscar1, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then
Begin
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_RENAME;
lpFileOp.pFrom := PChar('C:\WINDOWS\inf\usbstorinf.Txt' + #0#0);
lpFileOp.pTo := PChar('C:\WINDOWS\inf\usbstor.inf' + #0#0);
lpFileOp.fFlags:= FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if ShFileOperation(lpFileOp) <> 0 then
ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstorinf.Txt a usbstor.inf');
End
Else
Begin
ArchivoABuscar1:='C:\WINNT\inf\usbstorinf.Txt';
If FindFirst(ArchivoABuscar1, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then
Begin
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_RENAME;
lpFileOp.pFrom := PChar('C:\WINNT\inf\usbstorinf.Txt' + #0#0);
lpFileOp.pTo := PChar('C:\WINNT\inf\usbstor.inf' + #0#0);
lpFileOp.fFlags:= FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if ShFileOperation(lpFileOp) <> 0 then
ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstorinf.Txt a usbstor.inf');
End;
end;


ArchivoABuscar2:='C:\WINDOWS\inf\usbstorPNF.Txt';
If FindFirst(ArchivoABuscar2, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then
Begin
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_RENAME;
lpFileOp.pFrom := PChar('C:\WINDOWS\inf\usbstorPNF.Txt' + #0#0);
lpFileOp.pTo := PChar('C:\WINDOWS\inf\usbstor.PNF' + #0#0);
lpFileOp.fFlags:= FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if ShFileOperation(lpFileOp) <> 0 then
ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstorPNF.Txt a usbstor.PNF');
end
Else
Begin
ArchivoABuscar2:='C:\WINNT\inf\usbstorPNF.Txt';
If FindFirst(ArchivoABuscar2, faAnyFile and not (faVolumeID or faDirectory), SearchRec) = 0 then
Begin
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_RENAME;
lpFileOp.pFrom := PChar('C:\WINNT\inf\usbstorPNF.Txt' + #0#0);
lpFileOp.pTo := PChar('C:\WINNT\inf\usbstor.PNF' + #0#0);
lpFileOp.fFlags:= FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if ShFileOperation(lpFileOp) <> 0 then
ShowMessage('Ha Fallado El cambio de Nombre de Archivo de usbstorPNF.Txt a usbstor.PNF');
end;
end;

End;

procedure Tusbs.Icontray(var Msg: TMessage);
var
CursorPos : TPoint;
begin
if Msg.lParam = WM_RBUTTONDOWN then begin
GetCursorPos(CursorPos);
usbs.Show;
end else
inherited;
end;



{procedimiento para habilitar o deshabilitar el usb}
procedure EnableUSB(Value: Boolean);
begin
with TRegistry.Create do
try
RootKey:= HKEY_LOCAL_MACHINE;
if OpenKey('\SYSTEM\CurrentControlSet\Services\USBSTOR',TRUE) then
begin
if Value then WriteInteger('Start',3)
else WriteInteger('Start',4);
CloseKey;
end;
finally
Free;
end;
end;

{procedimiento para hacer que el programa se inicie con windows}
procedure RunForEver(pCaption, pPath : String);
var Registro :TRegistry;
begin
//pCaption es el caption del programa, y path la ruta completa donde se encuentra el .exe
Registro:=TRegistry.create;
Registro.RootKey := HKEY_LOCAL_MACHINE;
If Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\',FALSE) then
If Not (Registro.ReadString(pCaption) = pPath) Then
Registro.WriteString(pCaption, pPath);

Registro.Free;
end;

{Al Crearse la forma}
procedure Tusbs.FormCreate(Sender: TObject);
begin
{ Desabilitamos el Puerto USB}
EnableUSB(False);
{mandamos llamar el procedimiento para que truene los archivos}
MadrearArchivo(Sender);
{Activamos el programa para que se inicie con windows}
RunForEver('Usb.exe','C:\Archivos de Programa\Usb.exe');

end;

{Oculta la Aplicacion de la barra de tareas}
procedure Tusbs.FormShow(Sender: TObject);
begin
ShowWindow(application.Handle, SW_HIDE );
Intentos:=0;
Pass.Text := '';
end;
{*******************************************************
BOTON PARA MINIMIZAR LA PANTALLA
*******************************************************}
procedure Tusbs.MinimizarClick(Sender: TObject);
begin
usbs.Hide;
with NotifyIconData do begin
hIcon := Icon.Handle;
StrPCopy(szTip, Application.Title);
Wnd := Handle;
uCallbackMessage := WM_ICONTRAY;
uID := 1;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
cbSize := sizeof(TNotifyIconData);
end;
Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
end;
{*******************************************************
BOTON PARA QUITAR EL ICONO DE LA BARRA DE TAREAS
*******************************************************}
procedure Tusbs.BMostrarClick(Sender: TObject);
begin
Show;
Shell_NotifyIcon(NIM_DELETE, @NotifyIconData); //para quitar el icono de la barra de notificación
end;

procedure Tusbs.BDeshabilitarClick(Sender: TObject);
begin
EnableUSB(False);
MadrearArchivo(Sender);
BHabilitar.Visible :=False;
end;

procedure Tusbs.BHabilitarClick(Sender: TObject);
begin
EnableUSB(True);
ComponerArchivo(Sender);
end;

procedure Tusbs.PassKeyPress(Sender: TObject; var Key: Char);
begin
If Intentos >= 3 Then
MinimizarClick(Sender);
If key=#13 Then
If pass.Text ='entra2' Then
BHabilitar.Visible := True
else
Begin
BHabilitar.Visible := False;
Intentos := Intentos +1;
End;
end;

procedure Tusbs.Timer1Timer(Sender: TObject);
begin
If Hecho =False then
Begin
MinimizarClick(sender);
hecho:=True;
end;

end;

jueves, 6 de mayo de 2010

iconos de todo

Como desarrollador de sistemas, siempre he tenido un problema al buscar íconos para mis aplicaciones, entre tanta búsquda me encontre con esta excelente página, que nos permite hacer una búsqueda de los íconos por categoria, para de esta forma poder seleccinoar el que sea de nuestro agrado y no descargar una archivo con 100 o 1000 íconos para solo utilizar uno solo.




aqui les dejo el enlace para que descarguen sus imagenes en tipo png o en ico

martes, 16 de febrero de 2010

Manejo de Fechas Delphi

Manejo de fechas en delphi

funciones para fechas delphi – TDate – TDateTime – TTime – rutinas de fechas en delphi

El siguiente articulo vamos a ver como manejar fechas y horas en delphi
las funciones que veremos pertenecen a la unidad SysUtils y la mayoría en DateUtils que a partir de delphi 6 están con nosotros, con ellas podremos resolver dilemas como:

• extraer parte de la fecha, año, mes, día
• incrementar años, meses, días en una fecha y viceversa
• comparar dos fechas
• saber cuántos días faltan por una fecha
• validar una fecha
• saber si es un año bisiesto
• día de la semana de una fecha

Definición de variables de tipo fecha

Para manejar fechas en delphi necesitamos definir las variables con el tipo adecuado para fechas, para ello tenemos en disposición de tres tipos TDate – TTime y TDateTime

TDate Para almacenar una fecha día/mes/año
TTime Para almacenar una hora, hora: minuto: segundo
TDateTime Es una combinación de las dos anteriores: día/mes/año hora: minuto: segundo

Ejemplo:

var
MiData: Tdate; //variable de data 00/00/00
MiHora: TTime; //variable de hora 00:00:00
MiFecha: TDateTime; //variable con data y hora 00/00/00 00:00:00

Funciones básicas para obtener fechas

unidad: SysUtils
date() : devuelve la data actual
time() GetTime() : devuelve la hora actual
now() : devuelve la data y hora actual

Ojo si utilizamos variables de tipo TDateTime y usamos time() o GetTime() el data por defecto es 30/12/1899
Ejemplo:

MiData := date(); //29/06/08
MiHora := time(); //14:08
MiFecha := now(); //29/06/08 14:08
MiFecha := GetTime(); // 30/12/1899 14:08

Funciones de salida para fechas “OUTPUT”

Para mostrar una variable de contenedor fecha en pantalla, en un editbox,label,listbox etc.. tenemos que pasar la fecha en formato cadena “string”, para ello usaremos la funciones convertidoras de tipos “casting” apropiadas

unidad: SysUtils
DateToStr :Convierte de Data a texto
TimeToStr :Convierte de Hora a texto
DateTimeToStr :Convierte de Data y Hora a texto

Ejemplo:

edit1.text := DateToStr(MiData);
edit1.text := TimeToStr(MiHora);
edit1.text := DateTimeToStr(MiFecha);

Funciones de entrada para fechas “INPUT”

Podemos utilizar (StrToDate – STrToTime – StrToDateTime) para que el usuario puede agregar datas manualmente o bien para predeterminar la fecha o hora

unidad: SysUtils
StrToDate :Convierte de texto a Data
STrToTime :Convierte de texto a Hora
StrToDateTime :Convierte de texto a Data y Hora
Para componer una fecha en delphi tenemos el siguiente formato Dia/Mes/Año Hora:Minuto:Segundo,Milisegundo

Ejemplo:

MiData := StrToDate('01/06/2008');
MiHora := StrToTime('10:20:30');
MiFecha := StrToDateTime('01/06/2008 10:20:30,232');

Nota: si se pasa una fecha o tiempo incorrecto salta una excepción de tipo EConvertError

Funciones typecast validadoras de fechas

Podemos usar el manejo de excepciones (try, except, finally) o bien usar la funciones TryStrToDate, TryStrToTime, TryStrToDateTime que veremos después
cuando pasamos una fecha o tiempo incorrecto delphi salta con una excepción de tipo EConvertError la podemos capturar con “on EConvertError”

Ejemplo
var
MiFecha:Tdatetime;
Begin
Ttry
MiFecha := StrToDate('01/06/2008');
Except
on EConvertError do
ShowMessage('Fecha incorrecta');
End;
End;

Funciones TryStrToDate, TryStrToTime y TryStrToDateTime, todas se llaman de la siguiente manera nombrefuncion(donde_guardar,fecha_a_pasar) nos devuelve con un booleano si ha sido correcta o no la conversión

Ejemplo
var
MiFecha:Tdatetime;
cadena:string;
Begin
cadena := '31/02/2009';
If (TryStrToDateTime(cadena,mifecha)) then
showmessage('conversion correcta')
else
showmessage('conversion incorrecta');
end;