elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado:


  Mostrar Mensajes
Páginas: 1 ... 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 [140] 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 ... 436
1391  Programación / Programación Visual Basic / Re: imprimir list1 en: 5 Octubre 2020, 16:08 pm
Cuando escribes código 'al vuelo', es normal que se escape algún error... en ese punto, lo que importa es escribir y avanzar, sin importar si se ha escapado algún error, es luego cuando lo traslada uno al IDE, que a medida que lo pegas o redactas de nuevo que al tiempo vas repasando el código y los errores o cambios a efectuar saltan rápido a la vista.

Si ves trabajar a un escultor (por ejemplo)... en primera instancia hará un rebaje general que dé forma a la figura que trata de hacer, pero nunca será un acabado (salvo que se trate de una pieza muy pequeña)... tendrá que volver a repasar todo afinando cada detalle que lo precise.

...al programar cuando tengas solvencia, pasa lo mismo, escribes código o pseudocódigo, a veces mezclado, para escribir rápido la idea y cuando lo transcribes a código es cuando repasas cada detalle y lo afinas al caso concreto presente. De hecho a veces es común invocar funciones que ni siquiera has creado, pero cuya funcionalidad queda descrita en su nombre y resulta superfluo en primera instancia perder tiempo en escribirla o describirla... de hecho las funciones 'ConcatenarCols' y 'Formatear' no iba a realizarlas, precisamente porque entiendo que estás aprendiendo, es que las he abordado...

Ya te decía que 'Todo el código es genérico, requiere adaptación al caso concreto y retocar algunas cosas...', porque hay detalles que dependen exclusivamente del caso concreto, y por tanto no hay una solución única válida para todos los casos... y por lo mismo una función générica que pueda ser fácilmente adaptada a cualquier caso, es la mejor opción.

p.d:
De hecho... una vez que todo funciona sin errores, todavía se puede dar un último repaso cuyo cometido es optimizar. Cuando describes una idea no procede pensar en detalles para hacerla óptimo, porque pierdes tiempo, es solo el momento de describir la idea, describir el funcionaiento general, la optimización es la fase final... (en medio es escribir el código y lograr que funcione exactamente como se espera). Los aprendices suelen omitir la primera y última fases, es normal...
1392  Programación / Programación Visual Basic / Re: imprimir list1 en: 5 Octubre 2020, 16:01 pm
... mensaje duplicado
1393  Seguridad Informática / Seguridad / Re: He perdido un archivo importante en: 5 Octubre 2020, 03:06 am
Antes de retirar la unidad de su conexión, hay que decirle al sistema que quieres retirarlo, para que escriba el buffer a disco. Después que lo desconectes el fichero estará ahí.

En las propiedades de la unidad, para la próxima elige la opción 'desconectar seguro', para que en lo posible no utilice cachés en memoria y que escriba directamente a disco... (elige seguridad frente a rapidez, cuando la unidad vayas a usarse constantemente para escribir y elige rapidez cuando solo vayas a leer de dicha unidad).

Si la aplicación utilizada guarda copia de lo que editas cada cierto tiempo, puede que se conserve... busca en la carpeta del programa con el que lo editaste a ver si hay suerte y sigue constando en un fichero temporal.

Si no es el caso, puedes optar por lo ya comentado en mensajes previos... probar a ver si hay en la unidad una copia vieja del mismo fichero borrada con anterioridad.
1394  Programación / Programación Visual Basic / Re: imprimir list1 en: 5 Octubre 2020, 02:47 am
Tienes que adaptarla... el copy-paste, no siempre va a ser la solución...
Si entiendes lo que hace y conoces un poco el lenguaje no es nada complicado adaptarlo a exactamente lo que necesites según lo que tienes...

* Revisando, se ha escapado un gazapo, que cualquiera que entiende el código lo vería rápido (lo he corregido y comentado en el mensaje más arriba).
1395  Programación / Programación Visual Basic / Re: imprimir list1 en: 4 Octubre 2020, 20:38 pm
Invocándola como cualquier otra función... con su nombre y parámetros obligatorios.

