Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Procedimientos y funciones en formularios MDI (https://www.clubdelphi.com/foros/showthread.php?t=41002)

joumont 05-03-2007 19:02:22

Procedimientos y funciones en formularios MDI
 
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

Código Delphi [-]
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:

Código Delphi [-]
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 allí te dan una breve explicación de esa y muchas cosas mas acerca de Delphi.


La franja horaria es GMT +2. Ahora son las 23:10:08.

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