Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Funciones para novatos... (https://www.clubdelphi.com/foros/showthread.php?t=14833)

Xianto 01-10-2004 16:30:53

Funciones para novatos...
 
Muy buenas, soy un nuevo miembro de esta linda comunidad y necesito una explicación...

He programado en casi todo C, Java, VB y demas de micro$oft... pero soy nuevo en el delphi... tan solo 2 dias, y he probado un par de cosillas, por lo que estoy muy contento. Necesito algun lenguaje potente para trabajar con DB pero que sea tipo RAD, por eso estoy probando el delphi.

Pero tengo un problemilla con el tema de hacer un archivo .pas, una unit en la que esten todas mis definiciones, las que uso generalmente. El problema es que no hay tanta documentacion de delphi como de otros lenguajes, y la que hay es de versiones viejas, incluso la version 8 tiene poca docuemtación...

He aqui el problema, quiero hacer mi unit, pero el problema es la clase... la verdad que no tengo idea cuales son las clases y me ha sido imposible encontrar informacion sobre ello.

Ejemplo:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, etccccc;

type
TFormA = class(TForm)
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Pepa: TPepa;

implementation

{$R *.dfm}

procedure TPepa.FormActivate(Sender: TObject);
begin
a := b;
end;

end.

En este ejemplo la clase es un TForm) lo que quiero es definir mi clase con alguna funcion y variables Publicas o Globales para ver de todos lados, pero no se como hacer, he probado varias cosas, pero al no estar familiarizado con los errores no termino de ver la verdad !!!

Pido por favor que alguien me detalle una clase cualquiera sea que no necesite de ningun formulario o cualquier otra cosa... algo que el programa interprete como codigo añadido y que pueda incorporar en el resto de la aplicacion tan solo con el uses...

Desde ya muy agradecido !!!

Neftali [Germán.Estévez] 01-10-2004 16:58:16

Cita:

Empezado por Xianto
...En este ejemplo la clase es un TForm) lo que quiero es definir mi clase con alguna funcion y variables Publicas o Globales para ver de todos lados

Se pueden definir métodos y propiedades de la clase en las partes public y published (en realidad la parte published sería para eventos y propiedades que puedan aparecer en el explorador de objetos -en caso de clases que lo utilicen-) de la clase (procA); Luego a parte si tienes una función que quieres definir en esa Unit que es global y que no pertenece a esa clase puedes definirla fuera de la clase (procC); En tu ejemplo:

Código Delphi [-]
type
TFormA = class(TForm)
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
// método
procedure procA();
end;
var
Pepa: TPepa;
// Defininición externa a la calse
procedure procC();
 
implementation
{$R *.dfm}
procedure TPepa.FormActivate(Sender: TObject);
begin
a := b;
end;
end.

Para utilizar el método published harías algo similar a ésto:

Código Delphi [-]
 
uses
UnitForm2;
...
var
F1:TFormA;
begin
F1 := TFormA.Create(Application);
F1.procA;
...
 
// Para utlizar el método que no pertenece a la clase basta con que
// la unit esté añadida al uses.
procC();
...

Lepe 01-10-2004 17:01:17

en Delphi: File --> New --> unit;

Código Delphi [-]
unit Codigoutil;
{-----------------------------------------------------------------------------
 Unit Name: Codigoutil
 Author:    Lepes
 Purpose:   Reunir funciones de muy comun uso bajo una sola Unidad.
 History:   Empezada el 23/10/2003
            Finalizada (creo que nunca se acabará :p )
-----------------------------------------------------------------------------}

interface
uses Math, SysUtils,windows, stdCtrls, DBTABLES, DB; 
//  uses que necesitas porque el tipo de dato está antes del Implementation.
     

  // Tipo de datos publico accesible desde otras unidades
  type TMovidos = record
          desde, donde :Integer;
  end;


//funciones publicas que se acceden solo con añadir el uses de esta unidad
function CreateTemporalFile(const APrefix: string): string;
function GetTemporalFilename: string;

implementation

uses strUtils; 
// uses que hacen falta en la parte de implementation.
// porque uso funciones que estan declaradas en otro sitio
// o porque uso tipos de datos en el interior de las funciones
// que estan declarados en otras unidades.

{-----------------------------------------------------------------------------
  Proc:       CreateTemporalFile
  Autor:      Lepes
  Argumentos: const APrefix: string (3 caracteres máximo)
  Result:     string

  Propósito: Crear un fichero temporal con nombre unico
-----------------------------------------------------------------------------}
function CreateTemporalFile(const APrefix: string): string;
var
   TempPath, TempFile: array [0..MAX_PATH-1] of Char;
begin
   GetTempPath(SizeOf(TempPath), TempPath);
   if GetTempFileName(TempPath, PChar(APrefix), 0, TempFile) = 0 then
      RaiseLastOSError;
   Result := string(TempFile);
end;

{-----------------------------------------------------------------------------
  Proc:       GetTemporalFilename
  Autor:      Lepes
  Argumentos: None
  Result:     string

  Propósito: Obtener un Nombre de fichero único
  Tambien puede interesar:
  utilizar la función CreateFile, del API de Windows, y hacer uso de la opción
  FILE_FLAG_DELETE_ON_CLOSE. Los ficheros creados con este atributo se borran
  automáticamente cuando se cierran
-----------------------------------------------------------------------------}
function GetTemporalFilename: string;
var
   TempPath: array [0..MAX_PATH-1] of Char;
   G: TGuid;
begin
   GetTempPath(SizeOf(TempPath), TempPath);
   OleCheck(CoCreateGuid(G));
   Result := string(TempPath) + GuidToString(G);
end;

end.

Ahora solo queda guardarla con el nombre CodigoUtil.pas, y añadir la carpeta a : Tools --> enviroment Options --> library --> library path

Para que encuentre la unidad codigoutil al añadirlo en el uses de otras unidades.

Manualmente tambien puedes usar: Project --> Add to project y elegir el archivo codigoutil.

Por supuesto te aconsejo crearte varias librerias segun el tipo de rutinas que vas a incluir (tratamiento de cadenas, de bases de datos, tratamiento de rutas de archivos, etc.) y llamar las unidades de una forma homogenea con un prefijo, por ejemplo, todas mis librerias se llaman LPObjetos, LPConstantes, etc. (LP = Lepes) ;)

En cuanto a crear Clases, es mejor no mezclarla con funciones publicas para no engorronear el archivo. Normalmente las clases las defines en otro archivo .pas que no sea el mismo.

Xianto 01-10-2004 17:09:25

Vaya gente mas simpatica que hay en esta comunidad...
Eternamente agradecido, me han venido de 10 los ejemplos.

Muy amables !

Lepe 02-10-2004 05:28:00

Que conste que Neftali y yo, no nos hemos puesto de acuerdo, cada uno ha puesto su granito de arena y al final hemos acertado, podíamos habernos referido ambos al mismo tema :d.

saludos


La franja horaria es GMT +2. Ahora son las 19:57:00.

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