Gracias preludio!
Creo que esa es la manera correcta.
Es un programa que almacenará muchas notas y creo que voy a tener que crear muchos archivos de texto.
Cópien y peguen el código en un archivo para abrirlo con Turbo Pascal.
Me gustaría mucho que le hecharan un vistazo. Aun está en construcción.
Los comentarios y críticas, son bienvenidos.
No espero que examinen mucho el código fuente, pues es largo y además el indentado (que es vital para la comprensión del programa) no lo respeta este editor de texto del foro pero si quieren pueden criticar los colores, menus y todo lo demás.
Saludos!
(*******************************************)
(* Dise¤ado para el seguimiento de equipos *)
(* del departamento t‚cnico de Retail. *)
(* *)
(* Turbo Pascal 7. *)
(* Dise¤ador y programador Willy De Le¢n *)
(* Guatemala 01/01/2008 *)
(*******************************************)
Program Control_Taller;
Uses Crt, Dos, Graph, Graficas, Mouse;
const
Dias : array [0..6] of String[9] =
('Domingo','Lunes','Martes','Mi‚rcoles','Jueves','Viernes','S bado');
Type
TipoEquipos = record {para almacenarar todos los datos de cada equipo}
Marca, Modelo, NumSerie, Empresa, Depto, Encargado, Tecnico,
NotaReport, NumReport, Falla, TrabajoRealizado, Garantia,
EstatusReparacion, FechaSalida, FechaCompra, FechaVenta,
NumFacturaCompra, NumFacturaVenta, Proveedor : String;
{Se necesita almacenar la fecha como n£mero para ordenar por fecha}
AnioIngreso, MesIngreso, DiaIngreso, DiaSemanaIngreso : Word;
End;
{ GetDate(Anio, Mes, Dia, DiaSemana);
Writeln('Hoy es ', Dias[DiaSemana],', ', Mes:0, '/', Dia:0, '/', Anio:0);}
Var
MenuSeleccionado, EstoyMenuPrincipal,
SalirPrograma, EstoyIngresarEquipo : Boolean;
Equipo : TipoEquipos;
Archivo : File of TipoEquipos;
{Crea un menu seleccionable}
Procedure MenuSeleccionable(X1,Y1,X2,Y2: Integer; Texto: String;
Tamanio: Integer);
Begin {MouseInRect - Unit mouse.pas}
If Tamanio = 1 then SetTextStyle(DefaultFont,HorizDir,1);
If Tamanio = 2 then SetTextStyle(DefaultFont,HorizDir,2);
While MouseInRect(X1-25,Y1-18,X2-25,Y2-18) do{si el puntero se encuentra}
Begin {dentro de estas coordenadas}
If MenuSeleccionado = false then
Begin {Si el puntero se encuentra sobre el menu}
SetColor(11);
OutTextXY(X1,Y1,Texto);
SetColor(3);
OutTextXY(X1-1,Y1+1,Texto);
MenuSeleccionado := true;{No es que el t¡tulo est‚ seleccionado sino}
End;{If} {que el puntero se encuentra sobre el.}
If LMouseDown then
Begin {IngresarEquipo seleccionado}
SetColor(15); Rectangle(X1-6,Y1-3,X2-33,Y2-23);
Delay(175);{para que el rect ngulo se muestre por 175 Milisegundos}
If (X1 = 50) and (Y1 = 120) and (X2 = 323) and (Y2 = 162) then
begin
EstoyIngresarEquipo := True;
EstoyMenuPrincipal := False;
SetMousePos(620,460);{Cambia la posici¢n del puntero}
End;
{Si el puntero se encuentra sobre el t¡tulo "Volver".}
If (X1 = 50) and (Y1 = 75) and (X2 = 142) and (Y2 = 110) then
begin
EstoyIngresarEquipo := False;
EstoyMenuPrincipal := True;
SetMousePos(620,460);
End;
{"Salir"}
If (X1 = 50) and (Y1 = 430) and (X2 = 122) and (Y2 = 465) then
begin
EstoyMenuPrincipal := False;
SalirPrograma := True;
SetMousePos(620,460);
End;
End;{If}
End;{While}
If MenuSeleccionado = True then
Begin
SetColor(9);
OutTextXY(X1,Y1,Texto);
SetColor(1);
OutTextXY(X1-1,Y1+1,Texto);
MenuSeleccionado := false;
end;{If Menu}
End;{Procedure MenuSeleccionable}
{Crea los campos para que el usuario ingrese datos en un registro.}
Procedure Campo(X,Y: Integer; Var Variable: String);
Var InicioRegistro : integer; {Contiene la coordenada X del cursor}
Cadena1, Cadena2,Cadena3,Cadena4 : string; {almacenar nota de 1024}
TeclaPres : Char;{Teca Presionada} { caracteres}
Begin {12 p¡xeles de caracter a caracter}
InicioRegistro := X+(Length(Variable)*12); TeclaPres := '0'; Cadena1 := ''; Cadena2 := '';
Cadena3 := '';Cadena4 := '';{Inicializando variables como nulas}
If MouseInRect(X-3, Y-3, X+189, Y+10) and LMouseDown then
Begin
SetColor(7); SetMousePos(X+218,Y);{coloca el puntero fuera del campo}
Repeat
If not KeyPressed then
Begin{Hace intermitente el cursor}
SetFillStyle(1,8); bar(InicioRegistro-1,Y,InicioRegistro+12,Y+8);
Delay(100); OutTextXY(InicioRegistro,Y,'_'); delay(100);
OutTextXY(InicioRegistro,Y,'_');
End;
If Keypressed then
Begin
TeclaPres := (ReadKey);{TeclaPres tendr el valor de tecala presionada}
Case Ord(TeclaPres) of
65..90, 48..57, 97..122, 32, 130, 160..163 :{Caracteres permitidos}
Begin
If InicioRegistro < X+185 then{Se dispondr de 185 p¡xeles longitud}
Begin { para escribir en el campo.}
SetColor(7);
SetColor(8); OutTextXY(InicioRegistro,Y,'_');SetColor(7);
OutTextXY(InicioRegistro,Y,TeclaPres);
InicioRegistro := InicioRegistro + 12;{InicioR. = posici¢n cursor}
Variable := Variable + TeclaPres;{A Variable se le ir sumando el}
End; { valor de TeclaPres.}
End;
End;{Case}
If TeclaPres = char(8) then {Si se preciona BackSpace entonces..}
Begin{12 p¡xeles entre cada caracter. Borra caracter.}
InicioRegistro := InicioRegistro - 12;
If InicioRegistro < X+1 then InicioRegistro := X+1;
SetFillStyle(1,8);
bar(InicioRegistro-1,Y,InicioRegistro+24,Y+8);{borra caracteres}
delete(Variable,Length(Variable),1);{borra caracteres(a la variable)}
End;{if Tec}
End;{if KeyPressed}
Until TeclaPres = char(13); {Enter}
SetFillStyle(1,8);
bar(InicioRegistro-1,Y,InicioRegistro+12,Y+8);{Borra cursor}
end;
End;{Procedure Campo}
{Crea pantalla para ingresar dados de equipos}
Procedure IngresarEquipo;
Begin
EstoyIngresarEquipo := true;
SetFillStyle(SolidFill,0);
Bar(30,65,600,440);{Borra rea de pantalla}
SetMousePos(319,80);
SetTextStyle(DefaultFont,HorizDir,2);
SetColor(11);
OutTextXY(190,75,'Ingresar equipo');
SetColor(3);
OutTextXY(189,76,'Ingresar equipo');
SetTextStyle(DefaultFont,HorizDir,1);
SetColor(9);
OutTextXY(50,75,'Volver');
SetColor(1);
OutTextXY(49,76,'Volver');
SetColor(9);
OutTextXY(530,75,'Guardar');
SetColor(1);
OutTextXY(529,76,'Guardar');
SetFillStyle(SolidFill,8); Bar(25,100,610,455); SetMousePos(319,200);
SetTextStyle(DefaultFont,HorizDir,1);
Rectangle(73, 133, 281, 145);{Dibuja marco para ingresar dato de "Marca"}
Rectangle(273, 233, 481, 245);{"Modelo"}
Repeat
MenuSeleccionable(50,75,142,110,'Volver',1);
MenuSeleccionable(530,75,622,110,'Guardar',1);
Campo(75,135,Equipo.Marca);{Almacena dato ingresado en la variable}
Campo(275,235,Equipo.Modelo);
Until EstoyIngresarEquipo = False;
End;{Procedure IngresarEquipo}
Procedure MenuPrincipal;
Begin
LimitMouse(0,0,639,479);
EstoyMenuPrincipal := True;
MenuSeleccionado := False;
SetFillStyle(SolidFill,0);
Bar(22,65,618,458);
SetMousePos(319,150);
SetTextStyle(DefaultFont,HorizDir,2);
SetColor(9);
OutTextXY(50,120,'Ingresar equipo');
SetColor(1);
OutTextXY(49,121,'Ingresar equipo');
SetColor(9);
OutTextXY(50,200,'Ver equipos existentes');
SetColor(1);
OutTextXY(49,201,'Ver equipos existentes');
SetTextStyle(DefaultFont,HorizDir,1);
SetColor(9);
OutTextXY(50,430,'Salir');
SetColor(1);
OutTextXY(49,431,'Salir');
Repeat
MenuSeleccionable(50,120,323,162,'Ingresar equipo',2);
MenuSeleccionable(50,200,442,242,'Ver equipos existentes',2);
MenuSeleccionable(50,430,122,465,'Salir',1);{El 1 indica tama¤o}
Until EstoyMenuPrincipal = False;
End;
Begin {Principal}
EstoyIngresarEquipo := False; EstoyMenuPrincipal := True;
SalirPrograma := False;
IniciaGraficas; {graficas.pas}
SetMouseCursor(0); ShowMouse; {mouse.pas}
SetMousePos(315,125); {mouse.pas}
RandomGround(5,5,632,7,0,2); {tubo de arriba}
RandomGround(5,8,632,10,8,10);
RandomGround(5,11,632,12,2,10);
{RandomGround graficas.pas}
RandomGround(5,467,633,469,2,10); {tubo de abajo}
RandomGround(5,470,633,472,8,10);
RandomGround(5,473,633,474,0,2);
RandomGround(5,8,7,470,0,2);{tubo izquierdo}
RandomGround(8,8,10,470,8,10);
RandomGround(11,8,12,470,2,10);
RandomGround(626,8,628,471,2,10);
RandomGround(629,8,631,471,8,10);{RandomGround dibuja un rect ngulo }
RandomGround(632,8,633,471,0,2); {relleno con 2 colores espec¡ficos }
{de p¡xeles posicionados al azar. }
SetTextStyle(DefaultFont,HorizDir,3);
SetColor(10);
OutTextXY(55,29,'Seguimiento de equipos');
SetColor(2);
OutTextXY(54,30,'Seguimiento de equipos');
SetColor(2);
Rectangle(35,20,600,63);
Repeat
If EstoyMenuPrincipal = True then MenuPrincipal;
If EstoyIngresarEquipo = True then IngresarEquipo;
Until SalirPrograma = True;
{ GetDate(Anio, Mes, Dia, DiaSemana);
Writeln('Today is ', Dias[DiaSemana],', ', Mes:0, '/', Dia:0, '/', Anio:0);
}
CloseGraph
End.{256 l¡neas. Fin del programa 04/01/2008. A£n en construcci¢n.}