Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - Serapis

#851
Invocándola como cualquier otra función... con su nombre y parámetros obligatorios.

ejemplos:
Código ( vb) [Seleccionar]

dim x as integer, v as integer, Total as integer
v= 12

' Llamada con asignación.
x = Sumar(5,v)

' Llamada como subrutina y no como función. 'Total' sería un parámetro pasado por referencia...
Call SumaYSigue(5,v,Total)

' Lllamada como parámetro de otra función:
call Msgbox Sumar(5,v)
x = Restar(sumar(5,v),11)


' 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 ( vb) [Seleccionar]

Call SumaYSigue(5,v,Total)
SumaYSigue 5, v, Total


Tú mismo tienes en tú código llamadas a funciones como:
Código ( vb) [Seleccionar]

Printer.Print Txtnum.Text
Printer.EndDoc    '   'enddoc' es una función o sub del objeto printer, igual que 'print'
SendMessageArray List1.hwnd, LB_SETTABSTOPS, 4, lbtab(1)


Vamos que sorprende una pregunta así...
#852
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 ( vb) [Seleccionar]


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...
   dim filas as long
   dim ultimafila as long
   dim k as long, j as long, anchocol as integer
   dim linea as string
   din fuente as stdfont


   set fuente = printer.font
   printer.fontname =  "Courier New" ' una fuente monoespaciada, si no el trabajo es más laborioso...
   filas = ((lista.listcount +1) \ numcols)
   ultimafila = ((lista.listcount +1) mod numcols)  ' columnas que tendrá la última fila.
   AnchoCol = ((AnchoPapel  - MargenIzquierdo )\numcols)

   
   for k = 0 to filas -1
        ' obtener la línea de texto en x columnas.
       linea = ConcatenarCols(lista, j, NumCols, NumCols, Margen, AnchoCol, Alineacion)
        ' imprime el texto de la línea
       printer.currentx = Margen
       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.
       imprimir linea ' <----- mejor imprimir linea a línea
   next

   if (ultimafila > 0) luego
       ' obtener la línea de texto en x columnas (con las columnas que resten).
       linea = ConcatenarCols(lista, j, UltimaFila, NumCols, Margen, AnchoCol, Alineacion)
       ' imprime el texto de la línea
       printer.currentx = Margen
       printer.currenty = (printer.currenty + printer.textheight("t"))  
       imprimir linea
   end ifi

    set printer.font = fuente
end function


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
   dim k as integer, s as string, cols as string

   for k = j to (j+cols)
       col = Formatear(lista.list(k), AnchoCol, Alineacion)  
       s = (s & col)
   next

   ConcatenarCols = s
end function

' Recordar que usamos una fuente monoespaciada, porque sino el trabajo es mucho más laborioso...
private function Formatear(Texto as string, byval Ancho as integer, byval Alineacion as AlineacionHorizontal) as string
   dim k as integer, j as integer, s as string
   
   k = (Ancho - printer.textwidth(texto))
   j = (k \ printer.textwidth(" ")) ' siendo monoespaciada, da igual que carácter sea...
   
   if (Alineacion  = IZQUIERDA) then
       if (k > 0) then   ' añadir espacios...
           s = (Texto & space$(j))
       elseif (K < 0) then  ' cortar texto.
           s = (left$( Texto, len(texto) + j)) ' j es negativo, luego la suma, resta...
       else
           s = texto
       end if
   elseif (alineacion = CENTRO) then
       '  ' Solo consideor alineación izquierda, el resto quedaría a tu esfuerzo
   else ' DERECHA
       '  ' Solo considero alineación izquierda, el resto quedaría a tu esfuerzo
   end if

   Formatear = s
end function


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 ( vb) [Seleccionar]

