Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   TTaskDialog de Builder XE3 (https://www.clubdelphi.com/foros/showthread.php?t=87963)

Angel.Matilla 25-03-2015 13:53:15

TTaskDialog de Builder XE3
 
Estoy empezando a meterme con esta versión de Builder y al tratar este elemanto no veo la manera de áctivar o desactivar por código los botones que vienen definidos por defecto (Ok, Cancel, etc.).

Si miro el código subyancente en el formulario veo que la propiedad CommonButtons muestra así los bonotes activados; por ejemplo:
Código:

object TaskDialog1: TTaskDialog
  Buttons = <>
  CommonButtons = [tcbOk, tcbYes, tcbCancel]
  RadioButtons = <>
  Left = 190
  Top = 685
end

De esta manera en el cuadro de diálogo se muestran esos tres botones. Pero ¿cómo puedo hacer eso mismo vía código? He probado con
Código:

TaskDialog1->CommonButtons = [tcbOk, tcbCancel];
y evidentemente me da error de compilación y en la ayuda de XE3 (si la de 5/6 era mala esta es peor) no viene ningún ejemplo.

Neftali [Germán.Estévez] 25-03-2015 16:23:39

Aquí hay un ejemplo (en Delphi). Imagino que el de Builder debe ser equivalente.

Angel.Matilla 25-03-2015 17:37:11

Grcias. Ese ejemplo lo he visto pero no he sabido adaptarlo a Builder. Básicamente es que en el ejemplo no vioene como tratar los CommonButtons.

Angel.Matilla 25-03-2015 17:53:36

A ver, y repito que la ayuda para XE3 es peor que la que tiene Buidler 5/6. En XE3 hay este código: Vcl.Dialogs.TTaskDialogCommonButtons, pero por más vueltas que le doy no veo como mostrar u ocultar los botones predefinidos.

Neftali [Germán.Estévez] 25-03-2015 18:10:34

Pues a mi esto me está funcionando sin problemas...

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  TaskDialog1.CommonButtons := [tcbOk,tcbRetry];
  TaskDialog1.Execute;
end;

:confused::confused:

Angel.Matilla 27-03-2015 12:55:18

Cita:

Empezado por Neftali (Mensaje 490426)
Código:

procedure TForm1.Button1Click(Sender: TObject);
begin
  TaskDialog1.CommonButtons := [tcbOk,tcbRetry];
  TaskDialog1.Execute;
end;


EN delphi no dudo que funcione, pero esa sintaxis no me vale en Builder :(

Neftali [Germán.Estévez] 27-03-2015 15:56:48

Lo se, lo se,... pero no debe ser muy difícil de adaptar.

¿Puedes poner el error exacto?

Angel.Matilla 27-03-2015 17:58:49

Cita:

Empezado por Neftali (Mensaje 490570)
Lo se, lo se,... pero no debe ser muy difícil de adaptar.

¿Puedes poner el error exacto?

Vale. TEngo declara esta función, apra que me valga a lo largo de toda la aplicación:
Código:

int Mensaje(TCustomForm *Form, String Titulo, String Msg, int DlgType, TStringList *Botones)
{
    TTaskDialog *dMensaje = new TTaskDialog(Form);

    dMensaje->Caption      = Application->Title;
    dMensaje->CommonButtons = [];
    dMensaje->MainIcon      = DlgType;
    dMensaje->Title        = Titulo;
    dMensaje->Text          = Msg;

    for (int nBoton = 0; nBoton < Botones->Count; nBoton ++)
    {
        dMensaje->Buttons->Add();
        dMensaje->Buttons->Items[nBoton]->Caption    = Botones->Strings[nBoton];
        dMensaje->Buttons->Items[nBoton]->ModalResult = nBoton + 1;
    }

    if (dMensaje->Execute())
        return dMensaje->ModalResult;

    return -1;
}

En la línea en cuestión (dMensaje->CommonButtons) he probado como está ahí, con dMensaje->CommonButtons->tcbOk = false, con dMensaje->CommonButtons->tcbOk = NULL... Siempre me da error al compilar:
Cita:

Funciones.cpp(192): parsing: int Mensaje(TCustomForm *,UnicodeString,UnicodeString,int,TStringList *)
Lo curioso es que el error lo da en la línea SIGUIENTE a la que se declara la función (int Mensaje...). Si comento la línea del CommonButtons, va sin problema; le paso este código (todas las variables etán definidas):
Código:

slBotones->Clear();
slBotones->Text = "Buscar\r\nCancelar";
nOpcTsk = Mensaje(this,
                  String("Instalación"),
                  String("Indique la situación de la base de datos"),
                  tdiShield, slBotones);

y muestra esto:

y de ahí me sobran dos botones

Angel.Matilla 27-03-2015 18:22:11

Una cosa que no he probado, pero porque no se me ocurre CÓMO hacerlo, es algo parecido a modificar las porpiedades de una fuente. Algo parecido a esto:
Código:

Check->Font->Style = TFontStyles() >> fsBold;
algo como:
Código:

dMensaje->CommonButtons.Clear();
No sé si se podrán definir los botones de una forma similar porque por más vueltas que le he dado a la yuda, que ya digo que es penosa, no lo veo.

Angel.Matilla 27-03-2015 18:52:54

Cita:

Empezado por Angel.Matilla (Mensaje 490579)
Código:

dMensaje->CommonButtons.Clear();

¡Pues efectivamente! ¡Esa es la solución! ¿Y por qué no lo ponen en la ayuda? :mad:


La franja horaria es GMT +2. Ahora son las 05:33:35.

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