Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con Componente derivado de TPanel y Botones (https://www.clubdelphi.com/foros/showthread.php?t=13946)

Critter 04-09-2004 18:56:37

Problema con Componente derivado de TPanel y Botones
 
saludos foro.

trabajo en Delphi 3 y tengo creado un componente derivado de un TPanel el cual dentro tiene 2 botones, (los tipicos Aceptar y Cancelar), el problema que tengo es que a pesar de haber creado los dos botones dentro del panel y haberles indicado el '&Aceptar', y '&Cancelar', en tiempo de diseño, en el caption de los mismos aparecen los botones con la etiqueta 'Ok' y 'Cancel', y no el caption que yo les habia colocado.

asi mismo, en tiempo de ejecución si aparecen las etiquetas modificadas, pero ...
no puedo utilizar Alt+A y Alt+C porque no aparece subrayadito bajo la letra, con lo cual deduzco que no hace caso al '&'.

alguna sugerencia para el ampersand ?

gracias.

roman 04-09-2004 22:50:45

Para que los cambios que hagas en tiempo de diseño en las subcomponentes (los botones en este caso) se preserven debes usar su método SetSubComponent después de crearlos:

Código Delphi [-]
BotonAceptar := TButton.Create;

{
  Asignar propiedades de inicio
}

BotonAceptar.SetSubComponent(true);

// Saludos

Critter 05-09-2004 02:30:20

en Delphi 3 me da error, me parece que no existe 'SetSubComponent'

estoy equivocado ?

roman 05-09-2004 05:39:14

Cita:

Empezado por Critter
estoy equivocado ?

No. Desafortunadamente la capacidad de tener subcomponentes que puedan guardar sus propiedades en el archivo dfm no apareció sino hasta la versión 6.

Tengo la idea de que es posible hacer lo que quieres pero tendrías que meterte con el proceso de 'streaming' que usa el IDE para leer y guardar propiedades del archivo dfm y esto es complejo.

Si lo único que deseas es poder cambiar en tiempo de diseño el texto de los botones podrías optar por publicar propiedades paralelas en el panel:

Código Delphi [-]
interface

type
  TButtonsPanel = class(TPanel)
  private
    FOkButton: TBitBtn;
    FCancelButton: TBitBtn;

    function GetOkCaption: TCaption;
    function GetCancelCaption: TCaption;

    procedure SetOkCaption(const Value: TCaption);
    procedure SetCancelCaption(const Value: TCaption);

  public
    constructor Create(AOwner: TComponent); override;

  published
    property OkCaption: TCaption read GetOkCaption write SetOkCaption;
    property CancelCaption: TCaption read GetCancelCaption write SetCancelCaption;
  end;

implementation

{ TButtonsPanel }

constructor TButtonsPanel.Create(AOwner: TComponent);
begin
  inherited;

  Width := 105;
  Height := 73;

  FOkButton := TBitBtn.Create(Self);
  FOkButton.Parent := Self;
  FOkButton.Left := 16;
  FOkButton.Top := 8;
  FOkButton.Caption := '&Aceptar';
  FOkButton.Name := 'OkButton';

  FCancelButton := TBitBtn.Create(Self);
  FCancelButton.Parent := Self;
  FCancelButton.Left := 16;
  FCancelButton.Top := 40;
  FCancelButton.Caption := '&Cancelar';
  FCancelButton.Name := 'CancelButton';
end;

function TButtonsPanel.GetOkCaption: TCaption;
begin
  Result := FOkButton.Caption;
end;

function TButtonsPanel.GetCancelCaption: TCaption;
begin
  Result := FCancelButton.Caption
end;

procedure TButtonsPanel.SetOkCaption(const Value: TCaption);
begin
  FOkButton.Caption := Value;
end;

procedure TButtonsPanel.SetCancelCaption(const Value: TCaption);
begin
  FCancelButton.Caption := Value;
end;

end.

Con esto, las propiedades OkCaption y CancelCaption se reflejarán en los textos de los botones ya sea durante el diseño o en ejecución.
// Saludos

Critter 05-09-2004 11:08:55

la solución que habia encontrado hasta el momento era publicar los botones en el componente, y asignar los valores por código así por lo menos me funciona, a la espera de alguna solución mas profesional.

muchas gracias, roman. como siempre mostrando interes.
un saludo.


La franja horaria es GMT +2. Ahora son las 10:22:07.

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