PDA

Ver la Versión Completa : Procedimientos y funciones en formularios MDI


joumont
05-03-2007, 19:02:22
Estoy realizando una aplicación MDI y he localizado el siguiente problema. Cuando intento realizar una accion a un objeto del formulario, por ejemplo:
EditText:='Hola';
si lo realizo en el evento "on show", funciona de manera correcta, pero si en vez de hacerlo "directamente" en el evento, intento derivarlo a un procedimiento, ejemplo:

procedure di_hola;
begin
Form1.Edit1.Text:='hola';
end;

procedure TForm1.FormShow(Sender: TObject);
begin
inherited;
di_hola;
end;

Me da un error.

Necesito ayuda, ya que me encuentro atascado y no encuentro la solucion

Gracias

JF Sebastian
05-03-2007, 19:07:14
Tal y como lo tienes no te puede funcionar porque el di_hola no esta dentro del Form1

joumont
05-03-2007, 19:14:44
¿Como lo incluyo dentro del Form1

Albano
05-03-2007, 19:17:52
Donde tienes declarado el procedimiento di_hola?

joumont
05-03-2007, 19:19:18
Esta puesto en el formulario Form1, pero no lo tengo declarado en ningun sitio. Tengo que ponerlo en la parte private, en public, :confused:

Albano
05-03-2007, 19:23:25
unit Unit2;

interface

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

type
TForm2 = class(TForm)
Edit1: TEdit;
procedure FormShow(Sender: TObject);
procedure di_hola;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.di_hola;
begin
edit1.Text := 'hola';
end;

procedure TForm2.FormShow(Sender: TObject);
begin
di_hola;
end;

end.
De esta manera funciona... Mira donde esta declarado el procedimiento.

joumont
05-03-2007, 19:33:42
lo he probado y me da un error de acceso a memoria en direccion xxxxxx

¿Que mas estoy haciendo mal?

Ya he comentado que es una aplicacion MDI

Los porcedimiento aparecen de la siguiente manera

procedure TForm1.FormShow(Sender: TObject);
begin
inherited;

Tiene la palabra inherited algo que ver con todo esto?

:confused:

jhonny
05-03-2007, 20:23:50
El hecho de que la aplicación sea MDI no influye para nada en este caso.

Tal y cual como te lo explico Albano funciona pero debes hacer un cambio para adaptarlo a tu aplicación me explico:

Donde diga Form2 (Y siguiendo con el ejemplo que mostraste) debes colocar Form1, de manera pues que todo quedaria asi:


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormShow(Sender: TObject);
procedure di_hola;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.di_hola;
begin
edit1.Text := 'hola';
end;

procedure TForm1.FormShow(Sender: TObject);
begin
di_hola;
end;

end.


Si no fue eso pues podriamos revisar luego lo del inherited;

joumont
05-03-2007, 21:09:19
Muchas gracias, ya me funciona, de todas formas y puestos a aprender, me podriais explicar el tema del inherit

Gracias de nuevo

:D

jhonny
05-03-2007, 21:21:34
Te recomendaría leer "La cara oculta de delphi4" que esta gratis en la pagina www.marteens.com (http://www.marteens.com) allí te dan una breve explicación de esa y muchas cosas mas acerca de Delphi.