Forum > Spanish

Referenciar componente de un Form Activo

(1/1)

daragor:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---function foto();begin  {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);}   showmessage(Screen.ActiveForm.Name); // nombre del form activoend;
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

Edson:
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".

daragor:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---case Screen.ActiveForm.Name of'form1':    begin    form1.logo.Picture.LoadFromFile(imgpath);    form1.logo.Picture.SaveToFile(imgpath);    etc...  end;'form2':   begin    form2.... etc etc.  end;end;

Edson:
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.

Navigation

[0] Message Index

Go to full version