Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Principiante en C++ Builder 6 (https://www.clubdelphi.com/foros/showthread.php?t=84798)

cavdrz 07-12-2013 19:31:03

Principiante en C++ Builder 6
 
que tal soy nuevo tanto en este foro como en c++ builder, veran estoy dando mis primeros pasos en este lenguaje y pues me auto ejercicio, veran estoy intentando mostrar en un mensaje la palabra HOLA + el contenido de un TEdit y pues me tira error a la hora de ver el respectivo ejercicio.

Para dicha función el código lo tengo en un TButton:

Código:

void __fastcall TFrmMain::CmdAceptarClick(TObject *Sender)
{
        //Muestro el mensaje en mayúsculas:
        ShowMessage("HOLA " + UpperCase(TxtName->Text));
        //Muestro el mensaje normal:
        Application->MessageBox("Hola " + TxtName->Text, "Mensaje",
        MB_OK | MB_ICONINFORMATION);
     
//Error E2342 Type mismatch in parameter Text wanted const char*, got AnsiString       
        //Muestro el mensaje en minúsculas:
        MessageDlg("hola " + LowerCase(TxtName->Text), mtInformation, TMsgDlgButtons() << mbOK, 0);
}

Pues el caso que ya lo he intentado de esta forma y siempre me tira el mismo error:

Código:

        //Muestro el mensaje normal:
        Application->MessageBox(AnsiString("Hola " + TxtName->Text), "Mensaje",
          MB_OK | MB_ICONINFORMATION);

Espero que me puedan orientar muchas gracias de antemano.

escafandra 07-12-2013 21:41:59

Hola cavdrz, bienvenido al foro.

Tu problema se debe a los casting entre char* y AnsiString. Fijate en la declaración:
Código:

extern PACKAGE void __fastcall ShowMessage(const AnsiString Msg);
Builder hace un casting automático de char* a AnsiString porque este último tiene definido un constructor de esta forma:
Código:

__fastcall AnsiString(const char* src);
Así, el compilador sabe crear un AnsiString desde un char* y la conversión será automática.

Sin embargo el paso contrario tienes que explicitarlo. Fíjate en la declaración de Application->MessageBox:

Código:

int __fastcall TApplication::MessageBox(const char * Text, const char * Caption, int Flags);
Para que tu código funcione basta que hagas esto:
Código:

Application->MessageBox(("Hola " + Edit1->Text).c_str(), "Mensaje",
        MB_OK | MB_ICONINFORMATION);

Que sería lo mismo que:
Código:

Application->MessageBox((AnsiString("Hola ") + Edit1->Text).c_str(), "Mensaje",
        MB_OK | MB_ICONINFORMATION);

La función c_str() convierte un AnsiString en un char*

Espero haberme sabido explicar.


Saludos.

cavdrz 07-12-2013 22:30:06

gracias, no pes + claro que el agua, gracias por la pequeña ayuda, estoy muy agradecido. gracias


La franja horaria es GMT +2. Ahora son las 15:42:58.

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