Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2014
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
Estructuras de parametros en delphi

Buenas gente

Mi idea es la siguiente; quiero hacer una estructura de parametros, que incluya variables, procedimientos, funciones etc... Pero por mucho que busco y pruebo cosas no consigo dar con la solucion.

He intentado hacerlo un record, pero no se muy bien donde declararlo y no consigo que me funcione.
Esta es mi idea por si no me he explicado con claridad:
Código Delphi [-]
Type
  TOptions = record
    ComAuto         : Boolean;
    ComPort         : Integer;
    Language        : String[10];
    procedure SaveOptions();
      begin
        (codigo)
      end;
End;


procedure TForm1.Button1Click(Sender: TObject);
begin
  TOptions.Language := 'Español';
  TOptions.SaveOptions();
end;

Alguna ayuda??

Saludos y gracias de antemano.
Responder Con Cita
  #2  
Antiguo 09-03-2014
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
¿Y porque no lo haces con clases?
Una opinión, vamos:

Código Delphi [-]
Type
  TOptions = class
  public
    ComAuto : Boolean;
    ComPort : Integer;
    Language : String[10];
    procedure SaveOptions();
End;

procedure TOptions.SaveOptions();
begin
  (codigo)
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Opciones: TOptions;
begin
  Opciones := TOptions.Create;
  try
    Opciones.Language := 'Español';
    Opciones.SaveOptions();
  finally
    Opciones.Free;
  end;
end;
Responder Con Cita
  #3  
Antiguo 10-03-2014
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
Cita:
Empezado por ElKurgan Ver Mensaje
¿Y porque no lo haces con clases?
Una opinión, vamos:

Código Delphi [-]
Type
  TOptions = class
  public
    ComAuto : Boolean;
    ComPort : Integer;
    Language : String[10];
    procedure SaveOptions();
End;

procedure TOptions.SaveOptions();
begin
  (codigo)
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Opciones: TOptions;
begin
  Opciones := TOptions.Create;
  try
    Opciones.Language := 'Español';
    Opciones.SaveOptions();
  finally
    Opciones.Free;
  end;
end;

Porque no sabia que eran xD. Lo de record lo puse porque era lo unico que encontre por internet.

He probado el codigo y va de lujo, pero habría alguna manera para poder acceder directamente sin tener que declarar en cada procedimiento la variable opciones, asignarle la clase y crearla?
Responder Con Cita
  #4  
Antiguo 10-03-2014
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
Vale, ya lo he conseguido
Muchas gracias por la ayuda!
Responder Con Cita
  #5  
Antiguo 10-03-2014
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
Sólo una cosa más.

No dejes de leer "La cara oculta de Delphi 4", del Maestro Marteens. Aunque es antiguo, los primeros capítulos son un compendio de lo que son las clases, propiedades, métodos, clases abstractas, métodos de clase...

Altamente recomendable

Saludos
Responder Con Cita
  #6  
Antiguo 10-03-2014
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
Descargado!
Responder Con Cita
  #7  
Antiguo 10-03-2014
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
Miento, no he conseguido que funcione... Si que me funcionan los procedimientos cuando los llamo, pero las variables parece como si no me las iniciara...


Este es el codigo:
Código Delphi [-]
unit UConfig;

interface

uses  inifiles, SysUtils, Forms;

Type
  TOptions = class

    procedure SaveConfig();

   public
      ComAuto : Boolean;
      ComPort : Integer;
      Language : String[10];
  End;

  var
  Options : TOptions;


implementation

procedure TOptions.SaveConfig();
var
  INI : TIniFile;
begin
  ComAuto := True;

end;

end;

end.

Y cuando intento acceder a una variable me salta este error en el programa:
First chance exception at $005E1272. Exception class $C0000005 with message 'access violation at 0x005e1272: write of address 0x00000004'. Process Test.exe (4500)
Como podria solventar esto? :S

Última edición por jularaXD fecha: 10-03-2014 a las 13:27:04.
Responder Con Cita
  #8  
Antiguo 11-03-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 jularaXD.

Si creaste una instancia de TOptions, acceder a un atributo de la misma no tendría por que elevar una excepción. El error no está en el código visible en tu mensaje.

Aunque existen múltiples motivos que provocan la excepción "Access violation", el mas común es que se intenta usar un recurso no creado o liberar uno que ya fué liberado. Asegurate de que todas las clases estén instanciadas antes de usarlas y verifica la existencia antes de liberarlas. Es buena idea poner el puntero a nil cuando liberas el objeto (vg. FreeAndNil) , de ese modo podrías comprobar lo anterior usando la función Assigned.

En cuanto al mensaje "First chance exception" nunca lo había visto, pero mirando un poco en la web pareciera que podría deberse a la configuración del depurador: What is a First Chance Exception?

Y como siempre, sería de mucha ayuda ver las líneas donde se produce el error. Usar un breakpoint al inicio del código donde se estima que se produce el error y luego realizar Trace Into (F7) para ubicarlo.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 11-03-2014
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
No vero donde está la línea

Código Delphi [-]
Opciones := TOptions.create;

Si no se crea primero el objeto de la clase, siempre tendrás un Access Violation.

¡Lee el libro!

Saludos
Responder Con Cita
  #10  
Antiguo 11-03-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
jularaXD,

Cita:
Empezado por jularaXD
...quiero hacer una estructura...que incluya variables, procedimientos, funciones...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

type

  TMathNum = object
    N1, N2 : Double;
    Operador : String;
    function CalNum(Op : Char) : Double;
    Procedure DspResult(R : Double);
  end;

function TMathNum.CalNum(Op : Char) : Double;
begin

   case Op of

      'S' :
       begin
          Result := N1 + N2;
          Operador := '+';
       end;

      'R' :
       begin
          Result := N1 - N2;
          Operador := '-';
       end;

      'M' :
       begin
          Result := N1 * N2;
          Operador := '*';
       end;

      'D' :
       begin
          Result := N1 / N2;
          Operador := '/';
       end;

   end;

end;

Procedure TMathNum.DspResult(R: Double);
var
   Msg : String;
begin
   Msg := FormatFloat('#,###,###,###,###.00',R);
   Msg := Format('%f %s %f = ',[N1,Operador,N2]) + Msg;
   MessageDlg(Msg,mtInformation,[mbOK],0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   M : TMathNum;
begin
   M.N1 := 789.45;
   M.N2 := 210.55;
   M.DspResult(M.CalNum('S'));
   M.DspResult(M.CalNum('R'));
   M.DspResult(M.CalNum('M'));
   M.DspResult(M.CalNum('D'));
end;

end.
El código anterior implementa y utiliza el objeto TMathNum para realizar operaciones aritméticas de dos números reales y mostrar su resultado.

Nota: El tipo object permite instanciar objetos sin usar el método Create y es muy util para implementaciones de tipos abstractos simples, para desarrollos formales orientados a objetos se debe usar el tipo Class.

Espero sea útil

Nelson.
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
Problemas con estructuras godel Varios 3 23-02-2008 13:08:34
Problemas con dll y estructuras mar646 OOP 2 17-11-2007 02:15:00
Estructuras?¿ CHiCoLiTa PHP 7 03-01-2005 10:09:53
estructuras de bd ejemplos osvrom Tablas planas 3 02-12-2003 16:32:26
Enviar estructuras como parametros a funciones Oracle SLAKE Conexión con bases de datos 0 02-10-2003 17:14:05


La franja horaria es GMT +2. Ahora son las 23:51:21.


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