• Jueves 7 de Noviembre de 2024, 19:50

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.


Temas - Ziara

Páginas: [1]
1
C++ Builder / Validar edit
« en: Martes 13 de Enero de 2009, 19:57 »
Hola a todos!

Estoy validando datos en los Edit. Si tengo un Edit en donde únicamente quiero introducir números, esta parte la tengo controlada, pero si quiero que que se pueda introducir un máximo de x números?

Para ello ahora mismo tengo algo como esto:

Código: Text
  1. int n = StrToInt(Edit->Text);
  2.      if (n < 0 || n > 10000)
  3.      {
  4.           ShowMessage("Valor incorrecto");
  5.           Edit->SetFocus();
  6.           return;
  7.      }
  8.  

A tiempo de ejecución funciona, pero al introducir un valor numércio grande ej:55555555555 la propia aplicación saca un mensaje de error diciéndo:
Citar
5555555555555 is not a valid integer value

ya que el rango de los int no llega hasta ese valor. Pero me gustaría controlarlo.

¿Hay alguna forma de indicarle al Edit que únicamente se puede introducir 5 valores numéricos?

Gracias.

2
C++ Builder / Saber nombre y tipo de SO de los host de mi red
« en: Martes 23 de Septiembre de 2008, 20:18 »
Hola a todos.

Estoy realizando una aplicación que detecta los host conectados de una red y me preguntaba si mediante la ip de dichos host podría saber de alguna manera dos cosas:

1. El nombre de los hosts de mi red que están conectados.
2. El sistema operativo que utilizan dichos hosts (sólo si se trata de windows o no).

Estoy trabajando en builder6.

Gracias de antemano.

3
C++ Builder / Leer una parte concreta de un fichero txt
« en: Miércoles 9 de Julio de 2008, 20:33 »
Buenas tardes!

Tengo el siguiente código:

Código: Text
  1. while (fgets(linea,sizeof(linea),OutFile) != NULL )
  2.  {
  3.   c = linea[0];
  4.   if (c == "X")
  5.   {
  6.    indice = indice + 1;
  7.    if (indice = index)
  8.    {
  9.     ShowMessage("find");
  10.     ShowMessage(linea);
  11.     fgets(linea,sizeof(linea),OutFile);
  12.     //{
  13.      ShowMessage(linea);
  14.     //}
  15.     break;
  16.    }
  17.   }
  18.  }//while
  19.  

Cuando ejecuto la aplicación, parte la información se me carga en un ListView y otra parte guardado en un fichero txt y lo que pretendo es que cuando pincho sobre una fila del ListView (idenfiticado con la variable index, fila 1 -> int index=1...) me encuentre el bloque de información referida a dicha fila. He puesto en el txt un delimitador de bloque, (cada bloque en el txt empieza por "X") por tanto voy leyendo el fichero y si encuentro una "X" incremento un contador y si ese contador es igual a index he encontrado el bloque de información buscado.

El problema es que no consigo, a partir de encontrar el bloque de información, sacar única y exclusivamente esa información. Tengo puesto un fgets(linea,sizeof(linea),OutFile); dentro del if (indice = index) pero empieza a leer desde la primera linea del fichero.

Como puedo sacar las lineas de información que deseo?

el fichero tiene el siguiente formato:
X
ww
ee
ee
X
er
er
3r
X
et
egt
eg

Las lineas separadas por las "X" forman un bloque de información.

Gracias

4
C++ Builder / Comportamiento extraño al colorear un ListView
« en: Jueves 26 de Junio de 2008, 19:39 »
Hola a todos!

Tengo un ListView en el cual, dependiendo de una condición, las filas se pinta de un color u otro, y todo OK en tiempo de ejecución.

Pero cuando termina de sacarme las filas y desplazo el scroll vertical para mirar las filas que quedan arriba o abajo de la pantalla de visualización del ListView, el color pintado se me desaparece, es decir, se me queda el color por defecto designado, que es el color de las letras en negro y el fondo en blanco.

Me ocurre lo mismo cuando pincho sobre una de las lineas o cuando minimizo la aplicación y la vuelvo a restaurar (me desaparece los colores de las filas, y me dejan las por defecto).

No sé que puede ser...?

Gracias de antemano.

5
Windows / No Puedo Iniciar Windows!!
« en: Lunes 14 de Abril de 2008, 21:10 »
Hola,

he tenido un problema con el windows xp del pc de mesa. Hoy al iniciar windows, me saltó la pantalla del chdisk sin razón alguna, y en el chequeo me dió error así que apagué el ordenador y lo volví a encender.

Después de ellos, no puedo iniciar windows, lo hago en modo a prueba de fallos y aún asi no puedo y me pone lo siguiente:

