Ir al contenido


Foto

OnClick en tiempo de ejecucion


  • Por favor identifícate para responder
16 respuestas en este tema

#1 onlinepy

onlinepy

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 30 junio 2012 - 05:15

Hola Señores.
        Tengo un drama en cuanto al evento OnClick en tiempo de ejecucion, estoy creando una subrutina que abre una determinada ventana y lo posiciona encima de otra en un determinado lugar y posicion, al realizar esto, automaticamente creo 3 botones es esa ventana pero no logro realizar los metodos onclick en ellas, me podrian dar una mano porfavor

      les envio el codigo para que le echen una ojeada



delphi
  1. var
  2.   cerrar : tbitbtn;
  3.   grafico : tbitmap;
  4.   alto,largo : Integer;
  5. begin
  6.       grafico := tbitmap.Create;
  7.       grafico.LoadFromFile(ExtractFilePath(Application.ExeName)+'Iconos\cerrar.bmp');
  8.       alto := grafico.Height;
  9.       largo := grafico.Width;
  10.       formulario.Top := maestro.Top + 140;
  11.       formulario.Left := maestro.Left+5;
  12.       formulario.Width := maestro.Width;
  13.       formulario.Height := maestro.Height -112;
  14.       // Boton cerrar se crea
  15.       cerrar := tbitbtn.Create(formulario);
  16.       cerrar.Parent := formulario;
  17.       cerrar.Glyph.LoadFromFile(ExtractFilePath(Application.ExeName)+'Iconos\cerrar.bmp');
  18.       cerrar.Height := alto;
  19.       cerrar.Width:= largo;
  20.       cerrar.Top := 0;
  21.       cerrar.Left:= maestro.Width - largo;
  22.       cerrar.OnClick := cerrar_OnClick(formulario);
  23.       cerrar.Show();
  24.  
  25.       formulario.ShowModal;


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 30 junio 2012 - 06:00

Prueba colocandolo de esta forma>



delphi
  1. cerrar.OnClick := @cerrar_OnClick(formulario);



Aunque creo que no se puede colocar parametros en tiempo de ejecución, pos tampoco lo he confirmado. Por otro lado, ¿qué es formulario?, ¿es un formulario ya creado?, ¿O es el nombre del parámetro?.

Saludos.
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 30 junio 2012 - 06:25

A menos que en Lazarus se haga diferente que en Delphi, la forma de asignar en tiempo de ejecución un evento se hace así:



delphi
  1. Obj.OnEvento := MetodoParaElEvento;



Sin parámetros.

Otro, tema: ¡Bienvenid@ a DelphiAccess!
Yo edité tu mensaje para darle formato al código. Te aconsejo que te familiarices con las etiquetas de formato disponibles para cuando debas exponer código. Como eres nuev@ te invito a leer las normas, y unas sugerencias a considerar al momento de postear.

Saludos,
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 30 junio 2012 - 06:50

Bienvenido, onlinepy

Como apuntan enecumene y Delphius la asignación, partiendo de una procedimiento como este:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject); 



debe ser así:


delphi
  1. Button1.OnClick := @Button1Click;




Saludos.
  • 0

#5 onlinepy

onlinepy

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 30 junio 2012 - 07:27

Muchas gracias por la bienvenida!!
            Bueno les comento que es mi primera aplicacion en lazarus, pero ya que comienzo en esto quiero comenzar de lleno, lo siguiente, para la pregunta de enecumene, formulario es un Tform y maestro es otro Tform, lo que realiza es que cuando llamas a esta rutina te abre el formulario dentro (simula al menos) dentro de maestro, lo que no quiero hacer es copiar los botones de cerrar, maximizar y minimizar en cada formulario que vaya creando, dentro de maestro, por eso los creo cada vez que le voy a hacer un form.showmodal, lo que no puedo hacer es crearle eventos a esos botones que se crean por cada formulario, o sea lo que quiero es ahorrarme el copiar y pegar en cada formulario esos botones y sus respectivos codigos puesto que en cada formulario deben de hacer lo mismo.

            cerrar: debe cerrar el formulario actual donde esta.
            maximizar: debe maximizar el formulario donde esta.
            minimizar: debe minimizar el formulario donde esta.

            Muchas gracias por contestar tan rapido.

            PD: esto lo estoy haciendo en un funciones.pas

  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 01 julio 2012 - 01:15

Creo que te hemos dado la información para resolver tu problema.


Saludos.
  • 0

#7 onlinepy

onlinepy

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 01 julio 2012 - 01:39

No le encuentro aun la solución puesto que todos hablan del formulario en cuestión, pero yo lo estoy realizando en una unidad fuera del formulario en el cual creo el botón, creo que no se puede colocar procedure TForm1.Button1Click(Sender: TObject); en un formulario .pas que no sea el Tform1, porque así tendría que de nuevo asignar los eventos en todos los formularios que vaya creando, lo que quiero es que sea genérico los eventos de esos botones.

Muchas Gracias
  • 0

#8 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 01 julio 2012 - 02:35

Quizas debas escrobir en Maestro el evento Button1Click y pasar su puntero a los botones al crearlos.

