Curso Delphi. Lección 06C  

Send By: Ariel Bustamante
Web : N.A.
Email: N.A.
Date: 30/12/02

Tip accessed 805 times

 


Propiedades de los botones:




































































NAME



CAPTION



HINT



EVENTO
OnClick



Button1



BPrimero



<<  Primero



Va al primer registro



Table1.First;



Button2



BAnterior



<  Anterior



Va al registro anterior



Table1.Prior;



Button3



BSiguiente



Siguiente  >



Va al registro siguiente



Table1.Next;



Button4



BUltimo



Ultimo  >>



Va al último registro



Table1.Last;



Button5



BAgregar



Agregar



Agrega un registro nuevo



Table1.Append;



Button6



Bborrar



Borrar



Borra el registro señalizado



Nada de momento



Button7



BInforme



Informe



Abre Informe Confidencial



Nada de momento



Button8



BSalir



Salir



Cierra la Aplicación



Este ya lo sabes



La Propiedad/Font de todos será Ms Sans Serif/Negrita/8, la Propiedad/ShowHint
de todos será True y los tamaños y la posición quedan por
tu cuenta siempre centrándolos debajo casi tocando la barra rápida
del escritorio, también dejo por vuestra cuenta la colocación
de los ampersand & en los Captions.

Una vez acabado ejecuta el proyecto para comprobar el funcionamiento de los
diferentes botones, todos cumplen la "misión" encomendada pero
les falta un toque de profesionalidad. A saber: si vamos al primer registro
con BPrimero no quedaría ningún registro anterior por tanto BAnterior
se debería desactivar, lo mismo ocurre con BUltimo y BSiguiente , además
de esto BBorrar nos tendría que avisar del peligro de borrar un registro
irrecuperable y BSalir debería pedir la conformidad del usuario para
cerrar la aplicación, dejamos para el final a BInforme dado que debemos
restructurar la tabla.Comenzamos con BPrimero al cual le agregaremos un nuevo
evento:

BAnterior.Enabled := False;

Este código desactivará a BAnterior y nos lo mostrará poniendo
su Caption en gris. Ahora haremos lo mismo en el evento OnClick de BUltimo:

BSiguiente.Enabled := False;

Puedes ejecutar y comprobar el funcionamiento, pero observarás que aún
nos faltan detalles tal como el volverlos a activar. Si estamos en el primer
registro con BAnterior desactivado deberíamos activarlo al clicar sobre
BUltimo y BSiguiente , entonces debemos agregarles a los eventos OnClick de
estos botones:

BAnterior.Enabled := True;

Y si estamos en el último registro con BSiguiente desactivado a BAnterior
y BPrimero les debemos agregar este código:

BSiguiente.Enabled := True;

Ahora sí, ejecuta y verás que todo va correctamente.Volvemos a
diseño y vamos a trabajar con BBorrar .

Coloca un Panel, Name PBorrado. Caption ' Si borra este registro será
irrecuperable' (atento a los tres espacios en blanco al principio).Alignment
taLeftJustify. Font, MsSan Serif/Negrita/10. Height 41. Width 565. Top 324.
Left 204. Visible False y dale un color que no sea el típico gris. Ahora
dentro del Panel y en el espacio que nos queda a la derecha del Caption ponemos
dos Buttons y ahora observarás un efecto que creo no hemos comentado
y es que la fuente del Caption de los botones es la misma que la del Panel,
esto ocurre porque el Button tiene por defecto en True la Propiedad/Parent Font
que en castizo quiere decir que emparentará la fuente de letra con la
del componente donde fue depositado. Quítale a ambos el estilo negrita
y pásales el tamaño a 8, ahora verás que ParentFont se
pasó solita a False.






















 



NAME



CAPTION



EVENTO
OnClick



Button1



BCancelar



Cancelar



PBorrado.Visible := False;



Button2



BBorrar2



Borrar



Table1.Delete;

PBorrado.Visible := False;






El BCancelar cerraría a PBorrado dejando todo como está y el
BBorrar2 borraría el registro y cerraría a PBorrado .

Ahora a BBorrar en su OnClick le pondremos: (Atención este al cual nos
referimos es BBorrar el botón que está en la Form)

PBorrado.Visible := True;

