Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-12-2013
cavdrz cavdrz is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 5
Poder: 0
cavdrz Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 07-12-2013
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 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
  #3  
Antiguo 07-12-2013
cavdrz cavdrz is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 5
Poder: 0
cavdrz Va por buen camino
gracias, no pes + claro que el agua, gracias por la pequeña ayuda, estoy muy agradecido. gracias
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
de un principiante dtomeysoto MySQL 1 02-04-2008 16:11:42
Principiante krloz99 Varios 3 08-06-2007 15:59:30
problemita de principiante chona Firebird e Interbase 3 20-07-2004 16:46:30
principiante olybola Conexión con bases de datos 3 17-05-2004 19:56:36
Principiante fjcg02 Internet 3 10-03-2004 20:54:50


La franja horaria es GMT +2. Ahora son las 01:34:03.


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