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.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.