Me pregunto si no te seráas fácil crear un formulario auxiliar modal con esos borones para ser llamado por todos tus otros formularios.

No se si entiendo bien lo que tratas de hacer. ¿En una app MIDI?

Saludos.
  • 0

#9 onlinepy

onlinepy

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 01 julio 2012 - 09:28

perfecto, pero como creo un maestro para el evento onclick, me podrías explicar por favor, estuve también buscando por todo lo que sea google, encontré algo con respecto a este caso y hablan mucho de algo llamando TNotifyEvent, pero nadie dice como se usa, y al final siempre terminan con un TForm1.MiBotonClick, sera que no es posible realizar esto?

Gracias!
  • 0

#10 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 01 julio 2012 - 09:37

Utiliza Screen para realizar las operaciones a la pantalla activa:



delphi
  1. Screen.close;
  2. Screen.hide;
  3. screen.show;
  4. //etc...



Digo, no sé si en Lazarus lo tenga, no lo he comprobado.

Saludos.
  • 0

#11 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 02 julio 2012 - 02:37

Buenas

No conozco Lazarus, pero si permite herencia visual...... Por qué no creas un formulario con esos botones y haces que los nuevos formularios hereden de él? Así ya tienes los botones con su OnClick implementado (o eso o no he entendido lo que quieres hacer jejejeje)

Nos leemos

  • 0

#12 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 02 julio 2012 - 05:39

Buenas

No conozco Lazarus, pero si permite herencia visual...... Por qué no creas un formulario con esos botones y haces que los nuevos formularios hereden de él? Así ya tienes los botones con su OnClick implementado (o eso o no he entendido lo que quieres hacer jejejeje)

Nos leemos


Así hago yo estas cosas, es sencillo, limpio y minimalista en código y problemas.
  • 0

#13 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 02 julio 2012 - 08:45

Evidentemente la forma mas cómoda es diseñar un formulario para eso pero si lo quieres hacer manual te paso un ejemplo con su mismo código, a ver si te orienta.


Saludos.
  • 0

#14 onlinepy

onlinepy

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 02 julio 2012 - 12:58

(b) escafandra!!! Sos un grande.... Espectacular tu respuesta y con tu código ni que decir muchísimas gracias!!!

Saludos!!!

PD: enserio gracias estaba volviéndome loco ese tema.
      si no es tanta molestia quisiera saber si es posible al presionar el botón que cierre la ventana donde esta el botón en vez del showmessage le di close; y me cierra todo el programa :p
  • 0

#15 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 02 julio 2012 - 02:36

...si no es tanta molestia quisiera saber si es posible al presionar el botón que cierre la ventana donde esta el botón en vez del showmessage le di close; y me cierra todo el programa :p


Este planteamiento puede simplificarte algo el asunto:


delphi
  1. cerrar := tbitbtn.Create(formulario);
  2. cerrar.ModalResult:= mrCancel;     



La propiedad ModalResult sirve para conocer el estado al salir de un formulario modal.
mrCancel significa que el usuario Cancela. pero tienes mas opciones:


delphi
  1. mrNone      0              None. Used as a default value before the user exits.
  2. mrOk        idOK            The user exited with OK button.
  3. mrCancel    idCancel        The user exited with the CANCEL button.
  4. mrAbort    idAbort        The user exited with the ABORT button.
  5. mrRetry    idRetry        The user exited with the RETRY button.
  6. mrIgnore    idIgnore        The user exited with the IGNORE button.
  7. mrYes      idYes          The user exited with the YES button.
  8. mrNo        idNo            The user exited with the NO button.
  9. mrAll      mrNo + 1        The user exited with the ALL button.
  10. mrNoToAll  mrAll + 1      The user exited with the NO TO ALL button.
  11. mrYesToAll  mrNoToAll + 1  The user exited with the YES TO ALL button.


Si no necesitas que tus botones realicen acciones especiales al presionarse, puedes prescindir de programar el evento y simplemente asignar el ModalResult apropiado.

La función ShowModal devuelve el ModalResult, y con esto tu realizas las acciones pertinentes.

El procedimeinto botones puedes convertirlo en una función que devuelva un TModalResult para que el formulario desde donde se llame esté informado.

Insisto en que todo esto es mucho mas práctico diseñando un formulario y mostrándolo de forma modal. Mi ejemplo puede tener un interés mas teórico que otra cosa.

Saludos.
  • 0

#16 onlinepy

onlinepy

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 02 julio 2012 - 05:37

Escafandra: Sos un genio man!, he aprendido mucho de ti! he visto por otros lugares googleando, que se puede meter una ventana en un TPanel, así evito unas cuantas lineas de programa, pero lo que no consigo es hacer que se mueva esa ventana dentro del panel, es mas o menos lo que quiero hacer :p

De antemano muchas gracias a todos!!!

Voy aprendiendo lazarus gracias a Uds.
  • 0

#17 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 03 julio 2012 - 12:06

Por el desarrollo del tema pienso que está resuelto.

Creo que el tema del Panel lo deberías llevar a otro hilo.


Saludos.
  • 0




IP.Board spam blocked by CleanTalk.