Ejecuta y prueba esta nueva opción. Vuelve a diseño guarda y cierra
Delphi. Te indico que cierres Delphi porque si no, no podremos restructurar
la Tabla dado que una tabla en uso no puede restructurarse. Busca en la carpeta
Leccion6 la TablaCoches haz doble clic en su icono y se abrirá Database
Desktop y tu tabla, clica sobre el icono de restructure, presiona Intro o Tab
hasta que nos aparezca una zona sombreada al final de los campos ya editados
y escribe: Informe, en Type selecciona M (Memo) y en size ponle 240. Salva,
cierra Database Desktop y reabre Delphi y tu proyecto. Ahora colocaremos de
la pestaña DataControls un DBMemo, le daremos todo el ancho de la Form
y lo centraremos entre los botones y el DBGrid, si quieres dale un color diferente
al blanco por defecto.

En su Propiedad/DataSource desplega la ventana y deja DataSource1 y en su Propiedad/DataField
desplega la ventana y selecciona el campo Informe y por último a su Propiedad/Visible
ponla en False. Ahora al Evento/OnClick de BInforme le escribiremos:

DBMemo1.Visible := True;

Ejecuta el proyecto y ve seleccionando los diferentes registros de uno en uno,
clica el botón Informe, se abrirá el DBMemo y en él escribes
para cada coche un pequeño informe sobre su estado o sus extras etc.
Luego vuelve a navegar por todos los registros y a medida que cambias de coche
te irá apareciendo el informe que has escrito para cada uno, como siempre
los datos introducidos en el DBMemo1 se han guardado por sí solos. Ahora
observarás que nos faltan dos cosas: una que el DBMemo tome el foco al
ser abierto y otra la manera de cerralo puesto que este informe puede ser confidencial
y consultado solo si lo necesita el usuario.

Para solucionar lo primero deberíamos agregar otra línea de código
al Evento/OnClick de BInforme:


   DBMemo1.SetFocus;




Y para cerrarlo podríamos escribir en el Evento/OnDbClick de DBMemo1:


   DBMemo1.Visible := False;


Esto quiere decir que al hacer doble clic sobre el DBMemo este se cerrará.

Pasaríamos la Propiedad/Show Hint de DBMemo1 a True y en su Propiedad/Hint
escribiríamos 'Haga doble clic con el ratón para cerrar'.

Ahora y para acabar Lección 6 vamos a recurrir a MessageDlg para crear
una ventana de advertencia para cuando el usuario clique Salir, borra el evento
escrito en el OnClick de BSalir y cámbialo por este:

   if MessageDlg('Atención, usted va a salir de FindCar Está seguro?',
   mtConfirmation, [mbYes, mbNo], 0) = mrYes then
   begin
   MessageDlg('Hasta otra', mtInformation,
   [mbOk], 0);
   Close;
   end;


Aquí llamamos a la ventana Confirm (mtConfirmation) y le escribimos
el texto que aparece entre comillas además de crearle dos botones (mbYes,
mbNo) donde colocamos una coma y un cero después de mbNo que arrojaría
por resultado que de ser clicado este botón, desaparecería la
ventana sin que pase más nada pero si fuera (=mrYes) entonces (then)
comenzamos (begin) mostrando una ventana de información (mtInformation)
donde dice 'Hasta otra' y a su vez tiene un botón (mb Ok) con la coma
cero a su derecha que de ser clicado nos haría desaparecer la ventana
y a su vez se ejecutaría la siguiente línea de código que
no necesita de muchas explicaciones.


CONSEJOS PARA AGILIZAR EL TRABAJO DE DISEÑO


Sin tener que ir al Object/Inspector otra manera de escribir un código
en un evento OnClick es clicando dos veces sobre el Componente en la Form y
automáticamente nos aparecerá la Unit con el foco entre el begín
y el end; del evento.

No sé exactamente a partir de que versión, (desde la 4 seguro)
Delphi agregó una herramienta muy útil para cuando tenemos que
seleccionar varios Componentes al mismo tiempo, es una especie de "caja"
típica en los programas como Paint donde con una línea punteada
se pueden "encerrar" varios Componentes. Por ej: los botones que tenemos
en FindCar; posicionamos el ratón en el vértice superior izquierdo
del primer botón que vamos a seleccionar (fuera de la superficie de este)
luego con el botón izquierdo presionado (aparecerá un cuadro punteado)
cubrimos todos los componentes que queremos seleccionar; al soltar el botón
estos aparecerán todos con la herramienta de selección en ellos.


LA PROPIEDAD TAG


Antes de que te vuelvas loco/a probando para que sirve, te lo aclararé
yo: casi para nada o lo que es lo mismo: el componente no sufre ninguna variación
al alterarle su valor por defecto que es cero. Aquí se puede introducir
un número entero cualquiera de 14 caracteres (si no le dejas el 0 porque
un valor tiene que tener). Una utilidad sería: supongamos que en la carpeta
de tu proyecto tu guardas una hoja de Word para recordar algunas características
del uso de los componentes que contiene dicho proyecto. Entonces a Table1 le
pones el valor Tag 125 y en la hoja pones 125: esta tabla funciona solo en la
ruta de directorio.......etc etc.


NOTA DEL AUTOR


Aquí damos por concluída la Lección 6 que tiene mucha
"tela para cortar" por tu parte, recurriendo a los trucos de Trucomanía
puedes agregarle el 471 (cuando te dice que dgRowSelect debe estar en True se
refiere a la Propiedad/Options del DBGrid), también el 59 que es muy
interesante. Retoca en cuanto a estética este proyecto y agrega unos
30 registros a la tabla puesto que seguiremos con ella en la Lección
7 donde usaremos el DataModule, indexaremos los registros en tiempo de ejecución,
sacaremos algún informe para imprimir, agilizaremos la introducción
de datos con DBLookUp etc.




Ariel Bustamante para Trucomanía





  unit Main;

 interface

 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   Grids, DBGrids, Db, DBTables, ExtCtrls, DBCtrls, StdCtrls;

 type
   TForm1 = class(TForm)
     Table1: TTable;
     DataSource1: TDataSource;
     DBGrid1: TDBGrid;
     BPrimero: TButton;
     BAnterior: TButton;
     BSiguiente: TButton;
     BUltimo: TButton;
     BAgregar: TButton;
     BBorrar: TButton;
     BInforme: TButton;
     BSalir: TButton;
     PBorrado: TPanel;
     BCancelar: TButton;
     BBorrar2: TButton;
     DBMemo1: TDBMemo;
     procedure BPrimeroClick(Sender: TObject);
     procedure BAnteriorClick(Sender: TObject);
     procedure BSiguienteClick(Sender: TObject);
     procedure BUltimoClick(Sender: TObject);
     procedure BAgregarClick(Sender: TObject);
     procedure BBorrarClick(Sender: TObject);
     procedure BSalirClick(Sender: TObject);
     procedure BCancelarClick(Sender: TObject);
     procedure BBorrar2Click(Sender: TObject);
     procedure BInformeClick(Sender: TObject);
     procedure DBMemo1DblClick(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;

 var
   Form1: TForm1;

 implementation

 {$R *.DFM}

 procedure TForm1.BPrimeroClick(Sender: TObject);
 begin
 Table1.First;
 BAnterior.Enabled := False;
 BSiguiente.Enabled := True;
 end;

 procedure TForm1.BAnteriorClick(Sender: TObject);
 begin
 Table1.Prior;
 BSiguiente.Enabled := True;
 end;

 procedure TForm1.BSiguienteClick(Sender: TObject);
 begin
 Table1.Next;
 BAnterior.Enabled := True;
 end;

 procedure TForm1.BUltimoClick(Sender: TObject);
 begin
 Table1.Last;
 BSiguiente.Enabled := False;
 BAnterior.Enabled := True;
 end;

 procedure TForm1.BAgregarClick(Sender: TObject);
 begin
 Table1.Append;
 end;

 procedure TForm1.BBorrarClick(Sender: TObject);
 begin
 PBorrado.Visible := True;
 end;

 procedure TForm1.BSalirClick(Sender: TObject);
 begin
 if MessageDlg('Atención, usted va a salir de FindCar Está seguro?',
     mtConfirmation, [mbYes, mbNo], 0) = mrYes then
   begin
     MessageDlg('Hasta otra', mtInformation,
       [mbOk], 0);
     Close;
   end;
 end;

 procedure TForm1.BCancelarClick(Sender: TObject);
 begin
 PBorrado.Visible := False;
 end;

 procedure TForm1.BBorrar2Click(Sender: TObject);
 begin
 Table1.Delete;
 PBorrado.Visible := False;
 end;

 procedure TForm1.BInformeClick(Sender: TObject);
 begin
 DBMemo1.Visible := True;
 DBMemo1.SetFocus;
 end;

 procedure TForm1.DBMemo1DblClick(Sender: TObject);
 begin
 DBMemo1.Visible := False;
 end;

 end.