• Domingo 11 de Mayo de 2025, 21:07

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - juanma

Páginas: [1]
1
C++ Builder / Re: Como Poner Las Horas En Una Agenda?
« en: Viernes 10 de Marzo de 2006, 17:24 »
Una forma de hacerlo...
Código: Text
  1.  
  2. int I, J,K;
  3. StringGrid1->Cells[0][0] = " Horas";
  4. StringGrid1->Cells[0][1] = " Nombre";
  5.  
  6. K = 7;
  7. I = 0;
  8. for (J = 1; J < StringGrid1->RowCount; J++) {
  9.   StringGrid1->Cells[0][J] = IntToStr(K) + ":" +
  10.      ( (I==0) ? "00" : ((I==1) ? "15" : ((I==2) ? "30" : "45" ) ));
  11.  
  12.   if (I < 3)
  13.     I++;
  14.   else {
  15.     K++;
  16.     I=0;
  17.     }
  18.   }
  19.  
  20.  

2
C++ Builder / Re: Ayuda Con Stringgrid
« en: Miércoles 8 de Marzo de 2006, 14:51 »
Te escribo sin probar el código...
Una vez asignados los string a las celdillas del stringgrid, ejecuta algo similar a:
Código: Text
  1.  
  2. (nC = columna a ajustar, si son todas, meter esto dentro de un bucle por columnas)
  3. int nW, nr =0, nMax = 0;
  4. while (nr < sg->RowCount) {
  5.  nW = sg->Canvas->TextWidth(sg->Cells[nC][nr]);
  6.  if (nW > nMax)
  7.     nMax = nW;
  8.   nr++; //por claridad, lo puedes quitar aqui y poner en [nr++] arriba.
  9.   }
  10.  
  11. sg->ColWidths[nC] = nMx;
  12. //...
  13.  
  14.  

3
C++ Builder / Re: Importar Archivo Excel A Builder
« en: Martes 7 de Marzo de 2006, 10:12 »
Creo que curro9 lo explica perfectamente paso a paso...

Falta abrir el fichero:
// Abrimos el libro:        
excel.OlePropertyGet("Workbooks").OleProcedure("Open", fileIn.c_str());

// referenciamos a la 1ª hoja
hoja = excel.OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);

//------- Leemos el contenido de una celda y lo mostramos
int fila = 3, columna = 1;
cell = hoja.OlePropertyGet("Cells", fila, columna);

// ...

Saludos

4
C++ Builder / Re: Como Implementar Un Evento Onchange En Una Stringg
« en: Miércoles 1 de Marzo de 2006, 19:00 »
Puedes por ejemplo en una variable String a nivel de formulario (declarada en el private del .h  String cOldValue; ), en el evento OnGetEdit coges el valor con:

COldValue = Value;

y cuando termine la edición en el OnSetEdit comparas ...

5
C++ Builder / Re: Obtener Ruta Del Directorio De Trabajo
« en: Miércoles 18 de Enero de 2006, 15:16 »
Solo una pequeña apreciación:

Normalmente en las propiedades del acceso directo hay un apartado de "Iniciar en" que suele tener el mismo path que el ejecutable.
Si es así, GetCurrentDir() devuelve el directorio donde esta el ejecutable. Pero esta funcion devuelve el directorio 'activo' de windows, y puede ser otro diferente (tu mismo podrias cambiarlo por código).

Si necesitas el directorio de la aplicación utiliza:
Código: Text
  1.  String dir = ExtractFilePath(Application->ExeName);
  2.  

6
C++ Builder / Re: Bd Remota
« en: Martes 27 de Diciembre de 2005, 19:14 »
Algo dificil de recordar, pero a groso modo:

Debes de entrar en el router (hablamos de la red que tiene el servidor de datos) y buscar en el apartado NAT,  hay varios subapartados, pero busca uno (en el mio, que ahora no lo tengo presente, creo recordad 'servidores virtuales') que te debe permitir introducir la IP del servidor de datos, y el puerto (en el puerto publico pon el mismo).
Esto permite que cuando llege al router (que esta con la IP publica) una petición por dicho puerto, la envie directamente al servidor que indiques.

