Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2021
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cambiar caption de botón de otro formulario

Hola amigos buenas noches.

Estoy tratando de cambiar el CAPTION de un tBitBtn creado dinámicamente en otro formulario. En ese otro formulario se da click sobre el botón creado dinámicamente para mostrar otra pantalla, en esta pantalla se realiza ciertas acciones que se crea una "leyenda" la cual necesito se coloque en el caption del boton.

Estoy tratando de hacer esto:
Código Delphi [-]
        frmMeseroMain((Sender as tBitBtn).Caption:=Label2.Caption);

La verdad estaba experimentando haber si me funcionaba, pero no lo hace, obvio marca error...."Missing operator or semicolon"...

Entonces, de que otra manera puedo accesar al caption del botón q es creado dinámicamente desde otro formulario para cambiárselo??

Gracias por su tiempo.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 10-10-2021 a las 04:13:52.
Responder Con Cita
  #2  
Antiguo 10-10-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A falta de más código, por decir algo, ¿has probado de modo "normal"?
Código Delphi [-]
formulario.boton.caption := 'nuevo caption';
Responder Con Cita
  #3  
Antiguo 10-10-2021
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Podrías hacer:
Código Delphi [-]
...
var
  bt: TBitBtn;
begin
  OtroForm := TOtroForm.Create(Self);
  OtroForm.Show;

  // NombreDelBoton(TBitBtn) fue creado dinámicamente en OtroForm en este punto

  bt := TBitBtn(OtroForm.FindComponent('NombreDelBoton'));
  if Assigned(bt) then
    bt.Caption := 'New Caption';

  ...
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 10-10-2021
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
A falta de más código, por decir algo, ¿has probado de modo "normal"?
Código Delphi [-]
formulario.boton.caption := 'nuevo caption';
Gracias por contestar Casimiro.

Claro q ese sería lo mas obvio....si el botón lo creara en tiempo de diseño, pero este se crea en tiempo de ejecución...en la parte de ".boton.caption...etc", como hago la referencia en "boton", que iria ahi, si el botón es creado cuando se corre la aplicación??...es eso lo que no sé, como puedo accesar a ese botón en especifico?, puede ser 1,2,3 o más botones los que se crean....como le hago para saber q botón se pulso y de esa manera acceder a su caption después, para cambiarla lo q tenga ahi.

Para los botones que coloco en tiempo de diseño no tengo problema "tForm1.btnAceptar.Caption:="...pero los q se crean en tiempo de ejecución, no se como hacer la referencia a esos botones....

Bueno, gracias por contestar
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #5  
Antiguo 10-10-2021
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Podrías hacer:
Código Delphi [-]
...
var
  bt: TBitBtn;
begin
  OtroForm := TOtroForm.Create(Self);
  OtroForm.Show;

  // NombreDelBoton(TBitBtn) fue creado dinámicamente en OtroForm en este punto

  bt := TBitBtn(OtroForm.FindComponent('NombreDelBoton'));
  if Assigned(bt) then
    bt.Caption := 'New Caption';

  ...
end;

Saludos
Hola Daniel, gracias por contestar.

Ahora q leo tu código ya me da un mejor panorama por donde ir.
Con este código creo los botones...
Código Delphi [-]
procedure TfrmCambiarMesa.FormShow(Sender: TObject);
var
    PosY: Integer;
    nLeft:Integer;
begin
//    edMesaActual.Text:=frmRegComanda.Edit1.Text;
    Label3.Caption:=frmRegComanda.Edit1.Text;
    BitBtn1.Enabled:=False;
    qryMesas.Close;
    qryMesas.Open;
    qryMesas.First;

    while ScrollBox1.ControlCount > 0 do
        ScrollBox1.Controls[0].Free;

     PosY:=8;
     nLeft:=8;
     n:=1;

     if not(qryMesas.IsEmpty) then
     begin
         While not qryMesas.Eof do
         begin
            BtnsMesas[n]:=TBitBtn.Create(Self);
            with BtnsMesas[n] do
            begin
                Caption:=qryMesas.FieldByName('MESA_NUM').AsString;
                Parent:=ScrollBox1;
                Height:=100;
                Top:=PosY;
                Left:=nLeft;
                if nLeft=508 then begin //200
                   nLeft:=8;
                   PosY:=PosY+Height+5
                end Else Begin
                   nLeft:=nLeft+100;
                end;
                Width:=100;
                OnClick:=OnButtonClick1;
                Font.Size:=12;
                Tag:=qryMesas.FieldByName('MESA_NUM').AsInteger;
                Font.Style:=[fsBold];
                Layout:=blGlyphTop;
                Glyph:=Image2.Picture.Bitmap;
            end;
            qryMesas.Next;
            inc(n);
         end;
    end;
end;

En este codigo no uso la propiedad "Name" del boton, la usaré para crearle un nombre y asi poder acceder a su caption, siguiendo el código q me enviaste.

Lo aplico en cuanto pueda y les comento como me fue.

Saludos y gracias por tu tiempo.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #6  
Antiguo 10-10-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mRoman Ver Mensaje
si el botón lo creara en tiempo de diseño, pero este se crea en tiempo de ejecución...
Se me pasó ese "pequeño" detalle
Responder Con Cita
  #7  
Antiguo 11-10-2021
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Resuelto

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Podrías hacer:
Código Delphi [-]
...
var
  bt: TBitBtn;
begin
  OtroForm := TOtroForm.Create(Self);
  OtroForm.Show;

  // NombreDelBoton(TBitBtn) fue creado dinámicamente en OtroForm en este punto

  bt := TBitBtn(OtroForm.FindComponent('NombreDelBoton'));
  if Assigned(bt) then
    bt.Caption := 'New Caption';

  ...
end;

Saludos
Hola Daniel.

Comentarte a ti y a todos los del foro como quedó solucionado, aqui el código:
Código Delphi [-]
procedure TfrmCambiarMesa.BitBtn1Click(Sender: TObject);
var
   bt: tBitBtn;
begin
   if Application.MessageBox('Es correcto el CAMBIO DE MESA','Pregunta',mb_OkCancel+mb_IconQuestion)=idOk then
   begin
        frmRegComanda.nFlagCerrarCambioMesa:=1;
        qryEjecuta.Prepare;
        qryEjecuta.ParamByName('NUM_MESA').AsString:=Label2.Caption;
        qryEjecuta.ParamByName('LETRA').AsString:='';
        qryEjecuta.ParamByName('COMANDA_ID').AsString:=frmRegComanda.Edit4.Text;
        qryEjecuta.ParamByName('EMP_ID').AsInteger:=qryEmpleado.fieldByName('EMPLEADO_ID').AsInteger;
        qryejecuta.ExecSQL;
        DM.trsComanda.Commit;

        bt:= tBitBtn(frmMeseroMain.FindComponent(frmMeseroMain.NombreBoton) );
        if Assigned(bt) then
            bt.Caption:=Label2.Caption;


        Application.MessageBox('Cambio realizado exitosamente','Aviso',mb_Ok+mb_IconInformation);

        Close;
   end;
end;

Aqui parte del codigo del formulario "frmMeseroMain" en donde se crean dinámicamente los botones:

Código Delphi [-]
procedure TfrmMeseroMain.MostrarMesas;
var
    PosY: Integer;
    nLeft:Integer;
begin
    // **** Con el siguiente codigo eliminamos los botones que puedan estar dentro del SCROLLBOX1 *****
    
    ScrollBox1.Visible:=True;
    while ScrollBox1.ControlCount > 0 do
        ScrollBox1.Controls[0].Free;