ejemplos:
Código
  1. dim x as integer, v as integer, Total as integer
  2. v= 12
  3.  
  4. ' Llamada con asignación.
  5. x = Sumar(5,v)
  6.  
  7. ' Llamada como subrutina y no como función. 'Total' sería un parámetro pasado por referencia...
  8. Call SumaYSigue(5,v,Total)
  9.  
  10. ' Lllamada como parámetro de otra función:
  11. call Msgbox Sumar(5,v)
  12. x = Restar(sumar(5,v),11)
  13.  

' Las instrucción 'call' es opcional, pero si se añade, los paréntesis de la función son obligatorias... es decir estas 2 sentencias son equivalentes:
Código
  1. Call SumaYSigue(5,v,Total)
  2. SumaYSigue 5, v, Total
  3.  

Tú mismo tienes en tú código llamadas a funciones como:
Código
  1. Printer.Print Txtnum.Text
  2. Printer.EndDoc    '   'enddoc' es una función o sub del objeto printer, igual que 'print'
  3. SendMessageArray List1.hwnd, LB_SETTABSTOPS, 4, lbtab(1)
  4.  

Vamos que sorprende una pregunta así...
1396  Programación / Programación Visual Basic / Re: imprimir list1 en: 4 Octubre 2020, 19:01 pm
Básicamente tienes que concatenar el contenido, para formar tú mismo las 4 columnas como una solo string, o bien imprimir en la misma línea reposicionado el cursor...

Puede danrse diferentes casos. Por ejemplo;
- A - Que el ancho de las 4 columnas sea superior al del papel.
- B - Que el ancho de las 4 columnas sea notablemente inferior al del papel
- C - Que una de las columnas sea muy superior al resto y al final las 4 no quepan en el papel.
- D - Que el listbox tenga 4 columnas, pero no tenga ítems suficientes para las 4 columnas (una o más están vacías).
- E - Que el listbox acabe teniendo más de 4 columnas (lo que sucederá cuando añadas más ítems o acortes el alto dle control).
- F - Que en un listbox, con x columnas, la última no tiene porque tener los mismos ítems que las previas ya que un listbox, es una lista que al llegar a cierta cantidad de altura continúa en otra columna, es decir no es un 'grid', donde el número de filas y columnas discurren independientemente.

Lo ideal es tener solución para todos los casos y dado el presente, decidir cuál de ellos se da y qué solución se aplica.

Tratándose de un listbox, el reparto horizontal es automatico sin posibilidad de cambio y distribuye los elementos en columna a medida que tocan el alto del listbox, (requiere tener la propiedad IntegralHeight = TRUE), tampoco hay control sobre qué ancho se le da a la columna, que además es el mismo para todas.

Es decir, nótese que hablamos de una lista (un listbox, técnicamente  solo tiene 1 campo a pesar de que se muestre en varias columnas), luego la alineación, fuente, ancho de columna, color de tinta, etc... es solo uno y el mismo para todo), no hablamos de un grid, donde cada columna es un campo y puede tener propiedades distintas... incluído el tipo de datos que aloja (no solo texto).

Lo ideal es repartir proporcionalmente las 4 columnas al ancho del papel (salvo que fueren columnas cuyo ancho textual para cada ítem sea muy corto, en cuyo caso sería preferible añadir más columnas), para ello, hay que crear una función que concatene el número de textos cuyo número de columnas se requiere y que además considere la alineación.
Además por simpliicidad, en vez de proceder como hace VB6, donde deposita (por ejemplo): lunes, martes, miércoles, jueves, viernas, sabado, domingo... debajo uno de otro, es preferible hacer una transposición, y poner en la primera fila: lunes, martes, miercoles jueves, en la segunda viernes, sabado, domingo... etc...