private function ListarEnColumnas(byref lista as listbox, byval numCols as integer, byval MargenIzquierdo as integer, byval AnchoPapel as integer)
   dim filas as long
   dim ultimafila as long
   dim k as long, j as long, i as integer, n as integer, anchocol as integer
   dim linea as string
   din fuente as stdfont
 

   set fuente = printer.font
   printer.fontname =  "Courier New" ' una fuente monoespaciada, si no el trabajo es más laborioso...
   filas = ((lista.listcount +1) \ numcols)
   ultimafila = ((lista.listcount +1) mod numcols)  ' columnas que tendrá la última fila.
   AnchoCol = ((AnchoPapel  - MargenIzquierdo )\numcols)

   
   for k = 0 to filas -1  
       n = Margen              
       for i = 0 to numcols -1
           printer.currentx = n  ' imprime el texto de la columna 'i'
           imprimir lista.list(j+i)
           n = (n + AnchoCol)
       next
       
       j = (j+NumCols)
       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.
   next

   if (ultimafila > 0) then' la última fila tiene 1 o más columnas, pero menos que 'numcols'.
       n = Margen              
       for i = 0 to ultimafila -1
           printer.currentx = n  ' imprime el texto de la columna 'i'
           imprimir lista.list(j+i)
           n = (n + AnchoCol)
       next
   end if

    set printer.font = fuente
end function


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
#853
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
#854
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.
#855
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'...
#856
Software / Re: Ejecutar actualizacion BIOS erronea
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.
#857
Ahora se autoconectará a internet, hasta las monedas y billetes que tengamos, cada libro, revista o bolígrafo vendido... incluso los botones de la camisa (por si acaso se te rompe, uno puede automáticamente buscarte un/a costurero/a, una tienda donde comprar otro botón igual o el precio de los mismos.

...y mientras las empresas intentanto sembrar en los gobienros la tenebrosa necesidad de las distintas velocidades en internet, para que los más ricos paguen más por lo mismo y los más pobres no puedad hacer nada, que les resulte más costoso que el tráfico generado por una máquina exprendedora de tabaco...
#858
La TDT por partes... o como sacar tajada unos y sufrir otros cada pocos años, con algo absurdo y simple de solucionar de una sola vez.
#859
En principio parece razonable para algunos, pero en general es ridículo.
Los dominios que un país pueda necesitar debieran estar todos hospedados en el dominio .gob y punto...

Así gobienrodesespaña.com o gobiernodeespaña.net o gobiernodeespaña.es no importaría, los ciudadanos deberían saber que solo los dominios .gob deberían ser los válidos para cualquier institución gubernamental de cualquier país.
Ningún ciudadano podría usar esos de modo particular, ni los gobiernos debeieran usar otros que no fueran .gob

Para burlarlo... y ver lo ridículo que es (dada las posibilidades combinatorias), no aparece recogido: reinoSdeespana (en plural)... así como tampoco: reinaDEespaña ni monarcaDEespaña, comunidadDEmadrid, etc, etc, etc... para ser exhaustivos, exigiría una lista de decenas o cientos de miles de combinaciones...

A su vez las denominaciones de origen y marcas, sería también muy fácil evitar que sean ocpadas si se creara un dominio específico para ellas, de modo que cuando alguien quisiera registrar su web, al solicitar el nombre y dominio, solo se debería otorgar si demuestra que en efecto están en posesión de denominación de origen (caso de ayuntamientos, o cooperativas por ejeplo)...
#860
Cita de: El_Andaluz en 28 Septiembre 2020, 23:57 PM
No sabía yo que una cafetera se pudiera hackear. :P
Todo lo que tenga conexión inalámbrica es factible de forzarse su acceso y a partir de ahí controlarla remotamente.

El problema es la nula seguridad que se les otorga por parte de los fabricantes. Que menos que unos simples botones que por ejemplo bloqueen la escritura de datos.

Si por ejemplo programas la cafetera para crear un nuevo tipo o modo de hacer café u otro líquido, sería razonable que una vez hecho el programa se pudiera bloquear su acceso.

Mucho me temo que los propios fabricantes son los más interesados en no hacer una seguridad ni activa ni pasiva, porque seguramente son ellos los primeros que acceden a tales trastos (quizás solamente leyendo), para recoger datos del uso de la máquina...

Mientras no haya leyes que obliguen a hacer una seguridad férrea y que pase controles y tengan garantía o que directamente hagan responsables a los fabricantes de los daños ocasionados en tales casos, seguiremos viendo 'ejemplos' con menos o mayor maldad de hackeos a diestra y siniestra.