Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-05-2010
Firewind Firewind is offline
Miembro
 
Registrado: ene 2005
Posts: 12
Poder: 0
Firewind Va por buen camino
Acceder a un TButton por su nombre

Hola.
Despues de 7 años sin programar en delphi, he tenido que retomar la programacion de escritorio. El problema que tengo es que hay 60 botones y dependiendo de las acciones del usuario, debo cambiar el estado de un boton en concreto.Por ejemplo si uso la llamada MarcaBoton(boton:integer) , en la funcion tengo 60 IF, lo cual es una burrada, por lo que me gustaria saber si puedo hacer un BtnX.disabled, donde X es el valor pasado al procedimiento.
Uso Lazarus + FireBird para el proyecto.
Un saludo.
Responder Con Cita
  #2  
Antiguo 19-05-2010
cecam cecam is offline
Miembro
 
Registrado: may 2006
Ubicación: Girona
Posts: 47
Poder: 0
cecam Va por buen camino
Asignales a todos la misma funcion clik y los discriminas/diferencias de uno u otro por el Sender
Código:
procedure TfrmMain.Button1Click(Sender: TObject);
begin
  If     sender=Button1
  then
  else
  If     sender=Button2
  then
  [...]
end;
Saludos!!
Responder Con Cita
  #3  
Antiguo 19-05-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Firewind y bienvenido, para acceder por su nombre puedes hacerlo con FindComponent:

Código Delphi [-]
var
 Control : TComponent;
begin
 Control := FindComponent('Btn'+X);
 if Assigned(Control) then
  TButton(Control).Enabled := False;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #4  
Antiguo 19-05-2010
Firewind Firewind is offline
Miembro
 
Registrado: ene 2005
Posts: 12
Poder: 0
Firewind Va por buen camino
Gracias a los dos por vuestras respuestas, al final he usado la opcion de Caro y funciona a la perfección.
Un saludo.
PD.- es mi primer mensaje despues de muchos años sin usar pascal, entre el 199x y 2002 si estaba por aqui a menudo
Responder Con Cita
  #5  
Antiguo 19-05-2010
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Otra opción sería que guardes los botones en una lista al crear la forma, así los buscas por medio de su index:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    FBtnList: TObjectList;
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;

begin
  FBtnList := TObjectList.Create(False);
  for I := 0 to Pred(ComponentCount) do
    if Components[i] is TButton do
      FBtnList.Add(Components[i])
end;

procedure TForm1.MarcaBoton(Index: Integer);
begin
  TButton(FBtnList[Index]).Enabled := False
end;

Aquí lo único es que el rango sería de 0 a n - 1...


Saludos...
Responder Con Cita
  #6  
Antiguo 19-05-2010
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Se me ocurre otra que he usado en estos casos:

Lla función:

Código Delphi [-]
function FindCompByName(AContainer: TForm; AName: TComponentName):TComponent;
var
  i: Integer;
begin
  Result:= nil;
  for i:= 0 to AContainer.ComponentCount - 1do
    if AContainer.Components[i].Name = AName then
      Result:= AContainer.Components[i]
end;

Recibe como parámetros el nombre de un contenedor, en este caso un Form, y un nombre de un componente, te devuelve ese componente.

Este es un ejemplo de como usarlo:

Código Delphi [-]
procedure TForm1.btnTestClick(Sender: TObject);
begin
  with TStringGrid(FindCompByName(Self, 'grdAquiEstoy')) do
  begin
    DefaultColWidth:= 60;
    DefaultRowHeight:= 20;
//  Aqui puedes poner código para manipular el componente
  end;
end;

Para realizar este ejemplo pon varios controles en un formulario, además un botón llamado btnTest y un stringgrid llamado grdAquiEstoy, en el OnClick del botón btnTest inserta este código y afectará las columnas y filas del stringgrid, espero te sirva.

NOTA: Este no verifica si existe o no el componente, tal y como lo hace el ejemplo de Caro, el control debe existir o debes escribir código para manejar la situación en caso de que no exista.
__________________
Herr Heins Faust

Última edición por Faust fecha: 19-05-2010 a las 16:47:09. Razón: corrección
Responder Con Cita
  #7  
Antiguo 19-05-2010
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Faust, siento que estás reinventando la rueda con tu función FindCompByName, ya que la función FindComponent hace exactamente lo mismo...


Saludos...
Responder Con Cita
  #8  
Antiguo 19-05-2010
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Hola...

Faust, siento que estás reinventando la rueda con tu función FindCompByName, ya que la función FindComponent hace exactamente lo mismo...


Saludos...
Ja ja ja... ya me había pasado con otras funciones...

ALguna vez hice una parecia a TryStrToInt... era igualita, gracias por el dato...
__________________
Herr Heins Faust
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
El virus del TButton roman La Taberna 23 03-10-2008 18:10:23
como acceder a un objeto si el nombre es pasado como un string marcelinux Varios 4 08-11-2007 00:20:39
Imagen en TButton albion Varios 8 27-08-2007 22:30:15
componente tbutton ercrizeporta Varios 2 25-07-2007 12:26:46
TButton Humberto Pertuz API de Windows 3 17-12-2003 19:04:13


La franja horaria es GMT +2. Ahora son las 23:11:31.


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