Ver Mensaje Individual
  #2  
Antiguo 07-12-2013
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita