PDA

Ver la Versión Completa : checkbox


superhopi
09-05-2003, 14:15:02
Tengo un formulario con muchos checkbox, y quiero que todos ellos me abran un mismo formulario, pero con una peculiaridad; que el caption del check sea el caption de ese nuevo formulario y ademas que pueda almacenar el nombre del check en una variable. Es un poco enreversado, pero, ¿puede hacerse?

kdetill
09-05-2003, 14:31:12
Hola

Es sencillo. Tienes que hacer que todos los combos apunten al mismo procedimiento y en el poner algo asi


procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if Sender is TComboBox then
begin
//Llamada al siguente form
Form1.ShowModal;
Form1.Caption := TComboBox(Sender).Text;
Form1.VariableEntrada := TComboBox(Sender).Name;
end;
end;


Es un ejemplo, adaptalo mas o menos a tus necesidades.

Espero te sirva

Bacterion
09-05-2003, 14:31:22
Claro que sí, pero para hacerlo desacoplado y que puedas usarlo en otras situacione s(osea no ligarlo al CheckBox por aquello de que hoy es checkbox mañana es primavera en el corte inglés :p (vamos que puede cambiar))

Supon que el formulario a crear es:
TMiMaravillosoForm

Haz, por ejemplo:
Variable o Propiedad o Función (pública) por la que le pases un string a almacenar (por ejemplo, el nombre del checkbox).

Ahora, el truco está en saber que el Sender de un evento es el objeto sobre el cual se realiza la acción (click, drag, etc...)

Llama a este form (supongamos que estamos en la función que crea el Form, por ejemplo, en el OnCheck, que tiene un parámetro Sender).

MiCheckBoxCheck(Sender: TObject);
begin
// un poner
with TMiMaravillosoForm.Create(Self)
try
Caption := TCheckBox(Sender).Text;
MiPropiedadMagica := TCheckBox(Sender).Name;
ShowModal;
finally
free;
end;
end;

Obviemente deberías declarar en TMiMaravillosoForm algo tal que:

TMiMaravillosoForm = class(TForm)
private
// solo si caso b
FNombreAGuardar: string;
public
// a
procedure AsignaNombreAGuardar(const Nombre: string);
// b
property NombreAGuardar: string read FNombreAGuardar write FNombreAGuardar;
// c
NombreAGuardar: string; // antes que esto, mejor b.
end;

Como verás, he usado b, pero con otro nombre...:D

superhopi
12-05-2003, 10:32:46
ahora se me plantea otro problema, y es que desde el nuevo form que he hecho (hay muchos check y se me abre un unico form) quiero pasar el contenido de un memo al form de donde proceden los checks, y esto :
formprincipal.TDBMEMO(findcomponent('MEM'+ numero.caption).text:=formsecundario.memo.Text;
no me sirve (me da error seguido de "formprincipal.")
¿Como lo puedo hacer?:confused: :confused: :confused: