Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 25-10-2018
TavoBran TavoBran is offline
Miembro
NULL
 
Registrado: oct 2018
Posts: 13
Poder: 0
TavoBran Va por buen camino
Cita:
Empezado por juniorSoft Ver Mensaje
Disculpas porque el código lo hice directamente en el editor del foro por no tener delphi instalado en la pc que estoy utilizando.
Tranquilo por eso no hay problema
Responder Con Cita
  #22  
Antiguo 25-10-2018
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Cuando tienes la declaración de un procedimiento o función en una clase a esto es que se le conoce como método

Dentro de la clase solo tienes las cabeceras de los procedimientos o las funciones(métodos) que utilices, a estas cabeceras se le llaman Prototipos e indican que luego se van a implementar, la definición es como dice Roman

solo tienes que hacer lo siguiente

En la clase del formulario

Código:
TfrmEjecucion = class(TForm)
        ..........
     ..........
   private    
      procedure CrearEdits(Edits:TMatriz; MaxX, MaxY:integer);
      procedure LlenarEdits(Edits:TMatriz; MaxX, MaxY:integer);

   public
      .......
      ......
end;
Colocas el cursor encima de los métodos y le das a las teclas Ctrl + Shift + C para que cree el esqueleto de los métodos en la sección de implementation el entorno te crear algo como sigue:

Código:
procedure TfrmEjecucion.llenarEdits(var Edits: TArrEdits; MaxX, MaxY:integer);
begin

end;

procedure TfrmEjecucion.CrearEdits(var Edits: TArrEdits; MaxX, MaxY:integer);
begin

end;

end.
ahora solo tienes que copiar el código que esta en los procedimientos sueltos en sus correspondientes métodos.
Responder Con Cita
  #23  
Antiguo 25-10-2018
TavoBran TavoBran is offline
Miembro
NULL
 
Registrado: oct 2018
Posts: 13
Poder: 0
TavoBran Va por buen camino
Cita:
Empezado por juniorSoft Ver Mensaje
Cuando tienes la declaración de un procedimiento o función en una clase a esto es que se le conoce como método

Dentro de la clase solo tienes las cabeceras de los procedimientos o las funciones(métodos) que utilices, a estas cabeceras se le llaman Prototipos e indican que luego se van a implementar, la definición es como dice Roman

solo tienes que hacer lo siguiente

En la clase del formulario

Código:
TfrmEjecucion = class(TForm)
        ..........
     ..........
   private    
      procedure CrearEdits(Edits:TMatriz; MaxX, MaxY:integer);
      procedure LlenarEdits(Edits:TMatriz; MaxX, MaxY:integer);

   public
      .......
      ......
end;
Colocas el cursor encima de los métodos y le das a las teclas Ctrl + Shift + C para que cree el esqueleto de los métodos en la sección de implementation el entorno te crear algo como sigue:

Código:
procedure TfrmEjecucion.llenarEdits(var Edits: TArrEdits; MaxX, MaxY:integer);
begin

end;

procedure TfrmEjecucion.CrearEdits(var Edits: TArrEdits; MaxX, MaxY:integer);
begin

end;

end.
ahora solo tienes que copiar el código que esta en los procedimientos sueltos en sus correspondientes métodos.

Listo ya hice todo lo sugerido ya no me sale ese error pero ahora hay otro.
lo que pasa es que me sale error cuando llamo a los dos procedimientos el de LlenarEdits y CrearEdits

Código Delphi [-]

  CrearEdits(Matriz);  //[dcc32 Error] Ejecucion.pas(63): E2035 Not enough actual parameters
  llenarEdits(Matriz);  //[dcc32 Error] Ejecucion.pas(64): E2035 Not enough actual parameters

y mi codigo va asi:

Código Delphi [-]

unit Ejecucion;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Menus;

type
  TMatriz = array of array of TEdit;
  TfrmEjecucion = class(TForm)
    Button1: TButton;
    Edt: TEdit;
    Panel1: TPanel;
    Panel2: TPanel;
    Button2: TButton;
    Button3: TButton;
    MainMenu1: TMainMenu;
    Volver1: TMenuItem;
    Button4: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    procedure CrearEdits(Edits:TMatriz; MX, MY:integer);
    procedure LlenarEdits(Edits:TMatriz; MX, MY:integer);
  public
    { Public declarations }
  end;

var
  frmEjecucion: TfrmEjecucion;

implementation

{$R *.dfm}

procedure TfrmEjecucion.Button1Click(Sender: TObject);
var
  Matriz:TMatriz;
  MX, MY:integer;
begin
  if Trim(Edt.Text) = '' then
  begin
    ShowMessage('Debe escribir un número');
    Exit;
  end;
  //Grivera Desicion para que no sea tan grande la matriz
  if StrToInt(Edt.Text) >= 11 then
  begin
    ShowMessage('El valor tiene que ser igual o menor a 10');
    Edt.Clear;
  end
  else
  begin
    //Grivera Establece el valor de la matriz y de los TEdit
    MY := StrToInt(Edt.Text);
    MX := StrToInt(Edt.Text);
    SetLength(Matriz, MX, MY);
    Button1.Visible := False;
    Edt.Visible := False;
  end;
  CrearEdits(Matriz);
  llenarEdits(Matriz);
end;

procedure TfrmEjecucion.CrearEdits(Edits: TMatriz; MX, MY: integer);
var
   i,j : integer;
begin
  for i:=0 to MX-1 do
  begin
    for J:=0 to MY-1 do
    begin
      Edits[i,i] := TEdit.Create(Self);
      Edits[i,i].Text := '';
      Edits[i,i].Top := 21 * (i + 1);
      Edits[i,i].Left := 21 * (j + 1);
      Edits[i,i].Width := 20;
      Edits[i,i].Height := 20;
      Edits[i,i].AutoSize := False;
      Edits[i,i].Enabled := False;
      Edits[i,j].Parent := Panel1;
      Button3.Visible := True;
    end;
  end;
end;

procedure TfrmEjecucion.LlenarEdits(Edits: TMatriz; MX, MY: integer);
var
  i,j:integer;
begin
  for i := 0 to MX-1 do
  begin;
    for j := 0 to MY-1 do
    begin
      Edits[i,j].Text:=IntToStr(Random(100));
    end;
  end;
end;

end.

muchas gracias.
Responder Con Cita
  #24  
Antiguo 25-10-2018
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Cita:
lo que pasa es que me sale error cuando llamo a los dos procedimientos el de LlenarEdits y CrearEdits
El error esta sucediendo porque se esta llamando a los métodos con un solo parámetro. Dicho de otra forma tienes declarado los métodos con tres parámetros formales y los estas invocando con un solo parámetro real. Lo que sucede es que con esos parámetros MaxX y MaxY se le busca mas independencia a los métodos, sino debes utilizar los valores que introducen los usuarios de forma directa.

Por otro lado los métodos están definidos en la sección privada de la clase por lo que solo se pueden invocar desde la clase del formulario en la que están definidos. Si requieres invocar esos métodos desde otro formulario o unidad diferente debes colocarlos en la sección publica de la clase.
Responder Con Cita
  #25  
Antiguo 25-10-2018
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Con esta corrección al invocar los métodos debería funcionar

Código:
CrearEdits(Matriz, MX, MY);
LlenarEdits(Matriz, MX, MY);
Responder Con Cita
  #26  
Antiguo 25-10-2018
TavoBran TavoBran is offline
Miembro
NULL
 
Registrado: oct 2018
Posts: 13
Poder: 0
TavoBran Va por buen camino
Cita:
Empezado por juniorSoft Ver Mensaje
Con esta corrección al invocar los métodos debería funcionar
juniorSoft si tienes razon ya con estos dos parametros ya no me genera el error eres un genio.

otra cosa es que al momento de ejecutar el programa me funciona bien pero al momento de darle en el boton para que me genere los Edit no me genera nada que podria ser.

codigo completo:

Código Delphi [-]
unit Ejecucion;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Menus;

type
  TMatriz = array of array of TEdit;
  TfrmEjecucion = class(TForm)
    Button1: TButton;
    Edt: TEdit;
    Panel1: TPanel;
    Panel2: TPanel;
    Button2: TButton;
    Button3: TButton;
    MainMenu1: TMainMenu;
    Volver1: TMenuItem;
    Button4: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    procedure CrearEdits(Edits:TMatriz; Mx, My:integer);
    procedure LlenarEdits(Edits:TMatriz; Mx, My:integer);
  var
    Matriz : TMatriz;
    Mx,My : Integer;
  end;

var
  frmEjecucion: TfrmEjecucion;


implementation

{$R *.dfm}

procedure TfrmEjecucion.Button1Click(Sender: TObject);
begin
  if Trim(Edt.Text) = '' then
  begin
    ShowMessage('Debe escribir un número');
    Exit;
  end;
  //Grivera Desicion para que no sea tan grande la matriz
  if StrToInt(Edt.Text) >= 11 then
  begin
    ShowMessage('El valor tiene que ser igual o menor a 10');
    Edt.Clear;
  end
  else
  begin
    //Grivera Establece el valor de la matriz
    Mx := StrToInt(Edt.Text);
    My := StrToInt(Edt.Text);    
    SetLength(Matriz, Mx, My);
    
    Button1.Visible := False;
    Edt.Visible := False;
    CrearEdits(Matriz,Mx,My);
    llenarEdits(Matriz,Mx,My);
  end;
end;

procedure TfrmEjecucion.CrearEdits(Edits: TMatriz; Mx, My: integer);
var
   i,j : integer;
begin
  for i := 0 to Mx-1 do
  begin
    for j := 0 to My-1 do
    begin
      Edits[i,i] := TEdit.Create(Self);
      Edits[i,i].Text := '';
      Edits[i,i].Top := 21 * (i + 1);
      Edits[i,i].Left := 21 * (j + 1);
      Edits[i,i].Width := 20;
      Edits[i,i].Height := 20;
      Edits[i,i].AutoSize := False;
      Edits[i,i].Enabled := False;
      Edits[i,j].Parent := Panel1;
      Button3.Visible := True;
    end;
  end;
end;