No se ha iniciado Windows porque el siguiente archivo falta o está dañado:
\WINDOWS\SYSTEM32\CONFIG\SYSTEM

he intentado dede el cd de windows xp, que existe una opción de volver a instalar windows pero dejando todo lo que había, pero esa opción del 25% no pasa y no quiero formatear sin antes haber recuperado ciertos datos.

Hay alguna opción, aunque sea de entrar en windows para recuperar ciertos datos??

gracias

6
C++ Builder / Convertir De Int A Char O Viceversa??
« en: Martes 1 de Abril de 2008, 20:12 »
Hola a todos, a ver si me pueden echar una mano.

tengo un ListView en vsReport, donde con:
Código: Text
  1.  
  2. int index = this-&#62;ListView-&#62;ItemIndex;
  3. index = index + 1;
  4.  
  5.  
pinchando en cada fila/renglón del ListView, puedo saber a cuál pertenece, si pincho en la fila 1, index = 1 y así sucesivamente.

por otra tengo un .txt donde guardo información sobre cada renglón de la manera:

Código: Text
  1. 1
  2. nombre:pepe
  3. edad:14
  4. ciudad:madrid
  5.  
  6. 2
  7. nombre:pepa
  8. edad:25
  9. ciudad:madrid
  10.  

para leer del fichero uso:
Código: Text
  1.  
  2. FILE *OFile = fopen(&#34;fichero.txt&#34;,&#34;r&#34;);
  3. char linea[50];
  4. char c;
  5.  
  6. if (OFile == NULL)
  7. {
  8.  ShowMessage(&#34;Error al abrir el fichero&#34;);
  9. }
  10.  
  11. c = fgetc(OutFile);
  12.  

donde fgetc devuelve el primer caracter leido, en este caso sería c = 1 ya que es el primer caracter del texto.

Lo que quiero es que cuando pinche sobre un renglón me lea justo la información que le toca, es decir, si pincho sobre el renglón 2, empiece a leer desde:

2
nombre:pepa
edad:25
ciudad:madrid

del fichero.txt

para ello he probado con:
Código: Text
  1.  
  2. if (c == index)
  3.       {
  4.        //fgets(linea, 50, OutFile);
  5.        ShowMessage(&#34;son iguales&#34;);
  6.                 //while
  7.  
  8.         }
  9. else ShowMessage(&#34;ein??&#34;);
  10.  

pero nunca se mete en el if, aunque c = 1 y index = 1, he pensando que era por que uno es del tipo char y otro es int, pero al forzar la conversión tampoco funciona.

como puedo convertir un int a un char o viceversa?

gracias.

7
C/C++ / Dudas En Un Tcp Header Struct
« en: Jueves 13 de Marzo de 2008, 20:17 »
Hola, me he encontrado con la siguiente estructura de la cabecera TCP:

# struct tcphdr // structure TCP Header
# {
# //Pour processeur de type little-endian
# unsigned short source; // port source
# unsigned short dest; // port de destination
# unsigned int seq; // Sequence number
# unsigned int ack_seq; // acknowledge sequence
#
# unsigned short res1:4, // Reserved 1 : 4 bits
# doff:4, // Data Offset
# fin:1, // Flag FINISH
# syn:1, // Flag SYNCHRONIZE
# rst:1, // Flag RESET
# psh:1, // Flag PUSH
# ack:1, // Flag ACKNOLEDGE
# urg:1, // Flag URGENT
# res2:2; // Reserved 2 : 2 bits (res1 + res2 = 6 bits reserved)
#
# unsigned short window;
# unsigned short check; // checksum
# unsigned short urg_ptr; // urgent
# };

La parte intermedia:

1 unsigned short res1:4, // Reserved 1 : 4 bits
2 doff:4, // Data Offset
3 fin:1, // Flag FINISH
4 syn:1, // Flag SYNCHRONIZE
5 rst:1, // Flag RESET
6 psh:1, // Flag PUSH
7 ack:1, // Flag ACKNOLEDGE
8 urg:1, // Flag URGENT
9 res2:2; // Reserved 2 : 2 bits (res1 + res2 = 6 bits reserved)

siguiente la estructura que tiene una cabecera TCP, después del unsigned int ack_seq; vendría:

TCP header length (4bits)
6 bits reservados
1 bit de flag URG
1 bit de flag ACK
1 bit de flag PSH
1 bit de flag RST
1 bit de flag SYN
1 bit de flag FIN

entiendo que u_short son 16 bits que engloba el resto (desde la linea 1-9, donde se encuentra la parte intermedia) pero por qué en primer lugar hace res1:4, (creo que eso es que la res1 toma 4 bits) y el último lugar res2:2 si los bits reservados están entre TCP header length (doff) y fin:1??

y creo que el orden de los flags están al revés porque pone que es little-endian puede ser?

3 fin:1, // Flag FINISH
4 syn:1, // Flag SYNCHRONIZE
5 rst:1, // Flag RESET
6 psh:1, // Flag PUSH
7 ack:1, // Flag ACKNOLEDGE
8 urg:1, // Flag URGENT

pero tampoco sé qué implica ello... con little-endian, por ejemplo el campo source port, el primer bit será el menos significativo(LSB)? y al hacer la conversion con ntohs afecta en algo?

gracias por la paciencia.

8
C++ Builder / No Muestra Form1 Al Ejecutarse La Aplicación
« en: Martes 5 de Febrero de 2008, 12:17 »
Hola a tods! tengo una dudilla...

tengo un Form1 en el cuál tengo un botón, mediante el evento OnClick llamo a:

Código: Text
  1.  
  2. Form2-&#62;ShowModal();
  3.  


que me muestra un segundo formulario Form2 que contiene un ListBox1, en el Unit2.cpp:
Código: Text
  1.  
  2.  
  3. void __fastcall TForm2::FormCreate(TObject *Sender)
  4. {
  5.  MiClass * mio = new MiClass ();
  6.  mio -&#62; GetAlgo();
  7.  delete mio;
  8. }
  9.  
  10.  

Con esto, se supone que cuando clickeo al boton del Form1 y me muestra Form2 directamente llama al método GetAlgo de la clase MiClass que está contenido en un Unit3

y en el Unit3.cpp:


Código: Text
  1. void MiClass::GetAlgo()
  2. {
  3.  
  4. ...
  5.    for (        )
  6.    {
  7.     cadena = .....
  8.     Form2-&#62;ListBox1-&#62;Items-&#62;Add(cadena);  //con esto me va me va añadiendo las líneas que haga el for
  9.    }
  10.  
  11.   if (Form2-&#62;ShowModal() == mrOk) //En el Form2 tengo un BitBtn1 con Kind bkOK
  12.    {
  13.      int num=Form2-&#62;ListBox1-&#62;ItemIndex;
  14.  
  15.      if (num==1)
  16.      {
  17.       ShowMessage(&#34;algo&#34;);
  18.      }
  19.      if (num == 2)
  20.      {
  21.      }
  22.   }
  23. ...
  24. }
  25.  


Lo que debería hacer el código es:

1.Ejecutar el .exe
2.Mostrarme el Form1
3.Darle el botón del Form1
4.Mostrarme el Form2 que hace que se ejecute el método GetAlgo() de la clase MiClass
5.Se rellena de lineas el ListBox, seleccionar una de ellas
6.Dependiendo cuál he seleccionado, mostrarme lo que yo quiera.

Pero lo que hace cuando ejecuta el código es mostrarme el Form2, (no el Form1 que es quien debe iniciar la aplicación). Tengo Form1 como MainForm en el menú Project->Opcions->Form->MainForm. Así que eso no es.

Alguien sabe porqué?

9
C++ Builder / Mostrar Datos En Un Tlistview Mediante Un Bucle
« en: Miércoles 23 de Enero de 2008, 10:52 »
Hola a todos, querría saber cómo mostrar datos en un TListView de un bucle for que va generando unos datos, en Builder C++, pongo un ejemplo:

tengo en un Unit2.h

Código: Text
  1. class Recorrer
  2. {
  3.  private:
  4.           String cadena;
  5.  public:
  6.           void FuncionRec();
  7.           String DevCadena(void){return cadena;}
  8. }
  9.  

tengo un un Unit2.cpp

Código: Text
  1. void Recorrer::FuncionRec()
  2. {
  3.     int i;
  4.     for(i=0; i&#60;5; i++)
  5.     {
  6.       cadena = &#34;hola mundo&#34;;
  7.       cadena2=&#34;adios mundo&#34;;
  8.     }
  9. }
  10.  
  11.  

Y ahora en el Form1 del Unit1 agrego el componente TListView y en Unit.cpp:

Código: Text
  1. Recorrer *re = new Recorrer();
  2. re-&#62;FuncionRec();  //llamo a la funcion que contiene el for
  3.  
  4. TListItem *Itema;
  5. Itema = ListView1-&#62;Items-&#62;Add();
  6. Itema-&#62;Caption = re-&#62;DevCadena();
  7. Itema-&#62;SubItems-&#62;Add(re-&#62;DevCadena2());
  8.  
  9. delete re;
  10.  


Pero con lo anterior sólo me muestra el contenido del for una vez, ¿cómo se podría hacer que se mostrase las veces indicadas en la variable i? Porque he visto que hay una propiedad Count de Items que es para cuando recorres un TListView, pero si inicialmente no tengo nada en TListView no tengo nada que recorrer no?

Páginas: [1]