//************* CREA LOS BOTONES POR CADA MESA *****************
     PosY:=8;
     nLeft:=8;
     n:=1;
     qryMesas.Close;
     qryMesas.ParamByName('EMP_ID').AsString:=vNumEmpl;
     qryMesas.Open;
     qryMesas.First;
{     if not(qryMesas.IsEmpty) then
     begin}
         While not qryMesas.Eof do
         begin
            Botones[n]:=TBitBtn.Create(Self);
            with Botones[n] do
            begin
                Caption:=qryMesas.fieldbyname('MESA').AsString;
                Parent:=ScrollBox1;
                Height:=75;
                Top:=PosY;
                Left:=nLeft;
                if nLeft=708 then begin
                   nLeft:=8;
                   PosY:=PosY+Height+5
                end Else Begin
                   nLeft:=nLeft+100;
                end;
                Width:=85;
                OnClick:=OnButtonClick1;
                Name:='btn'+IntToStr(n);
                Font.Size:=13;
                Font.Style:=[fsBold];
                Layout:=blGlyphTop;
                ShowHint:=True;
                Hint:='No. Comanda: '+qryMesas.FieldByName('COMANDA_ID').AsString+' Nombre:'+Name;
                if qryMesas.FieldByName('COMANDA_ESTATUS').AsString='A' then
                    Glyph:=Image1.Picture.Bitmap;
                if qryMesas.FieldByName('COMANDA_ESTATUS').AsString='C' then
                    Glyph:=Image2.Picture.Bitmap;
                Tag:=qryMesas.fieldByName('COMANDA_ID').AsInteger;
            end;
            qryMesas.Next;
            inc(n);
         end;
{    end Else Begin
        ShowMessage('No tienes aún MESAS ABIERTAS!');
    end;}
    btnAbrirMesa.Enabled:=True;
end;

Y lo que sucede al dar click sobre algunos de los botones creados:
Código Delphi [-]
procedure TfrmMeseroMain.OnButtonClick1(Sender:TObject);
{var
  nRegID2 : Integer;}
begin
     nRegID:=(Sender as TBitBtn).Tag;
     NombreBoton:=(SEnder as tBitBtn).Name; //Aqui le asigno el nombre del boton al dar click sobre el mismo a la variable "NombreBoton"
     IniciaTRS();
     if FindComponent('frmRegComanda') = nil then
           frmRegComanda:=TfrmRegComanda.Create(self);
     frmRegComanda.ShowModal;
end;

Muchas gracias. Saludos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 11-10-2021 a las 16:38:11.
Responder Con Cita
  #8  
Antiguo 13-10-2021
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Veo que ya lo tienes resuelto. Comparto de todas formas el modo en el que resuelvo yo este tipo de tarea por si pudiera resultar interesante. Lo que hago en estos casos es sobrecargar el constructor del formulario que se crea desde un botón para que se le pueda pasar el propio botón "creador" como argumento al constructor del formulario. Un ejemplo sencillo de un formulario con un TEdit y un TButton que al llamar escribir un texto en el edit y pulsar el botón cambia el Caption del botón desde el que se creó ese formulario:
Código Delphi [-]
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    edt1: TEdit;
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    BotonCreador: TButton;
    { Private declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent;aButton:tbutton); overload;
  end;

implementation

{$R *.dfm}

procedure TForm2.btn1Click(Sender: TObject);
begin
   BotonCreador.caption := edt1.text;
end;

constructor TForm2.Create(AOwner: TComponent; aButton: tbutton);
begin
  create(aOwner);
  self.BotonCreador := aButton;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= cafree;
end;

end.

El método que crea formularios y se llamará en el onclick de cada boton creado sería una cosa así:
Código Delphi [-]
procedure TForm1.ClickBotonCreador(Sender: TObject);
begin
  with TForm2.create(self,tButton(Sender)) do
    showmodal;
end;
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
hacer parpadear el caption de un botón albelg Varios 5 11-06-2015 23:32:02
Cambiar el caption de un boton segun su nombre IVAND Varios 1 18-04-2012 00:21:07
Cambiar el caption de un boton segun el registro nenufer Varios 8 08-06-2006 09:32:48
Captión de un Formulario auxiliar. bbjb OOP 5 10-03-2005 15:59:08
Un boton me lleva a un formulario y otro almacena. pepelu1975 OOP 3 11-02-2004 22:01:27


La franja horaria es GMT +2. Ahora son las 12:38:16.


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