Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Varios
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 29/09/2013
aitorqrv aitorqrv is offline
Miembro
 
Join Date: Apr 2007
Posts: 18
Poder: 0
aitorqrv Va por buen camino
Ejecutar una función de otra unidad

Hola a todos, a mi cuando programo en PHP me gusta ordenar las funciones todas juntas o ordenarlas por tipos diferentes en archivos separarados. Esto lo hago para poder depurar el programa mas cacilmente en el futuro, pero en delphi no se como se hace.

Por ejemplo me gustaria meter esta función en Unit2 y poder llamarla y utilizarla desde Unit1:

Código Delphi [-]
function ReverseString( s : string ) : string;
var
  i  : integer;
  s2 : string;
begin
  s2 := '';
  for i := 1 to Length( s ) do
    s2 := s[ i ] + s2;
  Result := s2;
end;

Yo he intentado hacerlo asi, pero no funciona:

Unit1.pas
Código Delphi [-]
{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

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

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

uses
  unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
   form1.edit1.Text := ReverseString(form1.edit1.Text);
end;

end.

Unit2.pas
Código Delphi [-]
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;

implementation

function ReverseString( s : string ) : string;
var
  i  : integer;
  s2 : string;
begin
  s2 := '';
  for i := 1 to Length( s ) do
    s2 := s[ i ] + s2;
  Result := s2;
end;

end.

Gracias gracias.
Reply With Quote
  #2  
Old 29/09/2013
dec's Avatar
dec dec is offline
Moderador
 
Join Date: Dec 2004
Location: Alcobendas, Madrid, España
Posts: 13,142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Para que sea visible desde otras unidades, has de declarar la función en la "interface" de su unidad, es decir:

Código Delphi [-]
unit Unit2;

{$mode objfpc}{$H+}

interface

function ReverseString( s : string ) : string;

uses
  Classes, SysUtils;

implementation

function ReverseString( s : string ) : string;
var
  i  : integer;
  s2 : string;
begin
  s2 := '';
  for i := 1 to Length( s ) do
    s2 := s[ i ] + s2;
  Result := s2;
end;

end.
__________________
David Esperalta
www.decsoftutils.com
Reply With Quote
  #3  
Old 29/09/2013
nlsgarcia's Avatar
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Join Date: Feb 2007
Location: Caracas, Venezuela
Posts: 2,206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
aitorqrv

Quote:
Originally Posted by aitorqrv
...me gustaria meter esta función (ReverseString) en Unit2 y poder llamarla...desde Unit1...he intentado...pero no funciona...
Revisa este código:
Código Delphi [-]
unit Unit2;

interface

function ReverseString( s : String ) : String;

implementation

function ReverseString( s : String ) : String;
var
   i  : integer;
   s2 : string;

begin

   s2 := '';

   for i := 1 to Length( s ) do
      s2 := s[ i ] + s2;

   Result := s2;

end;

end.
El código anterior define una función (ReverseString) en Unit2 que es visible externamente a otras unidades (Interface Section).


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;
     Edit1: TEdit;
     procedure Button1Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 
 var
   Form1: TForm1;
 
 implementation
 
 {$R *.dfm}
 
 uses Unit2;
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
    Edit1.Text := ReverseString(Edit1.Text);
 end;
 
 end.
El código anterior utiliza la función ReverseString definida en Unit2.


En el caso particular que planteas en el Msg #1, es mejor utilizar las funciones nativas de Delphi:
Código Delphi [-]
  ...
  uses StrUtils;
  
  procedure TForm1.Button1Click(Sender: TObject);
  begin
     Edit1.Text := ReverseString(Edit1.Text);
  end;
  ...
El código anterior utiliza la función ReverseString de la unidad StrUtils.


Delphi posee un extenso grupo de funciones para el manejo de Strings, revisa esta información:
Quote:
Operaciones con cadenas de texto (I) : http://delphiallimite.blogspot.com/2...e-texto-i.html

Operaciones con cadenas de texto (II) : http://delphiallimite.blogspot.com/2...-texto-ii.html

Operaciones con cadenas de texto (III) : http://delphiallimite.blogspot.com/2...texto-iii.html

Revisa esta información relacionada al uso de unidades en Delphi:
Espero sea útil

Nelson.

Last edited by nlsgarcia : 29/09/2013 at 20:20.
Reply With Quote
  #4  
Old 29/09/2013
aitorqrv aitorqrv is offline
Miembro
 
Join Date: Apr 2007
Posts: 18
Poder: 0
aitorqrv Va por buen camino
Muchas gracias a todos por la respuesta y por toda la la informació adicional he analizado los codigos y me han funcionado a la primera.

Gracias.
Reply With Quote
  #5  
Old 30/09/2013
aitorqrv aitorqrv is offline
Miembro
 
Join Date: Apr 2007
Posts: 18
Poder: 0
aitorqrv Va por buen camino
Hola, otra pregunta relacionada con el mismo tema:

Ahora en unit2 puedo meter funciones que me devuelven parametros, pero en unit2 no me deja hacer cosas como form1.edit1.Text := 'hola';

Al declarar el uses unit2 y las funciones en interface ¿el código fuente no se tendría que comportar como si se trasase de un solo archivo para poder modificar un parametro tanto desde unit1 o unit2?

Muchas gracias.
Reply With Quote
  #6  
Old 30/09/2013
nlsgarcia's Avatar
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Join Date: Feb 2007
Location: Caracas, Venezuela
Posts: 2,206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
aitorqrv,

Quote:
Originally Posted by aitorqrv
...¿El código fuente no se tendría que comportar como si se trasase de un solo archivo para poder modificar un parámetro tanto desde Unit1 o Unit2?...
Revisa este código:
Código Delphi [-]
unit Unit2;

interface

// Cabecera de Funciones y Procedimientos de Unit2 visibles en otras unidades

implementation

uses Unit1; // Referencia a Unit1

// Implementación de Funciones y Procedimientos de Unit2 (Internas y Externas)

end.
El código anterior referencia Unit1 en Unit2.

Te sugiero revisar los links del Msg #3, relacionados al Uso de Unidades en Delphi.

Espero sea útil

Nelson.

Last edited by nlsgarcia : 30/09/2013 at 15:58.
Reply With Quote
  #7  
Old 30/09/2013
aitorqrv aitorqrv is offline
Miembro
 
Join Date: Apr 2007
Posts: 18
Poder: 0
aitorqrv Va por buen camino
Muchas gracias nuevamente, intentare de buscar algo de información en español. Tenia miedo de usar uses unit1 por el tema de la referencia circular (me parece que se llama asi el error que da cuando dos unit se referencian entre si en el uses) y por eso no lo intente con el uses.

Gracias.
Reply With Quote
  #8  
Old 30/09/2013
Pericles's Avatar
Pericles Pericles is offline
Miembro
NULL
 
Join Date: Sep 2013
Location: Buenos Aires, Argentina
Posts: 24
Poder: 0
Pericles Va por buen camino
Efectivamente el error es el siguiente..


[DCC Fatal Error] Unit1.pas(7): F2047 Circular unit reference to 'Unit1'

Se soluciona declarandolas entre si pero en el Uses de Implementation/ Interface

ejemplo:

Código Delphi [-]
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Registry, unit2;


Código Delphi [-]
unit Unit2;
interface

implementation
uses
unit1;

Ssaludos
Nicolas Perichon
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Función javascript que llama a otra función javascript en otra página jandroruiz HTML, Javascript y otros 4 28/02/2013 11:38
Problema con un procedure en otra unidad HombreGordo Varios 1 23/12/2011 19:20
Almacenando datos en una variable de otra unidad R0M3R0 OOP 11 21/08/2008 21:09
Acceder a un DataSet desde otra unidad SMTZ .NET 5 24/12/2005 09:01
ejecutar una funcion d otra Unit negama Varios 2 08/09/2003 19:32


All times are GMT +2. The time now is 05:30.


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