![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
Hola,
Cree una clase TFechaHora unit CFechaHora; interface uses Windows, Messages, Forms, Dialogs, SysUtils, StdCtrls; type TFechaHora = class // private { Private declarations } dia: integer; mes: integer; anio: integer; hora: string; // public { Public declarations } constructor Create; function getDia():integer; function getMes():integer; function getMesCadena():string; function getAnio():integer; function getFechaCad():string; function getHora():string; procedure setHoy(); procedure setFecha (d, m, a: integer); procedure setHora(h: string); end; var FechaHora: TFechaHora; implementation uses tablas1, ModUtilitarios; constructor TFechaHora.Create; begin dia:=0; mes:=0; anio:=0; end; function TFechaHora.getDia():integer; begin result:=FechaHora.dia; end; function TFechaHora.getMes():integer; begin result:=FechaHora.mes; end; unction TFechaHora.getMesCadena():string; var var_mes: integer; var_cadena: string; begin var_mes:= FechaHora.getMes(); case var_Mes of 1: var_cadena:='Enero'; 2: var_cadena:='Febrero'; 3: var_cadena:='Marzo'; 4: var_cadena:='Abril'; 5: var_cadena:='Mayo'; 6: var_cadena:='Junio'; 7: var_cadena:='Julio'; 8: var_cadena:='Agosto'; 9: var_cadena:='Septiembre'; 10: var_cadena:='Octubre'; 11: var_cadena:='Noviembre'; 12: var_cadena:='Diciembre'; end; result:= var_cadena; end; function TFechaHora.getAnio():integer; begin getAnio:=FechaHora.anio; end; function TFechaHora.getFechaCad():string; var var_dia, var_anio, var_cad: string; begin str(FechaHora.getDia(),var_dia); str(FechaHora.getAnio(),var_anio); var_cad:= var_dia+FechaHora.getMesCadena()+var_anio; showmessage(var_cad); result:= var_cad; end; function TFechaHora.getHora():string; begin getHora:=FechaHora.hora; end; procedure TFechaHora.setHoy(); begin //Completar end; procedure TFechaHora.setFecha (d, m, a: integer); var var_d, var_m, var_a: string; begin var_d:= IntToStr(d); var_m:= IntToStr(m); var_a:= IntToStr(a); showmessage('en el CONSTRUCTOR'+var_d+' '+var_m+' '+var_a); dia:=d; mes:=m; anio:=a; end; procedure TFechaHora.setHora(h: string); begin hora:=h; end; end. Por el momento hago uso de esta clase de la siguiente manera: procedure TSERrecepcion.but_registrarClick(Sender: TObject); var var_hoy: string; fecha: TFechaHora; begin fecha.Create; var_hoy:=fecha.getFechaCad(); // fecha.setFecha(28,10,2003); // FechaHora.setFecha(28,10,2003); fecha.Free; Showmessage ('Fecha Actual'+var_hoy); end; Y al momento de hacer correr me sale un error de EAccessViolation, realice un trace, al parecer el constructor se ejecuta bien (asume los valores correspondientes), pero al tratar de recuperar los valores de los atributos (getDia(), getMes(), getAnio()) salen el error. Trate de llamar a otro método (setFecha) y me vuelve a salir el error al asignar valores a los atributos. Los atributos antes eran privados (pense que ese era el error), quite la instruccion y tengo el mismo problema, también probé poniendo: Self.dia:=d; y nada. ¿¿¿Alguna sugerencia??? |
|
#2
|
||||
|
||||
|
Sin profundizar demasiado en tu código, puedo decirte que esta mal la implementación. Para crear una nueva instancia de una clase, la sintaxis es "Nombre de la Clase"+"Método Constructor" (TMiClase.Create), por lo que tu código tendría que ser algo como:
Código:
procedure TSERrecepcion.but_registrarClick(Sender: TObject);
var
var_hoy: string;
fecha: TFechaHora;
begin
fecha := TFechaHora.Create;
try
var_hoy := fecha.getFechaCad();
...
finally
fecha.Free;
end;
Showmessage ('Fecha Actual'+var_hoy);
end;
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#3
|
|||
|
|||
|
Cambia la primera línea dentro del procedure:
Código:
procedure TSERrecepcion.but_registrarClick(Sender: TObject);
var
var_hoy: string;
fecha: TFechaHora;
begin
fecha := TFechaHora.Create;
var_hoy:=fecha.getFechaCad();
// fecha.setFecha(28,10,2003);
// FechaHora.setFecha(28,10,2003);
fecha.Free;
Showmessage ('Fecha Actual'+var_hoy);
end;
__________________
Guía de Estilo |
|
#4
|
||||
|
||||
|
Los métodos getDia, getMes, etc. de la clase TFechaHora hacen referencia a la variable global FechaHora que nunca se construye.
Además no es recomendable que los métodos de una clase hagan referencia a una variable de la misma clase. Más aún, además de estos errores en el evento Click del final "construtes" una instancia de FechaHora de manera incorrecta: fecha.create Debe ser fecha := TFechaHora.Create; // Saludos |
|
#5
|
||||
|
||||
|
Se me adelantaron delphi.com.ar y andres1569. Sólo te reitero que, aún corrigiendo lo que ellos bien te indican, también deberás fijarte en los primero que te mencioné.
// Saludos |
|
#6
|
||||
|
||||
|
Cita:
Código:
function TFechaHora.getDia():integer; begin Result := dia; end; function TFechaHora.getMes():integer; begin Result := Self.mes; end; Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#7
|
||||
|
||||
|
Cita:
// Saludos |
|
#8
|
|||
|
|||
|
Hola:
corregi, los errores que me mencionaron, ahora si funciona Gracias, |
|
#9
|
||||
|
||||
|
Hola a todos, estoy realizando un QReport y necesite agregar un nuevo procedimiento y no se k estoy haciendo mal pero me saca un error de 'Acces Violation at adress 005313EE in module ...'
Adjunto el codigo que eh ingresado y agradezco la ayuda k me puedan brindar. Código:
unit UInfManualET;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, QuickRpt, QRCtrls, Jpeg, Menus, QRExport, StdCtrls;
type
TInfManualET = class(TForm)
QRManualET: TQuickRep;
SUBDetalleDefectos: TQRSubDetail;
QRWMFFilter1: TQRWMFFilter;
PopupMenu1: TPopupMenu;
...............................
blanco5: TQRLabel;
blanco6: TQRLabel;
cantotempaque: TQRLabel;
QRLblUnidad: TQRLabel;
procedure QRBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
procedure SubDetalleEmpaquesBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
InfManualET: TInfManualET;
contpartes, contador, contador1:word;
imgensamble, imgpartes, imgempaque, imgestiba, nueva1, nueva2, nueva3, nueva4, cliente:string;
implementation
uses UDMinformes, UDMsip1, UDMsip, UInfManualSSD;
{$R *.DFM}
Procedure MueveTitulo; ForWard;
procedure TInfManualET.QRBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
QRLblParte1.Caption:='';
QRLblParte2.Caption:='';
QRLblParte3.Caption:='';
QRLblRef1.Caption:='';
QRLblRef2.Caption:='';
QRLblRef3.Caption:='';
contpartes:=0;
DmInformes.QPartes.Open;
DmInformes.QPartes.params[0].AsString:=DmInformes.QFichaProducto['referencia'];
DmInformes.QPartes.close;
DmInformes.Qpartes.Open;
DmSip1.TblEnsamble.open;
DmSip1.TblOrdenEnsam.Open;
Dmsip1.TblOrdenTrabajo.open;
DmSip.Tblproductos.open;
with DmInformes do
begin
if DmInformes.Qpartes['IMPRESION']='N' then
begin
contpartes:=contpartes+1;
case contpartes of
1: begin
QRLblParte1.Caption:=DmInformes.Qpartes['referencia_1'];
QRLblRef1.caption:=DmInformes.Qpartes['descripcion_pdto'];
end;
2: begin
QRLblParte2.Caption:=DmInformes.Qpartes['referencia_1'];
QRLblRef2.caption:=DmInformes.Qpartes['descripcion_pdto'];
end;
3: begin
QRLblParte3.Caption:=DmInformes.Qpartes['referencia_1'];
QRLblRef3.caption:=DmInformes.Qpartes['descripcion_pdto'];
end;
end;
DmInformes.QPartes.Next;
end;
imgensamble :='E:\sip\datos\productos\'+QFichaProducto['referencia']+'.jpg';
imgpartes :='E:\sip\datos\partes\'+QFichaProducto['referencia']+'.jpg';
imgempaque:='E:\sip\datos\empaques\'+QFichaProducto['referencia']+'.jpg';
imgestiba:='E:\sip\datos\estiba\'+QFichaProducto['referencia']+'.jpg';
try
QRImage1.Picture.LoadFromFile(imgensamble);
QRImage2.Picture.LoadFromFile(imgpartes);
QRImage3.Picture.LoadFromFile(imgempaque);
QRImage4.Picture.LoadFromFile(imgestiba);
except
begin
QRImage1.picture:=nil;
QRImage2.picture:=nil;
QRImage3.picture:=nil;
QRImage4.picture:=nil;
end;
end;
end;
end;
procedure TInfManualET.SubDetalleEmpaquesBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
contador := 0;
with DmInformes do
begin
DmSip.TblEmpaquet.open;
QLeeEmpaqueProducto.params[0].AsString := QFichaProducto['referencia'];
QLeeEmpaqueProducto.params[1].AsString := cliente;
QLeeEmpaqueProducto.close;
QLeeEmpaqueProducto.open;
QLeeProductoDefecto.open; //esto es una tbl
cantotempaque.caption := '';
contador1 := 1;
if (QLeeEmpaqueProducto['cantidadotros4'] = 0) or (QLeeEmpaqueProducto['cantidadotros4'] = null) then
else
cantotempaque.caption := FormatFloat('###,###',QLeeEmpaqueProducto['cantidadotros4']);
if (QLeeEmpaqueProducto['cantidadotros3'] = 0) or (QLeeEmpaqueProducto['cantidadotros3'] = null) then
else
cantotempaque.caption := FormatFloat('###,###',QLeeEmpaqueProducto['cantidadotros3']);
if (QLeeEmpaqueProducto['cantidadotros2'] = 0) or (QLeeEmpaqueProducto['cantidadotros2'] = null) then
else
cantotempaque.caption := FormatFloat('###,###',QLeeEmpaqueProducto['cantidadotros2']);
if (QLeeEmpaqueProducto['cantidadotros1'] = 0) or (QLeeEmpaqueProducto['cantidadotros1'] = null) then
else
cantotempaque.caption := FormatFloat('###,###',QLeeEmpaqueProducto['cantidadotros1']);
if (QLeeEmpaqueProducto['cantidadbolsa'] = 0) or (QLeeEmpaqueProducto['cantidadbolsa'] = null) then
else
cantotempaque.caption := FormatFloat('###,###',QLeeEmpaqueProducto['cantidadbolsa']);
if (QLeeEmpaqueProducto['cantidad'] = 0) or (QLeeEmpaqueProducto['cantidad'] = null) then
else
cantotempaque.caption := FormatFloat('###,###',QLeeEmpaqueProducto['cantidad']);
end;
with DmSip do
begin
empaque1.caption := '';
empaque2.caption := '';
empaque3.caption := '';
empaque4.caption := '';
empaque5.caption := '';
empaque6.caption := '';
blanco1.caption := '';
blanco2.caption := '';
blanco3.caption := '';
blanco4.caption := '';
blanco5.caption := '';
blanco6.caption := '';
TblEmpaqueT.open;
nueva1:=cliente;
nueva2:=tblempaquet['referencia'];
nueva3:= DmInformes.QLeeEmpaqueProducto['caja'];
nueva4:=DmInformes.QLeeEmpaqueProducto['bolsa'];
if TblEmpaquet.locate('referencia', DmInformes.QLeeEmpaqueProducto['caja'],[]) then
begin
contador := contador + 1;
MueveTitulo;
end;
if TblEmpaquet.locate('referencia', DmInformes.QLeeEmpaqueProducto['bolsa'],[]) then
begin
contador := contador + 1;
MueveTitulo;
end;
if TblEmpaquet.locate('referencia', DmInformes.QLeeEmpaqueProducto['otros1'],[]) then
begin
contador := contador + 1;
MueveTitulo;
end;
if TblEmpaquet.locate('referencia', DmInformes.QLeeEmpaqueProducto['otros2'],[]) then
begin
contador := contador + 1;
MueveTitulo;
end;
if TblEmpaquet.locate('referencia', DmInformes.QLeeEmpaqueProducto['otros3'],[]) then
begin
contador := contador + 1;
MueveTitulo;
end;
if TblEmpaquet.locate('referencia', DmInformes.QLeeEmpaqueProducto['otros4'],[]) then
begin
contador := contador + 1;
MueveTitulo;
end;
dminformes.p.next;
cliente:=dminformes.p['cliente'];
end;
end;
procedure MueveTitulo;
begin
if contador = 1 then
InfManualSSD.empaque1.caption := ' '+DmSip.TblEmpaquet['descripcion'];
if contador = 2 then
InfManualSSD.empaque2.caption := ' '+DmSip.TblEmpaquet['descripcion'];
if contador = 3 then
InfManualSSD.empaque3.caption := ' '+DmSip.TblEmpaquet['descripcion'];
if contador = 4 then
InfManualSSD.empaque4.caption := ' '+DmSip.TblEmpaquet['descripcion'];
if contador = 5 then
InfManualSSD.empaque5.caption := ' '+DmSip.TblEmpaquet['descripcion'];
if contador = 6 then
InfManualSSD.empaque6.caption := ' '+DmSip.TblEmpaquet['descripcion'];
end;
end.
__________________
Alejandrina |
|
#10
|
||||
|
||||
|
Hola Alejandrina.
Creo que debiste publicar el mensaje como un hilo nuevo, ya que difiere significativamente del tema empezado por Tica. Seguramente algún moderador lo acomodará como corresponde. Mientras tanto, dinos en qué línea de tu código se detiene el programa cuando surge la excepción. Gracias. Al González. ![]() |
![]() |
|
|
|