* * *

Author Topic: Referenciar componente de un Form Activo  (Read 247 times)

daragor

  • New member
  • *
  • Posts: 11
    • Blog Webscom
Referenciar componente de un Form Activo
« on: September 04, 2017, 04:23:33 pm »
Hola compañeros, recurro a uds. ya que estoy trabado con una necedidad reciente, quiero hacer una funcion publica ubicada en el formulario principal, que... una vez ejecutada desde el formulario activo, tome el nombre del mismo y ubique un componente, un TImage, pero eso es relativo... lo que necesito es:

desde el form principal, sin saber cual es el nombre del formulario activo, ubicar un componete del mismo.

ejemplo:

Code: Pascal  [Select]
  1. function foto();
  2. begin
  3.   {Con esto se cual es el formulario activo, su nombre, pero no puedo tomar el string devuelto para referenciar un componente del form, por ejemplo "foto.Picture.LoadFromFile(imgpath);}
  4.    showmessage(Screen.ActiveForm.Name); // nombre del form activo
  5. end;

Lo que quiero es poder conocer le nombre y colocar una imagen en el componete TImage del form activo por menú y el problema lo tengo con el nombre, va en una variable? como podria lograrlo...

Ojala! me haya hecho entender, perdón.. y muchas gracias
« Last Edit: September 04, 2017, 04:46:41 pm by daragor »
Inculcando el software libre.
http://www.webscom.net

Edson

  • Hero Member
  • *****
  • Posts: 800
Re: Referenciar componente de un Form Activo
« Reply #1 on: September 04, 2017, 04:57:15 pm »
Lo que yo hago, es primero verificar si el formulario activo es de la clse que yo quiero:

Algo como:
  if Screen.ActiveForm is ....
o
  if Screen.ActiveForm.ClassName = ...

luego ya puedo referenciarlo por su clase:

frm := TMiClaseDeFormulario(Screen.ActiveForm);

Y allí ya tengo acceso a todo el formulario en "frm".
Lazarus 1.6 - FPC 3.0.0 - x86_64-win64 on  Windows 7

daragor

  • New member
  • *
  • Posts: 11
    • Blog Webscom
Re: Referenciar componente de un Form Activo
« Reply #2 on: September 04, 2017, 05:47:15 pm »
Hola Edson, claro yo pensé en algo parecido con el Screen.ActiveForm.Name... preguntando el nombre del form en un case voy determinando las acciones de sus componentes, quizas lo tuyo me ahorra un poco de codigo pero creo q igual estaríamos en algo poco optimizado, salvo que no te haya entendido bien tu método.. pero imagina que la función o procedimiento se usa en unos 5 o 6 formularios...

Code: Pascal  [Select]
  1. case Screen.ActiveForm.Name of
  2. 'form1':  
  3.   begin
  4.     form1.logo.Picture.LoadFromFile(imgpath);
  5.     form1.logo.Picture.SaveToFile(imgpath);
  6.     etc...
  7.   end;
  8. 'form2':
  9.   begin
  10.     form2.... etc etc.
  11.   end;
  12. end;
Inculcando el software libre.
http://www.webscom.net

Edson

  • Hero Member
  • *****
  • Posts: 800
Re: Referenciar componente de un Form Activo
« Reply #3 on: September 04, 2017, 06:39:41 pm »
Lo que yo digo es que utilices una referencia a objeto, no el nombre.
¿Cuantos tipos de formularios tienes, a los que deseas acceder? ¿Son todos de una misma clase o son clases diferentes?
Si son todos de una misma clase, entonces solo necesitas un tipo de referencia como el que te indiqué:

frm := TForm1(Screen.ActiveForm);

Y una validación de tipo antes, por seguridad.
Lazarus 1.6 - FPC 3.0.0 - x86_64-win64 on  Windows 7

 

Recent

Get Lazarus at SourceForge.net. Fast, secure and Free Open Source software downloads Open Hub project report for Lazarus