Investiga por esta via, cada router tendrá una configuración especifica pero la idea es la misma.

7
C++ Builder / Re: Bd Remota
« en: Viernes 23 de Diciembre de 2005, 18:48 »
Si tu programa funciona ok con odbc en tu red (u ordenador) local, para conectarte a una DB remota solo necesitas configurar el odbc en windows y cambiar la conexionstring de tu conexion a dicho DNS.
Pero creo que tu problemas es llegar al servidor remoto si este no esta dentro de una intranet (si esta dentro de la intranet se configura como si fuera local) ya que la IP del servidor no es visible desde fuera. En este caso hay que configurar el router para redirigir el puerto correspondiente al servidor y en el cliente configurar el DNS con la IP publica.

8
C++ Builder / Re: Importar Ficheros
« en: Miércoles 7 de Septiembre de 2005, 15:30 »
Un poco a lo bruto y sencillos es abrir el fichero con el notepad. Si los datos no estan encriptados o comprimidos, visualmente se ven las repeticiones que te dan idea de lo que hay.
A veces tienes que bajar un poco sobre lo ilegible para saltar la cabecera y ver las tabulaciones de los datos, eso si, un poco de paciencia para contar los caracteres.

Saludos
Juanma

9
C++ Builder / Re: Llamar A Una Segunda Forma
« en: Martes 2 de Agosto de 2005, 10:31 »
Debes de poner el include del form2 en el codigo del form1

10
C++ Builder / Re: Consulta Sql
« en: Viernes 29 de Julio de 2005, 15:07 »
Hola,

Solo hacer una pequeña puntualizacion al mensaje de mumo.

Si busca que comience el campo por el/los caracteres determinados el primer % debes quitarlo, quedando la consulta:

CClients->SQL->Add ("SELECT Codigo, Nombre FROM Clientes WHERE Nombre LIKE '"+Cliente+"%' ");

Tambien decirte que el Like segun que motor de datos SQL uses, pueden variar los comodines e incluso como ocurre en Informix sería:

CClients->SQL->Add ("SELECT Codigo, Nombre FROM Clientes WHERE Nombre MACHES '"+Cliente+"*' ");

Saludos
Juanma

11
C++ Builder / Re: Posicion Del Edit
« en: Viernes 29 de Julio de 2005, 14:51 »
A 'grosso' modo, en el keypress recibes el caracter ascii pulsado y lo puedes manipular, es decir si no esta en el rango que quieres lo pudes anular (key =0) o cambiar por otro.
En este evento no aparecen las teclas de funcion ni las de edición como insert, supr... estas teclas solo las puedes detectar con los eventos keydown o keyup.

Cuando me referia al keyup es porque la posicion del cursor la consultas despues de procesar la tecla pulsada.

Saludos
Juanma

12
C++ Builder / Re: Puerto Serie
« en: Viernes 29 de Julio de 2005, 13:37 »
Hola, te envio unas pruebas que hize para escribir en una impresora serie. Creo que esto te puede dar algunas ideas.

//---

  unsigned long nbw;
  HANDLE comhandle;
  DCB newDCB;
  String cDB = "COM1";

  comhandle = CreateFile(cDB.c_str(),
          GENERIC_READ|GENERIC_WRITE,
          0,
          NULL,
          OPEN_EXISTING,
          FILE_ATTRIBUTE_NORMAL,
          NULL);

  if (comhandle == INVALID_HANDLE_VALUE) {
    Application->MessageBox("Error en apertura COM","Error",MB_ICONSTOP);
    }
  else {
//  GetCommState(comhandle, &newDCB);     // Ver valores...

  newDCB.BaudRate = 9600;
  newDCB.ByteSize = 8;
  newDCB.Parity = 0;        
  newDCB.StopBits = 0;  
  SetCommState(comhandle, &newDCB);

  cDB = "Prueba UNO";
  WriteFile(comhandle, cDB.c_str() , cDB.Length() , &nbw, NULL);

  Sleep(1500);

  CloseHandle(comhandle);
  }

13
C++ Builder / Re: Eliminar El Contenido De Un Directorio
« en: Viernes 29 de Julio de 2005, 12:45 »
Espero que no se ofenda Eternal Ido| por responder a lo que ya ha respondido perfectamente.

Simplemente poner otro punto de vista, eviedentemente, en este ejemplo Windows pide la confimación.

{
  String cFd = InputBox("Borrar", "Eliminar ficheros de la Carpeta:", "C:\\Temp");
  if (cFd.Length()>2) {
    cFd += "\\*.*";
    char sfd[MAX_PATH];
    memset( sfd, 0, sizeof(sfd));
    lstrcpyn( sfd, cFd.c_str(), sizeof(sfd));

    SHFILEOPSTRUCT op;
    memset(&op, 0, sizeof(op));
    op.hwnd = Handle;
    op.wFunc =FO_DELETE;
    op.pFrom = sfd;
    op.fFlags= FOF_ALLOWUNDO;
    SHFileOperation( &op);
    }
}

14
C++ Builder / Re: Guardar
« en: Miércoles 27 de Julio de 2005, 12:36 »
Una forma rápida de guardar los datos (no se si es esto lo que necesitas)

{
    TDateTime dN;
    String cDR;
    int nfh;

    nfh = FileCreate("DatosForm.txt");

    cDR = "# Datos Formulario bla,bla (guardados: " +
               dN.CurrentDateTime().FormatString("c") +")\r\n";

    FileWrite(nfh, cDR.c_str(), cDR.Length());

    // Edit1
    cDR = "e1=" + tEdit1->Text +"\r\n";
    FileWrite(nfh, cDR.c_str(), cDR.Length());
    // Edit1
    cDR = "e2=" + tEdit2->Text +"\r\n";
    // ...


     FileClose(nfh);

  }

15
C++ Builder / Re: Posicion Del Edit
« en: Miércoles 27 de Julio de 2005, 12:23 »
La posicion del cursor la puedes obtener con

nPos = Edit1->SelStart;

Ten en cuenta que la posicion es antes de tratar la pulsacion es decir la primera vez obtendras un 0.

Quizas te sea mas comodo programar el evento OnKeyUp

16
C++ Builder / Re: Pasar Archivo Txt A Una Base De Datos
« en: Lunes 25 de Julio de 2005, 19:06 »
Error en el mensaje anterior, para pasar el char a string usar el constructor:

String cLn(buff);


Lo que comenté sobre otras clases para manejo de ficheros es para usar un formato fijo y es la clase TFileStream.

Saludos
Juanma

17
C++ Builder / Re: Pasar Archivo Txt A Una Base De Datos
« en: Lunes 25 de Julio de 2005, 18:33 »
Lo mas comodo es el loadfromfile, pero si quieres leer linea a linea puedes

#include<fstream.h>


//en la funcion
  ifstream myfile;
  char buf[512];


  myfile.open("c:\\test.txt");
  if(!myfile)
   .. error!

  //donde el bucle for del mensaje anterior
  while(!myfile.eof()) {
    myfile.getline(buf, sizeof(buf));
    String cLn = buf;
    // y troceamos el cLn como en el mensaje anterior
    ...
    }
  myfile.close();

Creo recordar que hay lectura de ficheros con clases mas faciles pero no tengo a mano el código.

18
C++ Builder / Re: Borrar Ficheros
« en: Lunes 25 de Julio de 2005, 18:17 »
#include <winbase.h>

DeleteFile("c:\\...");

19
C++ Builder / Re: Desactivar Un Timer
« en: Miércoles 29 de Junio de 2005, 15:19 »
Me temo que tu problemas es otro.
Para desactivar un Timer usa:

Timer1->Enabled = false;

Saludos

Páginas: [1]