Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Llamar una consola de windows desde un form en builder c++? (https://www.clubdelphi.com/foros/showthread.php?t=82860)

darkmir 19-04-2013 19:02:03

Llamar una consola de windows desde un form en builder c++?
 
Saludos amigos, tengo un problema con el embarcadero builder c++, en si lo que quiero es mostrar una consola por ejemplo un "Hola mundo" al hacer un click en el Button de un Form, lo he estado intentando y algunas veces me sale error y otras no me sale nada, espero alguien pueda ayudarme .
Gracias de antemano.

ecfisa 19-04-2013 21:02:29

Hola darkmir y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Por favor, publicá el código de alguno de los intentos que te produce el error y el mensaje de error literalmente.
Sin esos datos es muy difícil acertar que está sucediendo.

Saludos.

CAENLOTI 18-08-2014 21:54:06

veras tengo este codigo en c++ builder 6 y como hago para llamar desde un TForm1 con un boton creado dede ahi.. llamar a la consola por ejemplo mira el codigo espero q m entiendas

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

}
//---------------------------------------------------------------------------
ahi tengo hecho la forma..
ahora quiero asociar con la ejecucion de este codigo...

#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
using namespace std;

// Funciones auxiliares:
int Menu();
long LeeNumero();

// Clase registro.
class Registro {
public:
Registro(char *n=NULL, int d1=0, int d2=0, int d3=0, int d4=0) : valido('S') {
if(n) strcpy(nombre, n); else strcpy(nombre, "");
dato[0] = d1;
dato[1] = d2;
dato[2] = d3;
dato[3] = d4;
}
void Leer();
void Mostrar();
void Listar(long n);

const bool Valido() { return valido == 'S'; }
const char *Nombre() { return nombre; }
private:
char valido; // Campo que indica si el registro es válido
// S->Válido, N->Inválido
char nombre[34];
int dato[4];
};

// Implementaciones de clase Registro:
// Permite que el usuario introduzca un registro por pantalla
void Registro::Leer() {
system("cls");
cout << "Leer registro:" << endl << endl;
valido = 'S';
cout << "Nombre: ";
cin.getline(nombre, 34);
for(int i = 0; i < 4; i++) {
cout << "Dato[" << i << "]: ";
dato[i] = LeeNumero();
}
}

// Muestra un registro en pantalla, si no está marcado como borrado
void Registro::Mostrar()
{
system("cls");
if(Valido()) {
cout << "Nombre: " << nombre << endl;
for(int i = 0; i < 4; i++)
cout << "Dato[" << i << "]: " << dato[i] << endl;
}
cout << "Pulsa una tecla";
cin.get();
}

// Muestra un registro por pantalla en forma de listado,
// si no está marcado como borrado
void Registro::Listar(long n) {
int i;

if(Valido()) {
cout << "[" << setw(6) << n << "] ";
cout << setw(34) << nombre;
for(i = 0; i < 4; i++)
cout << ", " << setw(4) << dato[i];
cout << endl;
}
}

// Clase Datos, almacena y trata los datos.
class Datos :public fstream {
public:
Datos() : fstream("alea.dat", ios::in | ios::out | ios::binary) {
if(!good()) {
open("alea.dat", ios::in | ios::out | ios::trunc | ios::binary);
cout << "fichero creado" << endl;
cin.get();
}
}
~Datos() {
Empaquetar();
}
void Guardar(Registro &reg);
bool Recupera(long n, Registro &reg);
void Borrar(long n);

private:
void Empaquetar();
};

// Implementación de la clase Datos.
void Datos::Guardar(Registro &reg) {
// Insertar al final:
clear();
seekg(0, ios::end);
write(reinterpret_cast<char *> (&reg), sizeof(Registro));
cout << reg.Nombre() << endl;
}

bool Datos::Recupera(long n, Registro &reg) {
clear();
seekg(n*sizeof(Registro), ios::beg);
read(reinterpret_cast<char *> (&reg), sizeof(Registro));
return gcount() > 0;
}

// Marca el registro como borrado:
void Datos::Borrar(long n) {
char marca;

clear();
marca = 'N';
seekg(n*sizeof(Registro), ios::beg);
write(&marca, 1);
}

// Elimina los registros marcados como borrados
void Datos::Empaquetar() {
ofstream ftemp("alea.tmp", ios::out);
Registro reg;

clear();
seekg(0, ios::beg);
do {
read(reinterpret_cast<char *> (&reg), sizeof(Registro));
cout << reg.Nombre() << endl;
if(gcount() > 0 && reg.Valido())
ftemp.write(reinterpret_cast<char *> (&reg), sizeof(Registro));
} while (gcount() > 0);
ftemp.close();
close();
remove("alea.bak");
rename("alea.dat", "alea.bak");
rename("alea.tmp", "alea.dat");
open("alea.dat", ios::in | ios::out | ios::binary);
}

int main()
{
Registro reg;
Datos datos;
int opcion;
long numero;

do {
opcion = Menu();
switch(opcion) {
case '1': // Añadir registro
reg.Leer();
datos.Guardar(reg);
break;
case '2': // Mostrar registro
system("cls");
cout << "Mostrar registro: ";
numero = LeeNumero();
if(datos.Recupera(numero, reg))
reg.Mostrar();
break;
case '3': // Eliminar registro
system("cls");
cout << "Eliminar registro: ";
numero = LeeNumero();
datos.Borrar(numero);
break;
case '4': // Mostrar todo
numero = 0;
system("cls");
cout << "Nombre Datos" << endl;
while(datos.Recupera(numero, reg)) reg.Listar(numero++);
cout << "pulsa return";
cin.get();
break;
}
} while(opcion != '0');
return 0;
}

// Muestra un menú con las opciones disponibles y captura una opción del usuario
int Menu()
{
char resp[20];

do {
system("cls");
cout << "MENU PRINCIPAL" << endl;
cout << "--------------" << endl << endl;
cout << "1- Insertar registro" << endl;
cout << "2- Mostrar registro" << endl;
cout << "3- Eliminar registro" << endl;
cout << "4- Mostrar todo" << endl;
cout << "0- Salir" << endl;
cin.getline(resp, 20);
} while(resp[0] < '0' && resp[0] > '4');
return resp[0];
}

// Lee un número suministrado por el usuario
long LeeNumero()
{
char numero[6];

fgets(numero, 6, stdin);
return atoi(numero);
}




vieron x fa ayuda siii.. es para un proyecto... muchas gracias de antemano

Casimiro Notevi 18-08-2014 22:25:19

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

aguml 19-08-2014 18:47:21

¿Tiene que ser por consola? ¿No te serviria usar los componentes estandar de builder? Por ejemplo un TEdit para introducir datos en vez de un scanf, gets,..., mostrar la salida usando por ejemplo un TMemo en vez del printf. Si tiene que ser por consola pues creo que seria mejor crearlo en c, o c++ y adaptar el codigo para que envie mensajes a tu aplicacion que contiene el form, la cual estará a la escucha. Es mas complicado que usar los componentes estandar pero se puede hacer.

aguml 19-08-2014 19:20:18

pensandolo mejor, podrias crear tu proyecto en consola, luego te creas en builder un loader debugger el cual depuraria a tu aplicacion de consola y para comunicarte desde el proceso de consola lo mas facil seria usar OutputDebugString y en ese evento del debugger creas un switch para cada opcion y asi gestionas la salida del proceso de consola. Yo estuve trabajando en una clase para crear loaders debuggers facilmente en builder. Tuve mucha ayuda pero va muy bien. Si quieres hago una prueba y la mando para que captes la idea, aunque quizas haya otras formas mejores de hacerlo. A ver que dicen los maestros.

escafandra 20-08-2014 00:34:02

1. Crea tu programa de consola (Mi_Consola.exe) y verifica que funciona correstamente.
2. Crea tu programa VCL con tu formulario y tu botón. El código ce tu botón será algo como esto:

Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  system("Mi_Consola.exe");
}


Saludos.

aguml 20-08-2014 07:37:08

bueno, si solo quiere lanzar la consola si tener control de lo que se haga en ella desde el form, puessi.


La franja horaria es GMT +2. Ahora son las 02:03:08.

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