• Jueves 7 de Noviembre de 2024, 19:51

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 - Ziara

Páginas: [1]
1
C++ Builder / Re: Validar edit
« en: Martes 13 de Enero de 2009, 21:06 »
Hola de nuevo!

Gracias por la contestación, lo he estado probando pero no me ha salido con esa propiedad, pero a raíz de ello he dado con esto que me funciona bien.

Código: Text
  1.  if (Edit->Text.Length() > 5)
  2.      {
  3.       ShowMessage("Introduce un valor númerico mejor o igual que 5");
  4.       Edit->SetFocus();
  5.       return;
  6.      }
  7.  

Otra cosilla de validaciones, qué ideas me podeis dar para validar una IP?

Saludosss y gracias.

2
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.

3
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.

4
C++ Builder / Re: Leer una parte concreta de un fichero txt
« en: Sábado 12 de Julio de 2008, 10:21 »
Hola!!

Ya lo solucioné, había un fallo (tonto) en el 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.  [color=#BF0000]if (indice == index)[/color]
  8.  {
  9.   fgets(linea,sizeof(linea),OutFile);
  10.   while (linea[0] != "X")
  11.   {
  12.    fgets(linea,sizeof(linea),OutFile);
  13.    ShowMessage(linea);
  14.   }
  15.   break;
  16.  }
  17. }
  18.  

Principalmente era que la linea en rojo lo tenía como una asignación y no como una comparación...

Ahora tengo otra duda, si al final de cada linea tengo un "/n" y lo quiero quitar, como lo puedo hacer?
Puedo quitar de una linea el último carácter (que este caso sería un "/n")?

Gracias.

5
C++ Builder / Re: Leer una parte concreta de un fichero txt
« en: Jueves 10 de Julio de 2008, 17:24 »
Buenas tardes!

Citar
En ese código te falta buscar los elementos el código deberia ser:

while (fgets(linea,sizeof(linea),OutFile) != NULL )
{
c = linea[0];
if (c == "X")
{
indice = indice + 1;
if (indice = index)
{
AnsiString sLinea;
fgets(linea,sizeof(linea),OutFile);
while (linea[0] != "X"){
sLinea = (!sLinea.Length()?AnsiString(linea):sLinea + "n"+ AnsiString(linea));
fgets(linea,sizeof(linea),OutFile);
}
ShowMessage(sLinea);
break;
}
}

Lo que ocurre es que el código en rojo me saca la primera linea del fichero, y creo que si he llegado dentro del if (indice = index) y al hacer un fgets me debería sacar la línea siguiente de la X encontrada. Esa es mi duda, que no se porque en ese fgets me vuelve a sacar la primera linea del fichero.

Qué estoy haciendo mail?

Gracias

6
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

7
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.

8
Windows / Re: No Puedo Iniciar Windows!!
« en: Martes 15 de Abril de 2008, 18:34 »
Hola de nuevo, no entiendo mucho de esto, podrías explicarmelo más detalladamente o guiarme hasta donde pueda encontra la información?

¿Cómo se pone modo esclavo?

dispongo de un portátil y el pc de mesa que tiene el problema, podré poner el disco como esclavo en el portátil?

de todas formas, mi disco duro del pc de mesa es extraible, y mi padre tiene el suyo propio, con esto podría tener alguna facilidad para colocar mi disco duro como esclavo y el suyo como maestro?

Podrías indicarme los pasos a seguir? es que no tengo mucha idea.

muchas gracias.

9
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

10
C++ Builder / Re: Convertir De Int A Char O Viceversa??
« en: Miércoles 9 de Abril de 2008, 18:59 »
Ok, ya he encontrado la solución, con la ultima forma de convertir el string a int ya lo había probado, pero no podía continuar por ese camino ya que en el fichero tengo letras también, y cuando llegan a ellas builder me lanza un error de que no se puede convertir.

Al final he vuelto a mirar la funcion IntToStr y en vez de poner la condición:

Código: Text
  1. if (linea[0] == IntToStr(index))
  2.  

antes creo otra variable

Código: Text
  1. String c = linea[0];
  2.  
  3. if (c == IntToStr(index))
  4.  

así comparo string con string y no char con string que es lo que pasaba cuando ponia linea[0] en el if.  :o)

11
C++ Builder / Re: Convertir De Int A Char O Viceversa??
« en: Martes 8 de Abril de 2008, 19:48 »
Hola, gracias por contestar, he probado con c_str(), y al compilar builder me lanza el siguiente error:

cannot convert char to *char

así que he puesto:
Código: Text
  1.  
  2. if ((char*)linea[0] == s.c_str())
  3.  

al compilar no me da ningún error, pero aún así no entra en el if. por qué?

12
C++ Builder / Re: Convertir De Int A Char O Viceversa??
« en: Miércoles 2 de Abril de 2008, 20:31 »
Hola de nuevo, ante todo gracias por contestar, he probado con las funciones.

La de StrToInt funciona muy bien:

Código: Text
  1. int cline = StrToInt(linea[0]); //asi convierto el primer caracter de la linea a leer
  2.  

pero luego he visto que cuando leo la segunda linea de mi fichero, que el primer carácter ya no es del tipo 1,2,3 sino una letra, la función me dice que no puede convertirlo a un entero. Con lo cual por ahi no puedo seguir.

Luego he probado con la función IntToStr de la siguiente manera:

Código: Text
  1. int index = this-&#62;ListView-&#62;ItemIndex;
  2. index = index + 1;
  3.  
  4. String s = IntToStr (index);
  5.  
  6. //leer desde fichero
  7. FILE *OutFile = fopen(&#34;PAQUETES.txt&#34;,&#34;r&#34;);
  8. char linea[50];
  9.  
  10. if (OutFile == NULL)
  11. {
  12.  ShowMessage(&#34;Error al abrir el fichero&#34;);
  13. }
  14.  
  15. fgets(linea, 50, OutFile);
  16.  
  17.  if (linea[0] == s)
  18.  {
  19.        ShowMessage(&#34;encontrado&#34;);
  20.        ShowMessage(linea);
  21.  
  22.  }
  23.  else ShowMessage(&#34;error&#34;);
  24.  
  25. fclose(OutFile);
  26.  

pero aqui en el if no entra nunca, aunque linea[0] y s sean iguales... saben porque??

13
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.

14
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.

15
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é?

16
C++ Builder / Re: Ejecutar El .exe
« en: Martes 5 de Febrero de 2008, 12:08 »
Hola,

verás que cuando ejecutas un .exe hecho con builder c++ en otras maquinas el sistema  te va pidiendo unos archivos, ahora mismo no recuerdo cuáles, te bajas dichos archivos de internet y los conolocas en la carpeta de system32 y eso creo que debería funcionar.

un saludo.

17
C++ Builder / Re: Mostrar Datos En Un Tlistview Mediante Un Bucle
« en: Lunes 28 de Enero de 2008, 11:07 »
Hola de nuevo

ya solucioné ese problema, si... es que soy tan lista que no sabía que se tenía que incluir el Unit1.h en la cabecera del Unit2.cpp  :rolleyes: Tengo lo siguiente:

en un Unit2.cpp:

Código: Text
  1. void Recorrer::FuncionRec()
  2. {
  3. int num=0;
  4.      TListItem * Itema;
  5.      for(int i = 0; i&#60;5; i++)
  6.      {
  7.         num++;
  8.         cadena = &#34;hola mundo&#34; + (AnsiString(num));
  9.         cadena2= &#34;adios mundo&#34; + (AnsiString(num));
  10.         Itema = Form1-&#62;ListView1-&#62;Items-&#62;Add();
  11.         Itema-&#62;Caption = cadena;
  12.         Itema-&#62;SubItems-&#62;Add(cadena2);
  13.  
  14.      }
  15. }
  16.  

y en un Unit1.cpp llamo a la función:

Código: Text
  1. Recorrer *re = new Recorrer();
  2.  
  3. re-&#62;FuncionRec();
  4.  
  5. delete re;
  6.  

tal y como está ahora el código, hasta que no termina de hacer las cinco iteraciones no aparece en el ListView1 los datos, es decir, que sale "todo de golpe, las cinco iteraciones".

Pero yo quiero que vaya saliendo las iteraciones una a una, a media que se vaya ejecutando el código, dicho de otra manera, cuando se ejecuta la primera iteración, que aparezca ya el primer renglón en el ListView, cuando se ejecuta la segunda que aparezca el segundo reglon y así sucesivamente. ¿Alguna idea?

gracias

18
C++ Builder / Re: Mostrar Datos En Un Tlistview Mediante Un Bucle
« en: Miércoles 23 de Enero de 2008, 13:57 »
El fallo está en que en:

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.  

se va machacando las variables cadena y cadena 2 por lo cual cuando en el Unit1 se llama a:

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.  

únicamente muestra la última iteración en el ListView.

Hay alguna forma en un for de preservar los mismas variables sin que se machaquen y así poder mostrarla en el ListView, o si no... alguna alternativa?

19
C++ Builder / Re: Mostrar Datos En Un Tlistview Mediante Un Bucle
« en: Miércoles 23 de Enero de 2008, 12:48 »
Hola de nuevo y gracias por contestar tan rápido,

Citar
haber, si no creo mal, tienes una funcion llamada recorrer, con un bucle for. El bucle se ejecuta unas 5 veces y cada vez haces q cadena valga "hola mundo" y cadena2 "adios mundo". Si haces una traza veras q si i=0, cadena="hola mundo", cadena2="adios mundo"; i=1, cadena="hola mundo", cadena2="adios mundo"; i=2...

Cierto, es lo que hace la funcion FuncionRec que es un método de la class Recorrer.

Citar
Si quieres q lo muestre cada vez q entres al for, tendras q poner el ListView1->Items... dentro del for.

Vale.. eso lo pillo, pero el problema es que la class está de un Unit2 y el Formulario (Form1) que contiene mi TListView está en un Unit1 y si incluyo las declaraciones del ListView en el Unit2 me da el siguiente error:

[C++ Error] Unit2.cpp(1): Unable to invoke Code Completion due to errors in source code


Tiene que haber alguna forma de mostrar los cinco reglones en el TListView del Unit1 llamando a la función que está en Unit2 no? alguna idea?

Espero haberme explicado bien.

20
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]