Código
  1.  
  2. private function ListarEnColumnas(byref lista as listbox, byval numCols as integer, byval MargenIzquierdo as integer, byval AnchoPapel as integer, byval alineacion as AlineacionHorizontal[izquierda, centrada, derecha])  ' entiéndase, no quiero perder tiempo escribiendo una enumeración...
  3.    dim filas as long
  4.    dim ultimafila as long
  5.    dim k as long, j as long, anchocol as integer
  6.    dim linea as string
  7.    din fuente as stdfont
  8.  
  9.  
  10.    set fuente = printer.font
  11.    printer.fontname =  "Courier New" ' una fuente monoespaciada, si no el trabajo es más laborioso...
  12.    filas = ((lista.listcount +1) \ numcols)
  13.    ultimafila = ((lista.listcount +1) mod numcols)  ' columnas que tendrá la última fila.
  14.    AnchoCol = ((AnchoPapel  - MargenIzquierdo )\numcols)
  15.  
  16.  
  17.    for k = 0 to filas -1
  18.         ' obtener la línea de texto en x columnas.
  19.        linea = ConcatenarCols(lista, j, NumCols, NumCols, Margen, AnchoCol, Alineacion)
  20.         ' imprime el texto de la línea
  21.        printer.currentx = Margen
  22.        printer.currenty = (printer.currenty + printer.textheight("t"))  ' el textheight depende de la fuente seleccionada en la impresora, no importa el texto entre paréntesis... es fijo para la  fuente.
  23.        imprimir linea ' <----- mejor imprimir linea a línea
  24.    next
  25.  
  26.    if (ultimafila > 0) luego
  27.        ' obtener la línea de texto en x columnas (con las columnas que resten).
  28.        linea = ConcatenarCols(lista, j, UltimaFila, NumCols, Margen, AnchoCol, Alineacion)
  29.        ' imprime el texto de la línea
  30.        printer.currentx = Margen
  31.        printer.currenty = (printer.currenty + printer.textheight("t"))  
  32.        imprimir linea
  33.    end ifi
  34.  
  35.    set printer.font = fuente
  36. end function
  37.  
  38.  
  39. private function ConcatenarCols(lista as listbox,indice as long, byval cols as integer, byval maxCols as integer, byval X as integer, byval AnchoCol as integer, byval Alineacion as AlineacionHorizontal) as string
  40.    dim k as integer, s as string, cols as string
  41.  
  42.    for k = j to (j+cols)
  43.        col = Formatear(lista.list(k), AnchoCol, Alineacion)  
  44.        s = (s & col)
  45.    next
  46.  
  47.    ConcatenarCols = s
  48. end function
  49.  
  50. ' Recordar que usamos una fuente monoespaciada, porque sino el trabajo es mucho más laborioso...
  51. private function Formatear(Texto as string, byval Ancho as integer, byval Alineacion as AlineacionHorizontal) as string
  52.    dim k as integer, j as integer, s as string
  53.  
  54.    k = (Ancho - printer.textwidth(texto))
  55.    j = (k \ printer.textwidth(" ")) ' siendo monoespaciada, da igual que carácter sea...
  56.  
  57.    if (Alineacion  = IZQUIERDA) then
  58.        if (k > 0) then   ' añadir espacios...
  59.            s = (Texto & space$(j))
  60.        elseif (K < 0) then  ' cortar texto.
  61.            s = (left$( Texto, len(texto) + j)) ' j es negativo, luego la suma, resta...
  62.        else
  63.            s = texto
  64.        end if
  65.    elseif (alineacion = CENTRO) then
  66.        '  ' Solo consideor alineación izquierda, el resto quedaría a tu esfuerzo
  67.    else ' DERECHA
  68.        '  ' Solo considero alineación izquierda, el resto quedaría a tu esfuerzo
  69.    end if
  70.  
  71.    Formatear = s
  72. end function
  73.  

Si estás completamente seguro que no se dan los casos etiquetados al comienzo como: 'A' y 'C', puede hacerse más directo (menos código, pero más ineficiente) y en general puede cambiarse cosas aquí y allá según el caso concreto de que se trate...

Código
  1. private function ListarEnColumnas(byref lista as listbox, byval numCols as integer, byval MargenIzquierdo as integer, byval AnchoPapel as integer)
  2.    dim filas as long
  3.    dim ultimafila as long
  4.    dim k as long, j as long, i as integer, n as integer, anchocol as integer
  5.    dim linea as string
  6.    din fuente as stdfont
  7.  
  8.  
  9.    set fuente = printer.font
  10.    printer.fontname =  "Courier New" ' una fuente monoespaciada, si no el trabajo es más laborioso...
  11.    filas = ((lista.listcount +1) \ numcols)
  12.    ultimafila = ((lista.listcount +1) mod numcols)  ' columnas que tendrá la última fila.
  13.    AnchoCol = ((AnchoPapel  - MargenIzquierdo )\numcols)
  14.  
  15.  
  16.    for k = 0 to filas -1  
  17.        n = Margen              
  18.        for i = 0 to numcols -1
  19.            printer.currentx = n  ' imprime el texto de la columna 'i'
  20.            imprimir lista.list(j+i)
  21.            n = (n + AnchoCol)
  22.        next
  23.  
  24.        j = (j+NumCols)
  25.        printer.currenty = (printer.currenty + printer.textheight("t"))  ' el textheight depende de la fuente seleccionada en la impresora, no importa el texto entre paréntesis... es fijo para la  fuente.
  26.    next
  27.  
  28.    if (ultimafila > 0) then' la última fila tiene 1 o más columnas, pero menos que 'numcols'.
  29.        n = Margen              
  30.        for i = 0 to ultimafila -1
  31.            printer.currentx = n  ' imprime el texto de la columna 'i'
  32.            imprimir lista.list(j+i)
  33.            n = (n + AnchoCol)
  34.        next
  35.    end if
  36.  
  37.    set printer.font = fuente
  38. end function
  39.  

Todo el código es genérico y requiere adaptación al caso concreto y retocar algunas cosas... por ejemplo es típico tener que pelearse con el 'scalemode'... Margen y AnchoPapel (y por extenson anchoCol) son dependientes de dicho valor, así como TextWidth y TextHeight, CurrentX y CurrentY... Si no se opera para todos con la misma escala, hay desajustes.

editado:
donde ponía: imprimir lista.list(j+n)  <---- imprimir, si el objeto es la impresora, sería: printer.print
debe poner: imprimir lista.list(j+i)
Faltaba restablecer la fuente al final d ela función: set printer.font = fuente
1397  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Está muriendo el foro? en: 2 Octubre 2020, 18:58 pm
Para empezar, algo obvio es que: Cualquier tecnología empieza a morir desde el momento en que nace.

Es habitual que sistemas peores subsistan a sistemas más eficaces y mejores (ahí están los ejemplos de Betamax frente al VHS, o el BlueRay frente al DVD)... las causas suelen ser circunstanciales, a menudo la publicidad influye mucho, la moda atrae a los más jóvenes que por lo general desconocen otras 'ofertas' de mejor calidad, guiados más por el hecho de que sus amistades, también lo usan y así hablan el 'mismo lenguage', de cosas que conocen, que es una forma universal de no sentirse 'raro' (hacer lo que hacne los demás sin preguntarse por qué ni ofrecer resistencia).

Aquí los jóvenes vienen simplemente a intentar 'sacar las castañas del fuego' cuando están demasiado quemadas, esto es cuando se acerca un examen y no tienen ni idea de como resolver el problema que le han planteado en su escuela/colegio... (no hay más que ver que la mayoría de estos que vienen acaban teniendo rara vez más de 10 mensajes, una vez tiene su respuesta desaparece o quizás vuelva con otro alias, porque no recuerda el previo, algo que suele suceder porque francamente no esperan participar una vez solucionado su problema).

Justamente es el tipo de intervenciones que uno no quiere atender... explicar a  alguien que no tiene interés alguno, que solo quiere aprobar con 'copy paste', sin ninguna necesidad de entender lo que haya puesto.

Detesto las redes sociales, están pensadas para ser usadas compulsivamente y reestructura a la gente para comportarse como el que las diseñó espera... un usuario compulsivo. Además la apertura a casi cualquiera en todo el mundo, acaba suponiendo que cualquiera siempre encuentre una oleada de trolls cuya causa vivendis es fastidiar a diestra y siniestra a todo el que no opine como él. En un foro esto se limita bastante (excepto cuando el troll es algún moderador)... recuerto un troll clásico en los viejos foros de matemáticas de la antigua Terra (a finales de los 90, sigue existiendo?), un tal Paulino, que años más adelante lo acabé encontrando en muchos más foros, con teorías pseudocientíficas sin pies ni cabeza.
Yo por ejemplo la única 'red social' que utilizo es whatsapp porque permite la creación de grupos que en todo caso puede (y debiera) ser restringido a amigos, conocidos, famila, etc... con lo que la aparición de trolls es totalmente limitada o al menos bajo control. Aún así, el 90% de la corriente comunicativa es simplemente 'polvo y paja'... chorradas en definitiva.

Curiosamente el diseño responsive, aunque entiendo que es acertado, no entiendo que deba ser obligado (no me refiero a su existencia, si no a su uso), yo desde el móvil me aburro de cambiar constantemente ciertas páginas web con la acción 'mostrar sitio de escritorio' (que ofrece firefox). Páginas como Wikipedia, dejan fuera de lugar ciertas áreas que al menos a mi, me parece que deberían estar muy presentes, pero para otros puede que no), si se hiciera con el foro, sin duda me tocaría hacer lo mismo cuando lo consultare desde el móvil.
Es decir, cuando se trata de leer, suele ser muy útil, cuando se trata de redactar, francamente no. Un teclado desde el PC es siempre más eficiente que cualquier teclado virtual en el móvil. Pero obviamente el PC no está siempre al alcance de tu mano como sí lo puede estar el móvil, entonces si se trata sólo de ler, el móvil me basta, si hay que dar una respuesta más o menos elaborada, es preferible retrasarlo hasta llegar a casa... si solamente vas a responde algo como: "usa el buscador", pués vale aunque casi es preferible al caso ni responder... se supone que todo el mundo sabe a estas alturas que existenten los buscadores...

Algo en lo que creo que podría ayudar es que los que esperan respuesta inmediata a 'su tema' recibir notificación vía email, cosa con la que foro dispone. No recuerdo qué opciones están activas por defecto, quizás habría que activarlas todo por defecto (para los nuevos usuarios) y si alguien no está conforme indicarle que puede cambiarlo desde su perfil.

Aquí una prueba de la atención. Mensajes largos son leídos solo uno o dos párrafos si no satisfacen ya en ese lo que se busca  se abandona todo el mensaje al completo... a ver cuántos leen este mensaje al completo (que ya queda algo extenso) y cuantos se lo saltan, lo cual sabremos si no han leído este párrafo en concreto (si lo lees escribe 3 letras mayúsculas cualesquiera al final del mensaje sin más explicaciones y sin más motivo que dejar constancia de la lectura del mensaje completo), que sirve de prueba a lo que digo, la inmediatez de lo que se busca en vez de deleitarse en la propia búsqueda que casi siempre trae la grata consecuencia de encontrar alguna respuesta más que sin saberlo ansiabas. Ya no se investiga, se copia y pega.

La mayor razón por la que el foro tenga menos actividad (este año se suma como causa la gripe china), es que la gente que participaba hace 25-15 años en los foros ha crecido, tiene familia y están archiocupados, muchos de los cuales independientemente de esa situación también lo hubieran abandonado, pués para ellos era más que una necesidad o un hobby, era el sitio donde librarse de su aburrimiento cuando en su alrededor todo era inactividad (cosas de la juventud).
...
Por su parte la nuevas juventudes, han nacido ya (por así decirlo), con una consola de juegos y un móvil en la mano... y ninguno de estos cachivaches pondera (ni siquiera menciona) de ninguna forma los foros, sí las redes sociales, las cuales están auspiciadas por empresas más o menos grandes... los foros en cambio tienen detrás a personas individuales, no hay interés económico (al menos como motor primordial de su existencia). Todo esto redunda en la publicidad continua y machacona sobre la cabeza de los niños, que luego llegan a adolescentes y puede que sea entonces cuando sepan de la existencia de algo llamado foro, y que como desconocen les parece cosa de 'dinosaurios', algo arcaico... lo aceptable, es todo eso que les han metido en la cabeza (incluso con dibujos animados).

Por último, está que la gente (joven principalmente y no todos, obviamente) actualmente lo quiere todo inmediato y además para ellos algo obsoleto es algo que tiene 2 o más años, cosa de la que Google es el máximo exponente (esto me recuerda una frase que no recuerdo textualmente exacta y que me pondré por firma, cuando la recuerde), la constante e inútil actualización hace parecer que algo con cierta edad ya no es factible, ya no sirve, lo cual es fácil de demostrar que es erróneo, pués solo suele ser cierto en determinadas y restringidas áreas (generalmente asociadas a la seguridad). Supongo que de cara al foro, esto podría suponer poner más a la vista las secciones más de moda, incluso aunque lueog el número de usuarios interesados no lo sea tanto. Las grandes empresas tecnológicas siempre han explotado como un exponente de su empresa la 'novedad', la 'investigación constante' y toda la parafernalia propagandista que es mera autopompa... IBM, y Telefónica, por ejemplo nunca crean anuncios donde no aparezcan como máxima la palabra 'innovative', 'develope', etc.., en definitiva I+D, que parece la fórmula perenne desde finales de los 80. Algo es innovador lo mejor... pero solo hasta que tengo otro producto que ofrecer como tal que sustituya al previo (da igual si han pasado 2 o 7 años) y con esta fórmula por bandera exhibida a lo largo de dos generaciones, acaba calando como que es cierto.

Y en resumen, yo no creo que el problema de la actividad del foro tenga otra causa que el autoconvencimiento en las nuevas generaciones que el sistema del foro es de dinosaurios, cuando es francamente difícil hallar un modo mas eficaz (y que sea gratuito) para el autodidacta, suplementación de la enseñanza o mejora/ampliación de conocimientos previos. Lo que uno responde queda ahí disponible para todos... pero ya sabeis, en vez de buscar (en esto puedo concordar en que los  buscadores de los foros dejan mucho que desear), los 100 siguientes con la misma duda volverán a hacer la misma pregunta, como si nunca antes hubiera sido preguntada ni respondida o como si 2 o 20 años después ciertas preguntas fueran a tener diferente respuesta. Cuando esto sucede es porque se enfocó mal no diferenciando programación de la plasmación en determinado lenguaje (que si es algo cambiante).

WÑF
1398  Foros Generales / Foro Libre / Re: ¿Alguien tiene experiencia pegando felpudos al suelo? en: 1 Octubre 2020, 15:51 pm
Para asegurarte que queda bien ubicado, traza las dos aristas de una esquina dond eirá el felpudo, coloca algo pesado y recto delimitando sendas aristas, que luego al pegar usas como 'regla' de alineación.
1399  Foros Generales / Noticias / Re: Descubren en Rusia planchas 'espía' con micrófonos ocultos importadas desde en: 1 Octubre 2020, 15:36 pm
Así me gusta... artículos extensos donde se da todo al detalle. (con leer el titular ya has leído la mitad del artículo).

...es igual que la página del corte inglés, se emperrar en cargar las librerías de 'speech'...
1400  Informática / Software / Re: Ejecutar actualizacion BIOS erronea en: 29 Septiembre 2020, 03:01 am
Hay cosas que los novatos nunca deben tocar. La BIOS es una de ellas... es lo mismo que si un estuudiante se cree capacitado para operar a corazón abierto... el resultado suele ser claro: muerte por idiotez.

Si el reloj atrasa, deja que sea el S.O. quien lo controle y lo actualice convenientemente acompasado con algún reloj atómico vía internet...

Además, tú mismo puedes actualizar la fecha y hora desde la interfaz del S.O. , no necesitas acudir a la BIOS, para ello.
Páginas: 1 ... 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 [140] 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 ... 436
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines