Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-07-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
Ayuda con nuevo componente

Hola foristas!
Comento lo siguiente.
He desarrollado un componente para escribir numeros sin necesidad de colocar formatos decimales ni de miles, automáticamente lo hace, que es el fin de este, solo faltan unos pequeños detalles para finallizarlo tiene hasta un máximo de 18 ó 19 números con 2 decimales, debo terminar de modificarlo para que acepte el númerod e decimales que se desea, tiene la propiedad para asignarlo, pero no lo he controlado hasta el momento sino con 2 decimales, en fin el problema no es ese, solo les comento hasta donde voy, el problema es este.
El componente NO es DBAWARE, y es lo que necesito saber para poder implementarlo. He visto en el código del DBCtrls de donde desciende el TDBEdit (TMaskEdit) y he visto unas cosas que se que no necesito, se que tengo que hacer el componente desde 0 o algo asi, bueno de 0 no debe derivar de alguno que podría se el mismo que he desarrollado pero adicionandole las propiedades de accedo a datos.
Las pruebas que he estado haciendo con el TDBEdit al derivar el componente de éste al insertar el dato o al guardarlo me da un error en la conversión del formato, el separador de decimales es por defecto ',' y al hacer el post o al guardar el dato el mensaje que lanza es algo asi "No es un formato de punto flotante", no recuerdo muy ben pero es referente al formato decimal.

Lo que necesito saber es ya que desciende del TMaskEdti lee el formato de mascara, pero como no le he asihnado una porque todo lo controlo por código.

Espero que me ayuden o me den ideas ya que pienso colocar este componente en la web del club delphi pidiendo primero ell permiso del webmaster si asi lo permite.

Les pido el favor que no me pidan que publique el código son terminarlo, ya que es un reto para mi terminar este componente que me tiene entusiasmado, de hecho ya lo termine como habia icho pero no es dbaware.

Gracias de antemano y saludes a to2
Responder Con Cita
  #2  
Antiguo 13-07-2003
mosorio mosorio is offline
Miembro
 
Registrado: may 2003
Posts: 159
Poder: 22
mosorio Va por buen camino
Angry

Hola compañeros,
Tengo un inconveniente con el componente que estoy desarrollando, el principal funciona bien sib problemas depués de haberlo testeado varias veces, el inconveniente lo tengo con el derivado para acceso a datos y es los iguiente, segun lo que aparece en el curso de creación de componenstes de revuelta..
lo que hay que hacer es colocar unos metodos para que funcione lo mínimo, pero a my no me va, el código de lo que he hecho es el siguiente:

Cita:
unit DBNumFormat;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls, NumFormat,
DB, DBCtrls;

type
TDBNumFormat = class(TNumFormat)
private
FDataLink : TFieldDataLink;
FReadOnly : Boolean;
function GetDataField: String;
procedure SetDataField(const Value : String);
function GetDataSource: TDataSource;
procedure SetDataSource(Value : TDataSource);
function GetReadOnly: Boolean;
procedure SetReadOnly(Value: Boolean);
procedure EditingChange(Sender: TObject);
protected
procedure UpdateData(Sender: TObject);
procedure DataChange(Sender : TObject);
procedure Notification(AComponent : TComponent; Operation : TOperation); override;
procedure CMExit(var Message: TWMNoParams); message CM_EXIT;
procedure Change;
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
published
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Argades-[DA]', [TDBNumFormat]);
end;

{ TDBNumFormat }

function TDBNumFormat.GetDataField: String;
begin
Result := FDataLink.FieldName;
end;

procedure TDBNumFormat.SetDataField(const Value: String);
begin
FDataLink.FieldName := Value;
end;

function TDBNumFormat.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;

procedure TDBNumFormat.SetDataSource(Value: TDataSource);
begin
if FDataLink.DataSource <> Value then
begin
FDataLink.DataSource := Value;
if Value <> Nil then
Value.FreeNotification(Self);
end;
end;

function TDBNumFormat.GetReadOnly: Boolean;
begin
Result := FDataLink.ReadOnly;
end;

procedure TDBNumFormat.SetReadOnly(Value: Boolean);
begin
FDataLink.ReadOnly := Value;
end;

procedure TDBNumFormat.Notification(AComponent: TComponent;
Operation: TOperation);
begin
Inherited Notification(AComponent, Operation);
if (Operation = opRemove) And (FDataLink <> Nil) And
(AComponent = DataSource) then
DataSource := Nil;
end;

constructor TDBNumFormat.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle - [csReplicatable];
FReadOnly := False;
FDataLink := TFieldDataLink.Create;
FDataLink.OnDataChange := DataChange;
FDataLink.OnUpdateData := UpdateData;
FDataLink.OnEditingChange := EditingChange;
FDataLink.Control := Self;
end;

destructor TDBNumFormat.Destroy;
begin
FDataLink.Free;
FDataLink := Nil;
inherited Destroy;
end;

procedure TDBNumFormat.DataChange(Sender: TObject);
begin
if FDataLink.Field <> Nil then
Text := FDataLink.Field.Text
else
Text := Name
end;

procedure TDBNumFormat.UpdateData(Sender: TObject);
begin
FDataLink.Field.Text := Text;
end;

procedure TDBNumFormat.EditingChange(Sender: TObject);
begin
FReadOnly := Not FDataLink.Editing;
end;

procedure TDBNumFormat.CMExit(var Message: TWMNoParams);
begin
try
FDataLink.UpdateRecord;
except
SetFocus;
raise;
end;
inherited;
end;

procedure TDBNumFormat.Change;
begin
inherited Changed;
FDataLink.Modified;
end;

end.
Obviamente que haciendo las respecitas declaraciones donde se indica, el problema es que NO me refleja el cambio en el campo de la tabla, que sucede, no lo se, espero alguien me ayude a solucionarlo, tengo el proyecto bloqueado a falta del componente.
El componente original lo que hace es escribir el número comenzando por los decimales como en una caja registradora, sin necesidad de escibir el decimal ni los separadores de miles, esto se asigna en las propiedades, pero el de acceso a datos no me funciona como ya he dicho.

Espero su ayuda de antemano.
El link de la información es: http://personal.redestb.es/revueltaroche/ccu12.htm
http://www.marteens.com/trick29.htm
Responder Con Cita
  #3  
Antiguo 14-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

Prueba a cambiar el código del método Change, no digo que con esto funcione, pero es para hacerlo como está en el TDBEdit:
Código:
procedure TDBNumFormat.Change;
begin
  FDataLink.Modified;
  inherited Change;  // en vez de Changed
end;
__________________
Guía de Estilo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:13:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi