Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda con procedimiento en programa de dibujo (https://www.clubdelphi.com/foros/showthread.php?t=58279)

Panteon 15-07-2008 06:43:40

Ayuda con procedimiento en programa de dibujo
 
Procedure TForm1.Cuadrado (Const X,Y :integer);
Begin
With
Image1.Canvas Do Begin
Pen.Mode := pmNotXor;
MoveTo (Origen.X,Origen.Y);
Rectangle (Origen.X,Origen.Y,Punto.X,Punto.Y);
MoveTo (Origen.X,Origen.Y);
Rectangle (Origen.X,Origen.Y,X,Y);
end; //Final del With Image1.Canvas
end;

En el form, no se como acceder a este tipo de procedimiento. No
Sale en ningun lado de los eventos del Form.

Ayuda?

Neftali [Germán.Estévez] 15-07-2008 09:03:53

Esto no es un evento. Es un procedimiento que supongo que alguien ha programado en un form para "pintar" un recuadro en el canvas de un TImage.

En la parte privada del form defínelo:

Código Delphi [-]
  Procedure Cuadrado (Const X,Y :integer);

Y en la implementación tendrás este código.

Desde algun sitio lo llamarás.

:confused::confused::confused:

Panteon 15-07-2008 16:33:55

Ah ya entendi! Muchas gracias!

:D

Panteon 15-07-2008 16:52:46

Otra cosa, Cuando hago un main menu, por defecto sale este procedimiento

procedure MainMenu1Change(Sender: TObject; Source: TMenuItem;
Rebuild: Boolean);

Supongo que sera para hacer que se refresque el menu (que dejen de salir como activadas las cosas del menu, ya que si se lo saco siempre salen con una flecha, aunque no las estes usando).

Sin embargo me tira un error,

[Error] Unit1.pas(52): Unsatisfied forward or external declaration: 'TForm1.MainMenu1Change'

Como lo hago?

Neftali [Germán.Estévez] 16-07-2008 10:22:15

Borra las referencias a ese procedimiento y vuelve a crearlo.
Te generará la cabecera en la parte superior de la Unit ("INTERFACE") y la implementación vacía en la parte de "IMPLEMENTATION".

Lo que te está diciendo ahora es que una de las dos (la IMPLEMENTATION) no la encuentra.

Panteon 16-07-2008 17:26:50

Pero como vuelvo a crearlo?

Lo escribo nomas?

Delphius 16-07-2008 22:00:17

Hola Panteon,
¿Eres nuevo en Delphi?

Lo mejor que puedes hacer para ir entendiendo el tema de la estructura de una unit es leer la cara oculta, disponible en el FTP del club.

En forma simple una unit se compone de 5 secciones, 3 de ellas son necesarias, las otras 2 opcionales.

La primera sección es la cabecera y contiene el nombre de la unit. Por ejemplo:

Código Delphi [-]
Unit UPrincipal;

Seguidamente le sigue en orden, la seccion interface. En ella se pone todo lo que será de acceso público a las demás unidades que hagan uso de ella.
Pero he aqui que no va nada de código, por tanto esta sección es a nivel declarativa.

Dentro de esta sección pueden figurar en orden:
uses
constantes
tipos
variables

Un ejemplo es este:

Código Delphi [-]
interface

uses
  Unit1, Unit2; // Esta unit hace uso de las unit 1 y 2.

const
  UNA_CONSTANTE = 3254;

type
  TArray = array[1..UNA_CONSTANTE] of string;

var
  MiArray: TArray;

En el caso de unit para los formularios te encuentras con algo como esto:

Código Delphi [-]
interface

uses
  Windows, .... etc ...;

type
  TForm1 = class(TForm);
  ...
  end;

var
  Form1: TForm1;

luego sigue la sección implementation. Y es aquí donde se encuentra el código. Por tanto todos los métodos, funciones y/o procedimientos que declares en interface deben tener su correspondiente código en implementation. Todo lo que de declare en Implementation es privado: no se da a concer al exterior (a otras unit).
De igual manera, en implementation también podemos tener:
uses
constantes
tipos
variables

La diferencia será que no será vistos desde afuera.

Cuando tu creas un método o evento (por ejemplo la pulsación de un botón) en la sección interface encontrarás algo como esto:
Código Delphi [-]
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Si te fijas, no hay código alguno. Sólo aparece la declaración del evento.

Y en la sección implementation figura algo como esto:
Código Delphi [-]
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

Es aquí donde se colocará el código.

El problema tuyo está en que tienes en la sección implementation el "cuerpo" pero en interface no figura la declaración.

Como dice Neftali eso se soluciona borrando toda refencia al evento en cuestión y volviendo a pulsar en el evento OnClic de botón.

Espero que se entienda.

Saludos,

Neftali [Germán.Estévez] 17-07-2008 09:40:40

Cita:

Empezado por Panteon (Mensaje 300589)
procedure MainMenu1Change(Sender: TObject; Source: TMenuItem;
Rebuild: Boolean);

Cita:

Empezado por Panteon (Mensaje 300832)
Pero como vuelvo a crearlo?

Puedes escribirlo, o que te lo haga Delphi.
Parece que es el procedimiento Change de un MainMenu.
Ves al MainMenu que tienes en tu form. Lo seleccionas, accedes al inspector de objetos, vas a la pestaña de Eventos, buscas el evento OnChange y pulsa DOBLE CLICK. Eso te creará en el código el evento y su cabecera.


La franja horaria es GMT +2. Ahora son las 13:08:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi