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 13-02-2014
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question Pasar TMemoryStream en una Property

Buenas, estoy intentando pasar datos entre formularios a través de una property, puntualmente tengo que pasar un flujo (Stream) entre ellos. La cuestión es que no doy en la tecla.

El formulario receptor
Código Delphi [-]
  TfrmDatosImprentaDigital = class(TForm)
  private  
    FpDatos_editar: TMemoryStream;
    procedure SetpDatos_editar(const Value: TMemoryStream);
    procedure SetpTitulo_edicion(const Value: string);
  public
    property pDatos_editar:TMemoryStream read FpDatos_editar write SetpDatos_editar;
    property pTitulo_edicion:string read FpTitulo_edicion write SetpTitulo_edicion;
  end;

.......

procedure TfrmDatosImprentaDigital.SetpDatos_editar(const Value: TMemoryStream);
begin
  FpDatos_editar := Value;
//Este es un RichEdit donde quiero ver los datos que llegan.
  editor.Lines.LoadFromStream(FpDatos_editar);
end;

procedure TfrmDatosImprentaDigital.btnConfirmarTextoEditadoClick(
  Sender: TObject);
var
  stream:TMemoryStream;
begin
//Aquí recuperamos el texto desde el RichEdit y lo ponemos en la property para devolverlo a quien llamó
  try
    stream:=TMemoryStream.Create;
    editor.Lines.SaveToStream(stream);
    FpDatos_editar.LoadFromStream(stream);
  finally
    stream.Free;
    ModalResult:=mrOk;
  end;
end;

En el formulario llamador
Código Delphi [-]
procedure TEditorDatos.llamar(texto_enriquecido:TRichEdit);
var
  imprenta:TfrmDatosImprentaDigital;
begin
  imprenta:=TfrmDatosImprentaDigital.Create(nil);
  with imprenta do
  begin
    self.setTexto_enriquecido(texto_enriquecido);
    //pDatos_editar.LoadFromStream(getTexto_enriquecido); //Con esto, en el destino me muestra vacío
    pDatos_editar:=Self.getTexto_enriquecido;
    if mrOk = ShowModal then
    begin
    //Recupero el texto enriquecido desde la ventana de imprenta.
      self.setTexto_enriquecido(pDatos_editar);
    //No me devuelve nada, al parecer, el Rich se muestra vacío.
      rchGobernador.Lines.LoadFromStream(self.getTexto_enriquecido);
    end;
    imprenta.Free;
  end;
end;

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 13-02-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
santiago14,

Cita:
Empezado por santiago14
...estoy intentando pasar datos entre formularios...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    RichEdit1: TRichEdit;
    MainMenu1: TMainMenu;
    Form21: TMenuItem;
    Exit1: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Form21Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  FileComponent = 'FileComponent.cmp';

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
   i : Integer;
begin

   if FileExists(FileComponent) then
      DeleteFile(FileComponent);

   for i := 1 to 10 do
      RichEdit1.Lines.Add('Texto de Prueba-' + IntToStr(i));
end;

procedure TForm1.Form21Click(Sender: TObject);
begin
   Form2.Show;
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
   Application.Terminate;
end;

procedure SaveComponent(Component : TComponent; FileName: TFileName);
begin
   if not Assigned(Component) then
      raise Exception.Create('El Objeto No Existe');
   with TFileStream.Create(FileName, fmCreate) do
   try
      WriteComponent(Component);
   finally
      Free
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   SaveComponent(RichEdit1,FileComponent);
end;

end.
El código anterior salva la información del Componente RichEdit1 de Form1 en el archivo FileComponent.cmp

Revisa este código:
Código Delphi [-]
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button2: TButton;
    RichEdit1: TRichEdit;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  FileComponent = 'FileComponent.cmp';

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure LoadComponent(Component : TComponent; FileName: TFileName);
begin
  if not Assigned(Component) then
     raise Exception.Create('El Objeto No Existe');
  if not FileExists(FileName) then
     raise Exception.Create('Archivo de Componente No Existe');
  with TFileStream.Create(FileName, fmOpenRead) do
  try
     ReadComponent(Component);
  finally
     Free
  end;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
   LoadComponent(RichEdit1,FileComponent);
end;

end.
El código anterior recupera y muestra la información salvada anteriormente en el Componente RichEdit1 de Form2.

Espero sea útil

Nelson.
Responder Con Cita
  #3  
Antiguo 14-02-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 santiago14.

Tal vez te sea útil crear una clase en otra unidad que incluyéndola, te permita transferir el TMemoryStream a cualquier form:
Código Delphi [-]
unit Transf_Stream;

interface

uses SysUtils,Classes;

type
  TTransferStream = class(TObject)
  private
    FStream: TMemoryStream;
    function GetStream: TMemoryStream;
    procedure SetStream(const Value: TMemoryStream);
  public
    constructor Create; reintroduce; overload;
    property DataStream: TMemoryStream read GetStream write SetStream;
    destructor Destroy; override;
  end;

var
  TrStream: TTransferStream;

implementation

constructor TTransferStream.Create;
begin
  inherited;
  FStream:= TMemoryStream.Create;
end;

function TTransferStream.GetStream: TMemoryStream;
begin
  FStream.Position:= 0;
  Result := FStream;
end;

procedure TTransferStream.SetStream(const Value: TMemoryStream);
begin
  Value.Position:= 0;
  FStream.LoadFromStream(Value);
end;

destructor TTransferStream.Destroy;
begin
  if Assigned(FStream) then 
    FStream.Free;
  inherited Destroy;
end;
end.

Un ejemplo de uso, formulario emisor:
Código Delphi [-]
...
implementation

uses Unit2 {Receptor}, Transf_Stream;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
  TransferStream := TTransferStream.Create;
  try
    RichEdit1.Lines.SaveToStream(TransferStream.DataStream);
    if not Assigned(Form2) then
      Form2:= TForm2.Create(Self);
    Form2.Show  // (o ShowModal)
  finally
    TransferStream.Free
  end;
end;

...

En los formularios receptores podrías hacer:
Código Delphi [-]
...
implementation

uses Transf_Stream;

procedure TForm2.FormCreate(Sender: TObject);
begin
  if Assigned(TransferStream) then
    RichEdit1.Lines.LoadFromStream(TransferStream.DataStream);
end;
...

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
String To TMemoryStream Gimli OOP 8 03-03-2010 11:23:50
Pasar TMemorystream a string modulay OOP 4 29-09-2007 22:23:48
Ejecutar desde TMemoryStream Delar Varios 1 24-08-2007 04:05:41
Tmemorystream y sockets LILYBEL Varios 3 01-07-2004 15:43:52
Problema con TMemoryStream Baixa Varios 6 20-01-2004 19:36:08


La franja horaria es GMT +2. Ahora son las 18:50:27.


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