Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-07-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola eennzzoo.

Yo también había pensado en una opción similar a la publicada por dec.

.h:
Código:
#ifndef Unit2H
#define Unit2H

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>

class Cliente {

private:
  String FNombre;
  String FApellido;
  String FDni;
  String FFileName;
  TStrings *FTS;

public:
  Cliente();
  __property String Nombre   = { read = FNombre, write = FNombre };
  __property String Apellido = { read = FApellido, write = FApellido };
  __property String Dni      = { read = FDni, write = FDni };
  __property String FileName = { read = FFileName, write = FFileName };
  bool Open();
  bool GetData(const String Dni);
  bool Delete(const String Dni);
  bool Save();
  ~Cliente();
};

#endif
.cpp
Código:
#pragma hdrstop
#include "Unit2.h"
#pragma package(smart_init)

Cliente::Cliente()
{
  FTS = new TStringList;
}

bool Cliente::Open()
{
  FTS->LoadFromFile(FFileName);
  return FileExists(FFileName);
}

bool Cliente::GetData(const String Dni)
{
  int p = FTS->IndexOf(Dni);
  if (p != -1) {
    FNombre   = FTS->Strings[p-2];
    FApellido = FTS->Strings[p-1];
    FDni      = FTS->Strings[p];
    return true;
  } else {
    MessageBox(0,"Cliente no encontrado", "", MB_ICONERROR);
    return false;
  }
}

bool Cliente::Delete(const String Dni)
{
  int p = FTS->IndexOf(Dni);
  bool r = false;
  if (p == -1)
    MessageBox(0,"Cliente no encontrado", "", MB_ICONERROR);
  else if (MessageBox(0, "¿ Borra el cliente ?","",MB_YESNO+MB_ICONQUESTION)==IDYES) {
    FTS->Delete(p);
    r = true;
  }
  return r;
}

bool Cliente::Save()
{
  if (FNombre.IsEmpty() || FApellido.IsEmpty() || FDni.IsEmpty()) {
    MessageBox(0,"Faltan uno o mas datos requeridos", "", MB_ICONERROR);
    return false;
  } else if (FTS->IndexOf(FDni)!= -1) {
    MessageBox(0,"Cliente existente", "", MB_ICONERROR);
    return false;
  } else {
    FTS->Add(FNombre);
    FTS->Add(FApellido);
    FTS->Add(FDni);
    FTS->SaveToFile(FFileName);
    return true;
  }
};

Cliente::~Cliente()
{
  delete FTS;
}
Ejemplo de uso:
Código:
...
#include "Unit2.h"
...

Cliente *cl;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 cl = new Cliente();
 cl->FileName = "cliente.txt";  /* ruta+nombre de archivo */
 cl->Open();
}

void __fastcall TForm1::btnShowClick(TObject *Sender)
{
  if (cl->GetData(Edit1->Text)) {
    edNom->Text = cl->Nombre;
    edApe->Text = cl->Apellido;
    edDni->Text = cl->Dni;
  }
}

void __fastcall TForm1::btnDeleteClick(TObject *Sender)
{
  if (cl->Delete(Edit1->Text)) {
    edNom->Clear();
    edApe->Clear();
    edDni->Clear();
  }
}

void __fastcall TForm1::btnSaveClick(TObject *Sender)
{
  cl->Save();
}
...
Espero que de las dos sugerencias puedas sacar ideas para implementar tu clase.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 03-07-2014
Avatar de eennzzoo
eennzzoo eennzzoo is offline
Miembro
NULL
 
Registrado: nov 2013
Ubicación: Argentina
Posts: 59
Poder: 11
eennzzoo Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola eennzzoo.

Yo también había pensado en una opción similar a la publicada por dec.

.h:
Código:
#ifndef Unit2H
#define Unit2H

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>

class Cliente {

private:
  String FNombre;
  String FApellido;
  String FDni;
  String FFileName;
  TStrings *FTS;

public:
  Cliente();
  __property String Nombre   = { read = FNombre, write = FNombre };
  __property String Apellido = { read = FApellido, write = FApellido };
  __property String Dni      = { read = FDni, write = FDni };
  __property String FileName = { read = FFileName, write = FFileName };
  bool Open();
  bool GetData(const String Dni);
  bool Delete(const String Dni);
  bool Save();
  ~Cliente();
};

#endif
.cpp
Código:
#pragma hdrstop
#include "Unit2.h"
#pragma package(smart_init)

Cliente::Cliente()
{
  FTS = new TStringList;
}

bool Cliente::Open()
{
  FTS->LoadFromFile(FFileName);
  return FileExists(FFileName);
}

bool Cliente::GetData(const String Dni)
{
  int p = FTS->IndexOf(Dni);
  if (p != -1) {
    FNombre   = FTS->Strings[p-2];
    FApellido = FTS->Strings[p-1];
    FDni      = FTS->Strings[p];
    return true;
  } else {
    MessageBox(0,"Cliente no encontrado", "", MB_ICONERROR);
    return false;
  }
}

bool Cliente::Delete(const String Dni)
{
  int p = FTS->IndexOf(Dni);
  bool r = false;
  if (p == -1)
    MessageBox(0,"Cliente no encontrado", "", MB_ICONERROR);
  else if (MessageBox(0, "¿ Borra el cliente ?","",MB_YESNO+MB_ICONQUESTION)==IDYES) {
    FTS->Delete(p);
    r = true;
  }
  return r;
}

bool Cliente::Save()
{
  if (FNombre.IsEmpty() || FApellido.IsEmpty() || FDni.IsEmpty()) {
    MessageBox(0,"Faltan uno o mas datos requeridos", "", MB_ICONERROR);
    return false;
  } else if (FTS->IndexOf(FDni)!= -1) {
    MessageBox(0,"Cliente existente", "", MB_ICONERROR);
    return false;
  } else {
    FTS->Add(FNombre);
    FTS->Add(FApellido);
    FTS->Add(FDni);
    FTS->SaveToFile(FFileName);
    return true;
  }
};

Cliente::~Cliente()
{
  delete FTS;
}
Ejemplo de uso:
Código:
...
#include "Unit2.h"
...

Cliente *cl;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 cl = new Cliente();
 cl->FileName = "cliente.txt";  /* ruta+nombre de archivo */
 cl->Open();
}

void __fastcall TForm1::btnShowClick(TObject *Sender)
{
  if (cl->GetData(Edit1->Text)) {
    edNom->Text = cl->Nombre;
    edApe->Text = cl->Apellido;
    edDni->Text = cl->Dni;
  }
}

void __fastcall TForm1::btnDeleteClick(TObject *Sender)
{
  if (cl->Delete(Edit1->Text)) {
    edNom->Clear();
    edApe->Clear();
    edDni->Clear();
  }
}

void __fastcall TForm1::btnSaveClick(TObject *Sender)
{
  cl->Save();
}
...
Espero que de las dos sugerencias puedas sacar ideas para implementar tu clase.

Saludos
Si ahora si, gracias.
__________________
https://www.facebook.com/riverplateoficial
Responder Con Cita
  #3  
Antiguo 03-07-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Conste que mi clase de más arriba contiene un error: no destruyo la instancia de "FContenidoBaseDatos". No me he dado cuenta antes.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 03-07-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
ecfisa ¿Que es eso de __property? Suena mas a un componente.
Responder Con Cita
  #5  
Antiguo 03-07-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aguml.

Básicamente una propiedad, es una extensión creada para C++ Builder que permite unificar métodos de acceso y modificación a miembros de una clase. Su uso no es privativo de los componentes.

Cabe aclarar que C++ estandar no incluye el concepto de propiedad y que C++ Builder recibe de la VCL, si tratásemos con ANSI C++ tendríamos que escribir:
Código:
class MiClass {
private:
  int FValue;
public:
  void SetValue(int Value) { FValue = Value; }
  int GetValue() { return FValue; }
};
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra 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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
error de missing separator con el siguiente codigo feliz-58 C++ Builder 7 28-03-2013 14:06:05
Como implementar este codigo en delphi 7 freddiaz07 Internet 4 16-09-2011 22:34:39
Me he atascado en el siguiente código David PHP 3 26-02-2007 00:15:52
Estoy atascado en el siguiente código David OOP 4 01-10-2006 10:45:45
Implementar el constructor de una clase Alcolea OOP 2 14-06-2006 06:39:05


La franja horaria es GMT +2. Ahora son las 18:16:20.


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