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

 
 
Herramientas Buscar en Tema Desplegado
  #13  
Antiguo 16-07-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
Cita:
Empezado por bucanero Ver Mensaje
En cuanto a tu sugerencia de usar la RTTI es por donde en un principio pensé que podría ir la solución a este problema, aunque en estos temas de la RTTI me pierdo...
Viendo tu código me encuentro que en la linea donde debe de buscar y localizar la classe devuelve NIL y no la encuentra.
El problema imagino que viene de que para que la pueda localizar hay que registrar previamente la clase.
Yo también me encontré con ese problema del Nil, y por eso linkeaba la solución en ésta linea de código.

Código Delphi [-]
Initialization
  TMyIniFile.mydummy; //Me encontré con este error


en el hilo se dice:
Cita:

Probably the class has not included by the delphi linker in the final executable. A fast try can be the following:

1.Declare a static method on your class. This method should be an empty method, a simple begin end.
2.Call this static method in the initialization section of this unit.
3. Ensure that the unit is referenced in your project somewhere.
4.Now you should see the class with TRttiContext.FindType

Cita:
Empezado por bucanero Ver Mensaje
En cuanto a esta propuesta... sinceramente, no veo como aplicar una solución...

Porque mi idea final a parte de lo ya explicado es sobre-escribir los métodos de lectura/escritura de mi clase descendiente de TINIFile, para que en vez de guardar los datos en un fichero los guarde directamente en la BBDD, manteniendo la máxima compatibilidad con el componente original para que en determinados casos que no quiera utilizar mi componente propio y/o guardar en la BBDD puede usar directamente un TINIFile.
Bueno, eso es nuevo, creí que querías extender la funcionalidad, y no sobre escribirla.

Existe una técnica que te puede servir y es la de interceptores, pero como todo, no es para abusar de ella.

y funciona mas o menos asi:

En la clausula Uses defines la unidad Inifiles, que contiene la implementación nativa del componente.

Después, defines la clase "interceptora" TIniFile (Tiene el mismo nombre de la nativa) la cual hereda de System.IniFiles.TIniFile (debes especificar la unidad).

Y en esta nueva clase, puedes definir nueva funcionalidad y sobreescribir la existente.


Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IniFiles, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


  TIniFile = Class(System.IniFiles.TIniFile)
  Private
  Public
    procedure WriteString(const Section, Ident, Value: String); reintroduce;
  End;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var vIniFile: TIniFile;
begin
  Try
    vIniFile:= TIniFile.Create('C:\MyFile.ini');
    vIniFile.WriteInteger('prueba','numero',5); //este lo escribe
    vIniFile.WriteString('prueba','texto','helou'); //ese lo muestra en un showmessage
  Finally
    vIniFile.Free;
  End;
end;

{ TIniFile }

procedure TIniFile.WriteString(const Section, Ident, Value: String);
begin
  showMessage('Sobre-escribí el metodo '+Value);
end;

end.


en tu caso, modificarias tu codigo aqsí..

Código Delphi [-]
unit MyIniFiles;

interface

uses IniFiles;

type
  TIniFile = class(System.IniFiles.TIniFile)
  private
  public
    class procedure mydummy; static;
    constructor Create(const FileName: string);
  end;

implementation



revisa
Responder Con Cita
 



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
Crear objetos mediante su clase coso Trucos 0 05-12-2008 23:37:15
duda al crear un descendiente de tpanel hibero OOP 1 23-05-2008 21:07:52
problema crear dll con clase rzf1983 Varios 9 08-11-2007 22:56:52
crear un evento en una clase? chelox OOP 4 06-06-2007 20:14:20
Crear clase. Basico de POO. DarkByte OOP 17 24-08-2005 17:37:21


La franja horaria es GMT +2. Ahora son las 00:25:01.


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