procedure TfrmEjecucion.LlenarEdits(Edits: TMatriz; Mx, My: integer);
var
  i,j:integer;
begin
  for i := 0 to Mx-1 do
  begin;
    for j := 0 to My-1 do
    begin
      Edits[i,j].Text:=IntToStr(Random(100));
    end;
  end;
end;

le he modificado y ya me genera un edit pero me sale el siguiente error:

Access Violation at address 005D006D in module 'PruebasDelphi.exe'. Read of address 00000000.

Última edición por TavoBran fecha: 25-10-2018 a las 23:09:39.
Responder Con Cita
  #27  
Antiguo 25-10-2018
TavoBran TavoBran is offline
Miembro
NULL
 
Registrado: oct 2018
Posts: 13
Poder: 0
TavoBran Va por buen camino
juniorSoft amigo usted es todo un crack me ayudo muchisimo el dia de hoy espero que estos conocimientos que tiene le ayuden mucho y gracias hoy aprendi mucho ha el error al anterior mensaje era que estabarepitiendo la i despues de crear los edits:

Código Delphi [-]
Edits[i,i] := TEdit.Create(Self);
      Edits[i,i].Text := '';
      Edits[i,i].Top := 21 * (i + 1);
      Edits[i,i].Left := 21 * (j + 1);
      Edits[i,i].Width := 20;
      Edits[i,i].Height := 20;
      Edits[i,i].AutoSize := False;
      Edits[i,i].Enabled := False;
      Edits[i,j].Parent := Panel1;

en estos campos jaja fue muy chistoso ese error pero gracias por todo dejo la solucion.

Código Delphi [-]
unit Ejecucion;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Menus;

type
  TMatriz = array of array of TEdit;
  TfrmEjecucion = class(TForm)
    Button1: TButton;
    Edt: TEdit;
    Panel1: TPanel;
    Panel2: TPanel;
    Button2: TButton;
    Button3: TButton;
    MainMenu1: TMainMenu;
    Volver1: TMenuItem;
    Button4: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    procedure CrearEdits(Edits:TMatriz; Mx, My:integer);
    procedure LlenarEdits(Edits:TMatriz; Mx, My:integer);
  end;

var
  frmEjecucion: TfrmEjecucion;


implementation

{$R *.dfm}

procedure TfrmEjecucion.Button1Click(Sender: TObject);
var
  Matriz : TMatriz;
  Mx,My : Integer;
begin
  if Trim(Edt.Text) = '' then
  begin
    ShowMessage('Debe escribir un número');
    Exit;
  end;
  //Grivera Desicion para que no sea tan grande la matriz
  if StrToInt(Edt.Text) >= 11 then
  begin
    ShowMessage('El valor tiene que ser igual o menor a 10');
    Edt.Clear;
  end
  else
  begin
    //Grivera Establece el valor de la matriz
    Mx := StrToInt(Edt.Text);
    My := StrToInt(Edt.Text);
    SetLength(Matriz, Mx, My);
    Button1.Visible := False;
    Edt.Visible := False;

    CrearEdits(Matriz,Mx,My);
    llenarEdits(Matriz,Mx,My);
  end;
end;

procedure TfrmEjecucion.CrearEdits(Edits: TMatriz; Mx, My: integer);
var
   i,j : integer;
begin
  for i := 0 to Mx-1 do
  begin
    for j := 0 to My-1 do
    begin
      Edits[i,j] := TEdit.Create(Self);
      Edits[i,j].Text := '';
      Edits[i,j].Top := 21 * (i + 1);
      Edits[i,j].Left := 21 * (j + 1);
      Edits[i,j].Width := 20;
      Edits[i,j].Height := 20;
      Edits[i,j].AutoSize := False;
      Edits[i,j].Enabled := False;
      Edits[i,j].Parent := Panel1;
      Button3.Visible := True;
    end;
  end;
end;

procedure TfrmEjecucion.LlenarEdits(Edits: TMatriz; Mx, My: integer);
var
  i,j:integer;
begin
  for i := 0 to Mx-1 do
  begin;
    for j := 0 to My-1 do
    begin
      Edits[i,j].Text:=IntToStr(Random(100));
    end;
  end;
end;

end.
Responder Con Cita
  #28  
Antiguo 26-10-2018
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 19
juniorSoft Va por buen camino
Cita:
juniorSoft amigo usted es todo un crack....
No digas eso, aquí todos los días aprendemos algo nuevo cada día, en mi caso estoy muy lejos de ese titulo.

Saludos,
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Asignar un evento a un componente creado en tiempo de ejecucion FGarcia OOP 7 13-09-2014 00:27:35
Evento en BitBtn creado en tiempo de ejecución newtron OOP 2 10-05-2012 17:54:14
eventos de PageControl creado en tiempo de ejecucion kaozz OOP 5 17-07-2007 16:02:10
Mostrar un texto creado en tiempo de ejecución FunBit Varios 1 10-10-2005 14:23:39
saber el nombre de un control creado en tiempo de ejecucion xxxlincexxx Varios 10 11-08-2003 00:45:54


La franja horaria es GMT +2. Ahora son las 21:29:34.


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