• Martes 13 de Mayo de 2025, 05:46

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

Páginas: 1 ... 20 21 [22] 23 24 ... 29
526
VB .NET / Re: Multicolumnas Listbox Vb.net 2005
« en: Lunes 2 de Junio de 2008, 12:59 »
La propiedad multicolumn del listbox no sirve para eso. Multicolumn lo que hace es repartir el listado en las columnas indicadas, ello permite que si se sabe a ciencia cierta que el ancho de los ítemes es pequeño tener una visualización en anchura más cómoda... los ítemes se autorecolocan en función de la altura del listbox. Pasando así de un scroll vertical a un scroll horizontal, en ocasiones bastante más cómodo.

Para lo que señalas lo ideal es el control DataGridView, datagridview se comporta exactamente como deseas, se podría entender como que es un conjunto de listbox trabajando al unísono, con la ventaja añadida de poder añadir un encabezado para cada 'lista'... los elelemtnos de cada lista están aparejados es decir forman una tabla, lo cual lo hace indispensable para manejar las bases de datos especialmente para recibir los volcados de tablas y también es útil para contener datos de estructuras que es lo que parece que tu estás intentando hacer...

Hay varios ejemplos sobre el uso del control datagridview en el foro, muchos sobre una cuestión particular sobre cómo hacer tal cosa.

El datagridview es un control completísimo, tal que se puede afirmar sin problemas que posiblemente nadie sepa totalmente todo sobre el mismo. Básicamente funciona manejando colecciones de filas o columnas  (muy útil con addrange) o ítemes individuales.  Aparte permite una gran personalización del aspecto del mismo.

527
C# / Re: Como Hacer Graficos En Visual C#.net
« en: Domingo 1 de Junio de 2008, 14:35 »
Si no sabes
Citar
expliquenme que es eso de que tengo que utilizar 4 punto para dibujar el cuadrado X1,X2,Y1,Y2 
necesitas un manual y unos conocimientos mínimos antes de tirarte al mar...

No puedes pretender que te expliquuen que es un motor turbopropulsor sin saber previamente que es una rueda o una hélice.

528
VB .NET / Re: Módulos Independientes
« en: Domingo 1 de Junio de 2008, 14:31 »
No abras hilos a lo tonto, anteriormente has preguntado algo muy similar a lo que ya te he respondido, podías continuar preguntando en aquél...

El modo de llevarlo a cabo es tener cada parte como un proyecto.
1 Crea cada parte de modo independiente (basta con el nombre del proyecto y el 'ítem' primario a generar vacío.

2 Una vez creado los proyectos vacíos decide cual es el principal, y abre sólo ese.

3 Desde ese proyecto (pinchando en el solution) del explorador de proyectos, decide 'añadir proyecto' y vas añadiendo el resto de proyectos (siempre podrás cambiar quien es el proyecto principal, aparece marcado en negrita ).

4 Ahora podrás trabajar en cada proyecto de forma independiente, sin embargo deberás añadir al proyecto principal una referencia de cada uno de los otros (si un x proyecto comunica con otro, debes establecer la referencia, por ello el modo en que dividas el 'solution' es proyectos contribuirá a ser menos complejo en referencias, considéralo como un esquema en árbol, cuanto más simple mejor de mantener), aparte de añadir la referencia en el encabezado de cada proyecto que has añadido referencia del otro debes hacer un 'imports elproyectoreferenciado'  para poder usarlo desde el proyecto actual. Nota que la referencia es el vínculo exterios , esto es la localización del archivo en una ruta, el imports es poder usar el namespace del proyecto.
=============

Ahora cuando des a compilar sólo se compila el proyecto actualmente seleccionado si tienes 5 proyectos el principal es el 2, compilas el proyecto 2 y haces cambios en el proyecto 4 que está referenciado desde el 2, al ejecutar el proyecto lo haces sobre la versión compilada del proyecto 4 no sobre el cambio operado en él desde que guardaste el 2. Aprender acontrolarlo te `puede llevar un tiempito, pués verás que si compilas ahora el 4 el proyecto 2 ignora ese cambio (en determinadas situaciones) para ello 'refrescarlo' debes eliminar la referencia del proyecto 4 y volverla a incluir.

Nota que añadir una referencia te conduce a buscar el archivo .exe, dll... de modo que si cambiaste un proyecto pero no lo has guardado estará cogiendo una referencia que no refleja los cambios actuales que es lo que quieres pero que debes tener en cuenta y no olvidar es la ventaja y a la vez el inconveniente.

Si has hecho cambios y ejecutas paso a paso sin actualizar la referencia verás que el cursor se va posicionando extrañamente, ... enrealidad está sobre el código sin cambiar por eso no coincide.... así en modo 'debug' es aconsejable actualizar la referencia del modo indicado...

Desconcierta un poco hasta que te acostumbras y vas reconociendo lo que va sucediendo por detrás...

529
VB .NET / Re: Desarrolladores Simultaneos
« en: Domingo 1 de Junio de 2008, 14:08 »
Lo normal es que cada uno trabajae en un módulo específico esto es, si el proyecto tiene pongamos 20 clases en una clase sólo trabajaría 1 persona a la vez.

Si una clase es tan grande o tan compleja que necesitare que varias personas trabajaran en ella a la vez, su pueden usar clases parciales
Código: Text
  1.  
  2. ' si la clase se llama
  3. public class Miclase
  4.  
  5. end class
  6. ' la clase parcial se llamará...
  7. public partial class MiClase
  8.  
  9. end class
  10.  
  11.  
Ahora trabajar en la misma clase supone compartimentar que métodos debe implementar uno y cual otro, y en todo caso sólo podrá llevarse a cabo cuando las estructuras comunes en toda la clase estén listas, es decir si en el 'reparto' de métodos a cada persona van a compartir variables, estructuras, subclases es preciso que estas se creen previamente para que no se creen copias similares pero distintas por parte de cada programador.

Para controlar el proyecto existe 'Source Safe' no es la panacea pero es mejor que nada la complejidad dependerá del nivel de profundidad en que sea preciso que trabajen varias personas a la vez, para no tener problemas asignar una clase a una sola persona ofrece una complejidad muy manejable, repartir métodos de una clase es un nivel más profundo y más complejo y así a medida que se asignen partes menos específicamente diferenciadas será más complejo de mantener.

En todo caso debe haber un plan de trabajo previo para que todas las partes 'coincidan', supongamos que uno tiene que implementer compresión y elige un método que a él le parece el mejor y pongamos que otro tiene que 'consumir' esa clase que aún no ha sido escrita, pero ha sido definido , existe la posibilidad de que necesite un parámetro previamente no establecido, un plan ayuda a prevenir esto, sin embargo un plan debe entenderse como una dirección no como el camino paso a paso a seguir. La experiencia demuestra que un plan inalterable es un fracaso total porque a medida que se avanza surgen cambios e incluso sin que surjan nuevos cambios el `propio código puede designar variar ligeramente de dirección por la salud futura del proyecto. Se entiende mejor con un ejemplo: Imagina que alguien toma un mapa y traza una línea que es el camino a seguir desde el punto-A hasta el punto-Z, en el plano es fácil trazar líneas y posiblemente la trazada sea la que 'parece' más correcta y más corta, pero a medida que se avanza en el camino podría suceder simplemente que un puente caído días atrás impida atravesar un río y quizás el rodeo sea más grande que si se hubiera elegido previamente un camino ligeramente más largo pero con más alternativas próximas. Si no se está dispuesto a usar un plan sugeto a cambios el trabajo será un completo calvario, la cabezonería de cruzar el río por seguir el plan establecido hará naufragar a muchos y no debe echarse la culpa a dichas personas, que con el puente hubieran marchado sin problemas, el fallo será de quien signa que un plan es inalterable.

El plan de trabajo debe verse como una ayuda, como una guía y en vez de trazar una línea hubiera sido mejor trazar puntos sobre el camino, con la libertad  de que cualquiera puede usar el trazado que estime más oportuno entre 2 puntos, siendo asímismo los puntos como metas de reunión bién estudiados y conocidos libres de fallo. Un grado así de libertad permite que el camino sea cubierto los imprevistos solucionados y el avance progresivo, evita el stress de los programadores porque no existe presión para hacer algo de manera que se sabe antes de empezar que sólo ofrece complicación esfuerzo y que será en vano y el proyecto avanza.

Es muy duro cuando alguien se emperra en que una cosa se haga de una manera que no es acorde a lo que se dispone, un pez nadará, un pájaro volará un topo irá debajo tierra y aunque a cada uno le resulte extremadamente fácil hacer lo que hace ocurre todo lo contrario cuando al pez se le pide que excave, al topo que vuele y al pájaro que nade. Esto en un proyecto es casi el peor enemigo, aún todos capaces se vuelven ineficaces no porque lo sean sino porque se les ha encomendado misiones que de entrada son un fracaso.

530
Inteligencia Artificial / Re: Pregunta Numero Uno. (rna)
« en: Viernes 30 de Mayo de 2008, 15:38 »
Citar
¿si la salida de una neurona es 0, esto significa que esa neurona no hara SINAPSIS con cualquier otra que se encuentre a su costado

No tiene porqué... es sólo información si especializas esa 'neurona' para que sea de control de flujo entonces sí, si no es sólo parte de precesamiento de los datos.

Imagina una fila de neuronas que cada una resuelve exactamente eso, un '0' ó un '1', entonces otra neurona de otro nivel puede tomar la 'palabra' generada por esa fila de neuronas como dato de entrada.

Hay que diferenciar dato como dato,  de dato de control y siempre hablando en términos generales.

Citar
en el caso que la salida sea 1, si se produce la SINAPSIS con otra neurona que este a su costado
Esto también es relativo. Dependerá de como hayas deseado hacer una conexión, quizás hayas establecido una relación de 1 a 3 cuando sea valor 1 y de 1 a 1 cuando sea valor 0 por ejemplo... es decir si ponemos esta regla la neurona enviará su señal a otras 3 cuando sea 1 o sólo a 1 cuando sea 0 (más claro envía señales alas 3 pero sólo a una le envía 0 a las otras 2 le envía 1) en nuestro ejemplo. Nuevamente dependerá de si ese dato forma parte del control o si es el dato específico, a fin de cuentas todo son datos...

531
VB .NET / Re: Controles De J#
« en: Viernes 30 de Mayo de 2008, 13:25 »
Citar
sobre el foro, si se que es de visual basic pero es .net y va muy d ela mano con J# ya que ambos son de visual studio 2005
Si, pero si preguntaras en C# sería más acertado aún... Java desciende de 'C' después de todo.

Una búsqueda rápida por emule me da 27..

532
Visual Basic para principiantes / Re: Skin Que Muestre El Control Image Vb 6.0
« en: Viernes 30 de Mayo de 2008, 12:19 »
Los métodos gráficos se borran con 'cls' así: picturebox1.cls , pero ojo se borra todo lo que tengas en el picturebox. Para borrar de modo selectivo, por ejemplo un cudrado creado antes, habría que repintar otro encima en el mismo sitio  es decir usando la misma sentencia empleada, pero con algunas características que paso a señalarte...

De entrada vamos a trabajar con un cuadrado relleno, así de paso ves que una línea también se puede convertir en un cuadrado y depaso ves como se rellena que es otra cosa que preguntas.
Código: Text
  1.  
  2. ' estructura de tipo punto, par de coordenadas
  3. public type Point
  4.      x as single
  5.      y as single
  6. end type
  7.  
  8. ' dibujamos un cuadrado dados dos pares de coordenadas
  9. Public sub DibujarCuadrado(origen as point, final as point)
  10.       Form1.Line (origen.x, origen.y)-(final.x, final.y), vbRed, BF
  11. end sub
  12.  
  13.  

Bien el código anterior podría ser llamado por ejemplo con la siguiente orden...
Código: Text
  1.  
  2.     ' según tu pantalla modifica estos valores
  3.     dim a as point :   a.x=3000 : a.y=6000
  4.     dim b as point :   b.x=6000 : b.y=3000
  5.     call Dibujarcuadrado(a,b)
  6.  
  7.  
Ahora examinamos el código y comentamos....
En dibujarCuadrado, vemos que empleamos el método line, sin embargo al ejecutarlo se genera un cudrado, porqué.... porque se ha añadido el parámetro 'B'  al final de la línea, ese parámetro le indica que con las coordenadas dibuje un cuadrado, si no estuviera b, dibujaría una línea en 'diagonal' (en diagonal si los pares de x o de y no fueran del mismo valor) desde el punto de la coordenada origen al punto de la coordenada destino. Fíjate que en realidad podemos señalar como origen cualquiera de las 4 esquinas y como final la opuesta, en este caso origen es la esquina izquierda baja, para probarlo comenta la línea de código form1.line justo después de 'vbred' y ejecútalo, ahora ves que la misma rutina puede servirte para dibujar cuadrados y líneas con colo modificarla un poco añadiendo un parámetro que indique eso mismo, lo vamos a hacer, porque el código fuente hace eso mismo así se entenderá mejor como actúa.

Código: Text
  1.  
  2. ' dibujamos un cuadrado dados dos pares de coordenadas
  3. Public sub DibujarCuadrado(origen as point, final as point, optional cuadro as boolean=false)
  4.       if cuadro=true then
  5.             Form1.Line (origen.x, origen.y)-(final.x, final.y), vbRed, BF
  6.       else
  7.            Form1.Line (origen.x, origen.y)-(final.x, final.y), vbRed
  8.       end if
  9. end sub
  10.  
  11. ' para llamarlo ahora para dibujar la línea... tomando los valores anteriores
  12.       call Dibujarcuadrado(a,b) ó también
  13.       call Dibujarcuadrado(a,b, false)
  14. ' para dibujar el cuadrado... se entiende que estas líneas van dentro del código de alguna rutina, por ejemplo de un botón.
  15.       call Dibujarcuadrado(a,b,true)
  16.  
  17.  
Seguimos... el cuadro podrá haberse rellenado o no. Bien tanto el relleno como el grosor de línea como el estilo de relleno como el color de relleno, se controlan a través del contenedor...

El contenedor además de usar el método gráfico contiene los 'fenes' de 'dispersión' de sus métodos gráficos... veamos cómo; ve a las propiedades del  picturebox donde dibujas cambia el valor de la propiedad drawwidth, por ejemplo a 5 así podrás apreciarlo bien, desde código también podrás cambiarlo por ejemplo: picture1.drawWidth=5 si ahora ejecutas verás que lo que cambia es el grosor de línea de borde del cuadrado o del círculo, es importante saber que cuando el grosor de línea es diferente de 1 algunas de las características que comentaremos a continuación se deshabilitan.

De igual modo modo usar 'fillColor' para elegir el color con que se rellena nuestro cuadro, pero ojo esto depende de otros factores, es decir queda alterado por otras propiedades.... por ejemplo 'FillStyle' . FillStyle por defecto es 'transparent' que es la razñon por la cual nuestro cuadro o círculo no se haya rellenado, si lo cambiamos a 'solid' ya se rellena 'de lo que sea, pero se rellena', pruébalo.

Bien si has probado a cambiar el color en fillcolor verás que 'no obedece', ello es porque nosotros hemos fijado VbRed que es una constante de color para definir el color rojo, cambia si quieres el VBREd del line por 'form1.FillColor', fillcolor es el color por defecto para los métodos gráficos cuando no se especifica color y el color no es obligatorio, si es obligatorio pero se ignora, entonces color es 0, es decir negro.

Más cosas... como borrar de modo selectivo... ya dijimos que si usas cls, se borran todos los métodos gráficos (en realidad redibuja todo el contenedor de nuevo, los píxeles que no constan memorizados por tanto se pierden que es lo que sucede con los métodos gráficos (salvo que tengamos autoredraw a true, que guarda copia del 'fondo' ), bien para borrar de modo selectivo hay que usar algún  método que consista en dejar algo como anteriormente estaba, te explicaré 3 métodos el primero es universal vale para todas las situaciones, es lo que hace el sistema pero nosotros a 'pequeña escala'

método 1: si vamos a cubrir una zona, antes de cubrirla hacemos copia de la sección a ocupar luego la cubrimos como queramos, cuando queramos restaurarla pegamos la copia que hicimos. Esto plantea 1 problema que pasa si hacemos sucesivos cambios en la misma zona... cada vez hacemos una copia de un trozo, eso significa que vamos guardando mucha información... este método si te fijas es lo que se hace para las opciones 'deshacer' de los programas gráficos, para nosotros puede ser un problema si no deseamos tener un control tan férreo , pués nos obligaría a tener un 'historial de copias' en una matriz, dicha matriz de imágenes la tendríamos que usar como cola tipo último en entrar primero en salir, para garantizar que se usa correctamente, sin embargo podríamos hacer trampa en esa cola y poder decidir que podemos usar directamente la del fondo eliminando eso sí el resto, es decir de un plumazo podríamos volver al primer cambio. Tu decides si implementas esto o no, seguramente como principiante no te atrevas, pero toma nota para el futuro. sin embargo si podrás tomar aunque sólo sea la 1ª vez no generar una amtriz, sino solo una.

método 2: El segundo método es más cómodo, se lo dejamos al sistema, pero no tendremos un control tan potente de decisión deberemos adaptarnos y conocer bien como funciona si no nos dará bastante trabajo, pero en principio es muy sencillo de usar. Establece la propiedad picture1.DrawMode=7 (Xor pen), por defecto es 13, CopyPen que es más o menos lo que se ve es lo que hay . Una operación Xor tiene una particularidad muy interesante al ejecutarlo hace algo al ejecutarlo nuevamente sobre el mismo valor anterior con el resultado anterior devuelve el estado anterior, con un ejemplo en palabras (no es exacto, vale, lo que pretendo es que lo entiendas sin perder tiempo en buscar una 'traducción exacta). imagina que tenemos 2 palabras: 'Barranco' y 'Ardgchfkl' , supongamos que al hacer un xor entre ambas palabras nos da este resultado: 'mgjrdisu' bien pués si ahora hacemos un xor entre este resultado y cualquiera de los 2 anteriores obtenemos justamente el otro que no hemos usado, es decir si hacemos xor con:
'mgjrdisu'  xor 'Barranco' = 'Ardgchfkl'  y si hacemos:
'mgjrdisu'  xor 'Ardgchfkl'  = 'Barranco'

Es decir después de un par de xor obtenemos nuevamente una copia exacta del original (ya te he dicho que el ejemplo es sólo para entender el concepto), pués eso es lo que haremos con nuestro DrawMode.. ahora ejecuta de nuevo dibujar el cuadro con fillStyle=0 (sólido), fillcolor y drawwidth como quieras, pero con DrawMode=7, cada 2 ejecuciones verás que se restaura, por tanto podrás mover tu círculo después de restaurado, por tanto es un 'cls' selectivo.

Esta técnica del xor se usa para casi todo, para los 'backBuffer' y en vídeo, donde sólo se redibujan los píxeles que cambian respecto de la imagen anterior, con lo que se redibuja una imagen más rápidamente. Este método conjunto con el anterior produce los mismos resulados que el anterior sólo pero ahorrando memoria empleada a base de un cálculo más complejo, en ocasiones es inevitable que algún píxel 'se pierda' lo cual habrás visto muchas veces en los programas en que algo gráfico cambia y parece que no se restablece... Para evitar estas situaciones el S.O. intenta que no se tenga acceso directo a los controladores de vídeo, y cuando esto deba suceder el S.O. entrega el 'poder' diciendo, eah, la pantalla es toda tuya, haz lo que necesitas... y así se entra en el modo 'pantalla completa' salvaguardando el resto de gráficos aparte, eso evita que éste corrompa a áquel si compartieran buffers en memoria.

método 3: Como todo esto no deja de tener cierta complejidad, es más cómodo usar un control que permite todo esto , un cuadro y un círculo a través de una propiedad, el control shape, el control shape es un control ligero como son los métodos gráficos, pero además posee toda esta funcionalidad de la que hemos estado hablando de forma independiente respecto del contenedor, es decir si antes decíamos picture1.drawWidth=5 porque queríamos que el grosor de un círculo fuera mayor veremos que también las nuevas líneas toman ese ancho, controlarlo implica establecer contínuamente de nuevo el valor, pués todas las acciones comparten el mismo valor, es lógico pues son propiedades y acciones del picturebox, sin embargo quita flexibilidad o mejor dicho añade complicación en un momento dado pudiéramos habernos perdido al no haber guardado el estado de algo en una variable específica. El control shape nos salva de esta complejidad pero con cierto límite... sin embargo todas estas propiedades que hemos descrito se usan por igual con el control shape, podría decirse que el control shape es un 'extracto' de los métodos gráficos, como ya te he explicado someramente sus propiedades solo me falta indicarte que definir un cuadro o un círculo se establece a través de su propiedad shape asi: shape1.shape=2 (óvalado). y finalmente ver que como todos los controles tiene medidas esto es top, left, width y height que son el par de coordenadas que usábamos para dibujar un picture1.line por ejemplo. Un control shape puede actuar como un control line si su porpiedad width  ó heigth (una sola a la vez tiene valor unitario), si nembargo para eso es mejor el conttrol line, el control line si se maneja con pares de coordenadas ya que 'carece' de alto y ancho, así se emplea x1,x2,y1,y2. Se entiende que traducir width y height a una coordenada final no tiene misterios, por eso lo he tratado tal como si fuera en si mismo una coordenada.... una licencia inocente...

Un punto importante cuando usar shape (ó line) y cuando usar métodos gráficos: aunque el control shape (y line) es mucho más cómodo de manejar que y controlar que los métodos gráficos tiene sus límites, por ejemplo si se ha de dibujar 400 cuadrados sin duda no interesa crear 400 controles shape. Imagina la siguiente situación:

coloca un timer en el formulario llámale TimCudros, establece interval a 200 y enabled a true, añade un botón  llamado 'Command1' pega el siguiente código en la ventana de código y ejecútalo....
Código: Text
  1.  
  2.  
  3. Private Sub Command1_Click()
  4.     TimCuadros.Enabled = Not TimCuadros.Enabled
  5. End Sub
  6.  
  7. Private Sub TimCuadros_Timer()
  8.     Dim coor(0 To 3) As Single ' esto es x1,x2,y1,y2 en ese orden
  9.     Dim veces As Integer, colorRnd As Long
  10.     Dim limite As Single   ' límite de ancho o de alto
  11.     Dim drawmodo As Byte   ' para cambiar el drawmode del contenedor
  12.     
  13.     ' el número 50 limita el máximo
  14.     veces = Int(((50 - 0 + 1) - (1)) * Rnd) ' este si debe estar fuera, signa el bucle
  15.     
  16.     ' estas 2 líneas si se meten dentro del bucle se cambia con cada cuadro dibujado
  17.     drawmodo = Int(((15 - 1 + 1) - (1 + 1)) * Rnd + 1)
  18.     Me.DrawMode = drawmodo
  19.     For v = 1 To veces
  20.         For k = 0 To 3   ' tomamos coordenadas aleatroiamente
  21.             If k Mod 2 = 0 Then
  22.                 limite = Me.Width  ' es decir x1 y x2
  23.             Else
  24.                 limite = Me.Height  ' es decir y1 e y2
  25.             End If
  26.             coor(k) = Int(((limite - 0 + 1) - (1)) * Rnd)
  27.         Next
  28.         colorRnd = Int((((2 ^ 24 - 1) - 0 + 1) - (1)) * Rnd)
  29.         
  30.     
  31.        Form1.Line (coor(0), coor(1))-(coor(2), coor(3)), colorRnd, BF
  32.     Next
  33. End Sub
  34.  
  35.  

Como puedes ver so ejecutaste el código, para cosas donde existe un número incierto de objetos o que es excesivamente grande es mala idea tener controles shape o line o circle, desde luego podríamos meterlos en una matriz para maenjarlo conjuntamente en vez de uno a uno por su nombre, pero que hacemos con ellos si de repente ya no los necesitamos...los podemos eliminar, pero si más tarde los volvemos a necesitar habráque volverlos crear.

Entonces de modo general si un gráfico no tiene un fin muy determinado y es finito en el tiempo es mejor usar métodos graficos, si por ejemplo creamos un contro, activex que tiene una forma rara y queremos darle un sombreado perimetral es mejor usar el método line para dibujarlo que el control line, las líneas no son persistentes, entonces todo lo que tendríamos que hacer es colocar el redibujado en el rutina 'paint' del control activex, cada vez que se redibuje se crearán las líneas, y se redibuja cada vez que se coloca en primer plano o se expone parte de él aemás de cuando lo llamamos explícitamente con control.refresh o desde el código interno al mçétodo 'paint'.

Para terminar... se puede crear una estructura que refleje el comportamiento similar al shape pero usado desde los contendores, esto es ya sabemos que propiedades utiliza el contendor para los métodos gráficos, a saber:
Código: Text
  1.  
  2. public type MiShape
  3.      ' Nombre as string  ' se podría usar para identificarlo por nombre en vez de por índice
  4.      DrawMode as DrawModeConstants  ' se pueden usar en la forma vbXorPen...
  5.      DrawStyle as DrawStyleConstants
  6.      DrawWidth as byte
  7.      FillColor as long
  8.      FillStyle as FillStyleConstants
  9.      X1 as single
  10.      X2 as single
  11.      Y1 as single
  12.      Y2 as single
  13.      Operacion as boolean  ' true=dibujar, false=borrar
  14.      HdcContenedor as long  '(el HDC del contendor) para saber a quien pertence.
  15. end type
  16. dim Shapes() as MiShape
  17. dim tmp as Mishape   ' para cambios temporales
  18.  
  19.  

Bien con esta estructura y parte de los métodos que ya describimos más arriba podríamos usarlo desde los contendores, para manejar cada línea cicculo ocuadro que manejemos, por ejemplo si queremos dibujar un círculo rellenamos los valores en un índice de la estructura, y llamamos a la rutnina dibujarCirculo (que sería similar a la que pusimos más arriba DibujarCuadro) pero con 1 parámetros más, el índice del control, entonces tendríamos otra rutina que sería dibujarlo en otro lado, esta rutina recibiría el parámetro 'x' que identifica el índice y las nuevas coordenadas y lo que haríamos dentro de esa rutina sería borrar shapes(x) de su ubicación actual  cambiar valores de posición según parámetros entrados y llamar a la rutina de dibujado....

Como ahora nuestro gráficos tiene valores asignados y por tanto hay 'memoria' de ellos podremos ahorrarnos el autoredraw, del contenedor y lo que haríamos sería colocar dentro del evento Paint del formulario un bucle que llamara a redibujar todos los 'objetos' que hay dentro de neustr matriz Shapes()
Código: Text
  1.  
  2. Private Sub Form_Paint()
  3.     Me.Line (3000, 6000)-(6000, 3000), Form2.FillColor, BF ' ejemplo a falta de otra cosa...
  4.    for k=0 to ubound(Shapes)
  5.        call Dibujar_MiGrafico(k)    ' esta funcion sería para redibujar cuanlquier gráfico en la matriz con sus valores actuales, por tanto le bastaría con usar un identificador, en este caso el índice...
  6.    next
  7. End Sub
  8.  
  9.  


Claro que todo esto último se haría mejor como una clase para controlar todos sus métodos y no confundirse y mezclarse con el código del formulario, o mejor aún en un control activex, con lo cual ya tendríamos una emulación del control shape pero con la particularidad de que podríamos condicionarlo a nuestras necesidades, por ejemplo para crear polígonos dado el nº de lados.

nota final: los métodos gráficos sólo se rellenan si están cerradas, si por ejemplo usas un arco no se cierra, a no ser que lo 'tapes' con una línea... line se rellena con el parámetro BF, la B indica que es un cuadro no una línea y la F que se rellena...

533
VB .NET / Re: Controles De J#
« en: Jueves 29 de Mayo de 2008, 17:16 »
Tu pregunta no puede tener respuesta, decirte nombres de controles no resuelve ningún tipo de problema. El foro es para resolver dudas puntuales, lo tuyo es una duda absoluta.

Necesitas un manual de principiante, busca alguno por la red o compra un libro pequeño y barato, tiempo tendrás de buscar uno más avanzado.

De todas maneras este foro de Visual BASIC no de J#

534
VB .NET / Re: Necesito Crack O Serial De Dexperience 2007
« en: Jueves 29 de Mayo de 2008, 17:11 »
Esto es un foro de programación, no un foro de piratería, te has equivocado de sitio...

535
Visual Basic 6.0 e inferiores / Re: Convertir Ascii A Ebcdic (comp3)
« en: Jueves 29 de Mayo de 2008, 16:35 »
A ver, creo que ta respondí, usando la tabla de conversión deberías poder crear tu rutina (NOTA: la tabla está mal nombrada en realidad es la conversión de ASCII a EBCDIC y no al revés como la he nombrado).

Corríjeme si me equivoco... el tipo de dato comp-3 está codificado en BCD.

Si es así implica que los números del 0 al 9 están en binario, esto es usando paquetes de 4 bits por cada dígito más otro paquete para el signo del nº. Entonces 000=0 ; 0001=1 .. 1001=9  en cuanto al signo creo recordar que se usa 1100 para positivo y 1101 para el negativo, aunque esto a veces podía variar el signo es siempre el paquete de la 'derecha' es decir el menos significativo... si la cifra no tiene signo se usa 1111 para indicarlo.

Luego no indicas si los valores son sólo packed o zoned, asumo que a falta de una indicaciónmás precisa son packed, entonces resolvemos los valores:
si tu número es entero puete tener entre 1 y 16 bytes
para valores aritméticos pueden tener entre 1 y 31 bytes
cada byte contiene 2 dígitos decimales (en BCD como se explicaba antes) excepto el byte de signo (que siempre es el de menor peso), en dicho caso el signo está a la derecha del todo.
a la izquierda podrás colocar los 'ceros' que necesites...

ejemplo:
Código: Text
  1.  
  2.     decimal (en decimales)          - comp3 (en hexadecimal)                 - comp3 en binario
  3.            - 4782                              04 78 2D                    0000.0100  0111.1000 0010.1101
  4.                      traducción:            4  7 8 2 signo
  5.  
  6.  


un posible código podría ser algo como esto:
Código: Text
  1.  
  2. Public BCD(0 To 12) As String ' 10 dígitos más los '3' signos, positivo negatvo y sin signo
  3.  
  4. ' asignamos la matriz BCD de una vez ...para sucesivos usos
  5. Private Sub Form_Load()
  6.     Call AsignarMatriz_BitBCD
  7. End Sub
  8.  
  9. ' se invoca en el load del formulario...
  10. ' se toman como valores decimales de '0' ó '1'
  11. Public Sub AsignarMatriz_BitBCD()
  12.     BCD = Split("0000\0001\0010\0011\0100\0101\0110\0111\1000\1001\1100\1101\1111", "\") ' 0-9, +, -
  13.    ' ahora añadimos la parte alta de cada valor mirar tabla de conversión, valores 30-39 ASCII corresponden a valores F0-F9 en EBCDIC:
  14.     for k= 0 to 11
  15.          BCD(k)="1111" & BCD(k)
  16.      next
  17.     ' NOTA:  también puedes desactivar este bucle y probar ...
  18. End Sub
  19.  
  20. ' los datos tomados de fichero y convertidos a cadena
  21.  ' la cadena debe recibirse en este formato :  "+xxxxx..." ó "-xxxxx..."  cuando tiene signo y "xxxx..." si es sin signo, es decir, si es preciso ' debe filtrarse por otra rutina para añadirse el '+' a las cadenas que lo requieran
  22.  
  23. Public Function Convertir_DecimalaComp3(cadena As String, optional  CerosAañadir as integer =0) As String
  24.         ' si la cadena es sin signo, añadimos ahora el signo * delante sólo para tratar la cadena en el paso posterior
  25.     dim digno as string
  26.    signo= Left$(cadena, 1)
  27.     If signo <> "-"  and signo <>"+" Then cadena = "*" & cadena
  28.     
  29.     ' llamamos a la conversión
  30.    cadena = ConvertirDecBin_ASCIIaEBCDIC(cadena)
  31.  
  32.    ' si necesitamos añadir 'ceros' a la izquierda es el momento de hacerlo'
  33.    for k =0 to CerosaAñadir
  34.        cadena= BCD(0) & cadena
  35.    next
  36.  
  37.    ' y lo devolvemos
  38.     Convertir_DecimalaComp3 =cadena
  39. End Function
  40.  
  41.  
  42. ' trabajamos desde números decimales a binario como srting, tanto de entrada como salida
  43. Private Function ConvertirDecBin_ASCIIaEBCDIC(cadena As String) As String
  44.     ' las cadenas ya en esta rutina se deben recibir con el siguiente formato:
  45.     '   "+xxxxx..." ó "-xxxxx..." "*xxxx..." es decir con el signo '+' '-' o sin signo '*' que hemos colocado a discreción, si es preciso ' debe filtrarse por otra rutina para añadirse tras ser tomado de fichero a las cadenas que lo requieran
  46.     Dim salida As String
  47.     ' anulado pasamos directamente a binario ' Const menos = "D": Const mas = "C" ' ó "F"
  48.     Dim x As Byte
  49.     For k = 2 To Len(cadena)   ' empezamos por el 2 carácter... el signo lo dejamos para el final
  50.        x = Int(Mid&(cadena, k, 1))
  51.        salida = salida & BCD(x)
  52.     Next
  53.    '  añadimos el signo a la parte correspondiente
  54.     dim signo as string
  55.     signo= Left$(cadena, 1)
  56.      if signo="+" then
  57.          x=10
  58.      elseif signo="-" then
  59.          x=11
  60.      else
  61.         x=12
  62.      end if
  63.     salida = salida & BCD(x))
  64.     ' ya tenemos convertido la cifra en formato binario pero como valor de string.
  65.    ConvertirDecHex_ASCIIaEBCDIC = salida
  66. End Function
  67.  
  68.  

Posiblemente no te funcione tal cual y debas hacer modificaciones, yo no tengo aquí nada con que probarlo y hacer correciones, para ello necesitarás probarlo con el mainframe... Si no consigues resolverlo a pesar de todo, en un foro de Cobol seguramente te podrán prestar algo más de ayuda.

...ya nos contarás como te fue...

p.d. se me olvidaba... fíjate que la conversión BCD del 0 al 9 están localizados en la tabla ASCII desde el 30h (48  en decimal es el dígito para el 0) hasta el 39h (57 en decimal=9 en ASCII) siendo los valores para EBCDIC = F0 hasta el F9 , por lo que he añadido una nota en la asignación de la matriz BCD por si quieres intentar desactivando el bucle, comentándolo... para limitar esta situación.

536
Visual Basic para principiantes / Re: Skin Que Muestre El Control Image Vb 6.0
« en: Jueves 29 de Mayo de 2008, 13:55 »
No estoy muy seguro de a qué llamas 'graficar una línea'.... pero por suponer...

Hay otra cosa que debes saber, si te fijas el control image no tiene borde, entonces cuando metemos el control image en un control picturebox justo del mismo tamaño, en efecto puede verse que se tapan algunos pixeles por cada lado, esto es debido a que por defecto el picturebox si tiene borde.

Este marco puede quitarse si se desea estableciendo la propiedad borderstyle: picturebox1.borderstyle=0 ...esto quita el marco y en consecuencia deja ver esa línea de píxeles inferior superior y laterales que tapaba, que son 4 píxeles por cada lado lo que ocupa el 'marco'.

...pero si con graficar quieres decir que antes pintabas una línea en la parte superior del control image (lo que debía hacerse en realidad sobre su contenedor que era el formulario, ahora la situación no ha cambiado, ahora puedes dibujar esa línea sobre el control picturebox directamente. Al respecto hay que saber alguna cosa: Los controles se organizan por capas, que son niveles de profundidad, básicamente se consideran 3 capas (y cada capa puede tener tantos niveles como controles se ponga) . La métodos gráficos están en la capa media, por ejemplo si hacemos un Picture1.Line (0, 0)-(Picture1.Width, Picture1.Height), vbBlue  nos traza una línea azul en diagonal (si no llega de esquina a esquina es porque scalemode no está establecida a vbpixels, los métodos gráficos sólo trabajan con píxeles ellos no entienden los 'twips') si previamente hemos colocado por ejemplo un textbox dentro del picture que cruce la diagonal imaginaria, veríamos que se 'corta' donde se cruza con el textbox. Esto es porque el textbox tiene un nivel de profundidad inferior a los métodos gráficos. es decir está en primer plano. En cambio el control image está en la capa más baja, eso significa que la línea que hicimos atraviesa por encima de esa imagen.

Los controles comunes (aquellos que tienen una propiedad HDC o Handle) son de primer plano, los del fondo son los que no tienen esta propiedad, por ejemplo el control image, el control shape el control line o el control label. y los de la capa media son los métodos gráficos, esto es cuando manipulas píxeles directamente por ejemplo.
Código: Text
  1.  
  2. print ("Hola")
  3.  
  4. print ("Hola 2");
  5.  
  6. print ("Hola 3") ,
  7.  
  8.  
  9. form1.line (0,0)-(20,40), vbred
  10.  
  11. ' coloca un button y mete este codígo dentro de su 'click'
  12. Private Sub Command1_Click()
  13.     Const colorMax = (2 ^ 24) - 1
  14.     Dim colo As Long
  15.     
  16.     Me.Cls
  17.           
  18.   For v = 500 To 2000 Step 20
  19.     For k = 1 To 10000 'HScrRayo.Value
  20.         colo = colorMax - ((((v * k) Mod colorMax) + k) Mod colorMax)
  21.         Form1.PSet (100 + ((v Mod k) * 30), 100 + ((k Mod 30) * (v Mod k))), colo ' vbRed
  22.     Next
  23.     DoEvents
  24.   Next
  25.    End Sub
  26.  
  27. ' tambi´´en puedes probar con 'circle'.
  28.  
  29.  

Entonces cuando quieres hacer algo encima de un control debes conocer previamente a qué capa pertenece....

No hay que confundir los métodos gráficos con los controles gráficos, el control line produce un resultado muy parecido al método line, pero el control line es un auténtico control, no se 'borra' al colocar algo encima aunque si se puede tapar, sin embargo existe en memoria, un método gráfico es situar píxeles y olvidarse de ellos, no se hace un 'memorizado' sobre ellos salvo que se establezca la propiedad autoredraw a true del contendor donde están... si se hace eso,  por ejemplo entonces  los controles gráficos se sobreponen sobre los métodos gráficos. es decir se redibujan los controles después del fondo.

Aparte puedes usar el control line y el más polifacético y práctico control shape....
Pero vamos por lo que entiendo que dices tu 'linea' ha sido tapada por el marco del picturebox que son 4 píxeles de perímetro sobre el control... y en cualquier caso cuando antes hacía form1.line ... para colocar una línea sobre el control  image ahora debes hacer picturebox1.line... pero en cualquier caso sigue siendo contendor.line siendo contendor el contendor donde está el objeto. Si en el control picturebox quieres colocar una línea encima del image necesariamente será en el píxel -1, los pixeles de coordenadas negativas no se ven, eso significa que si tu línea tiene pongamos 8 píxeles de grueso, deberás poner tu control image así: image1.top=8, y así desde el píxel 0 hasta el 7 puedes usarlo para poner esa línea. Naturalmente esos pixeles que has despalazado la imagen hacia abajo, debes tenerlas en cuenta para las modificaciones del picturebox (se supone que el picturebox lo ajusta al tamaño de la imagen).

537
VB .NET / Re: Unir Dos Imagenes Bit A Bit
« en: Miércoles 28 de Mayo de 2008, 14:59 »
BitBlt es una API, muy similar al funcionamiento del paintpicture... pero es ligeramente más rápido...

Código: Text
  1.  
  2. Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
  3.  
  4.  

'dwRop' es una constante de vb6 de las que hay en 'RasterOpConstants' típicamente se usa vbSrcCopy, que es la que equivale a 'copiar lo que se ve en origen tal como se ve'.

ejemplo de uso:
Código: Text
  1.  
  2. Dim ret As Integer
  3. ' sea frm el formulario, (el destino de la imagen, un objeto que tiene propiedad HDC) , x e y son las coordenadas de destino, dx y dy son las dimensiones de destino, pic es un picturebox, 0 y 0 son las coordenadas de origen donde copiamos, si se omiten el siguiente par de parámetros se entiende que se toma ancho y alto de origen como esos valores.
  4.  
  5. ret = BitBlt(frm.hDC, x, y, dx, dy, Pic.hDC, 0, 0, vbSrcCopy)
  6.  
  7.  
Modificando los parámetros por valores negativos convenientemente se consigue una copia invertida verticalmente, etc..

El logo debe estar en un picturebox al que se le ha aplicado transparencia, o bien en un formulario con transparencia usa la aPI siguiente:
Código: Text
  1.  
  2. Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
  3.  
  4.  
busca ejemplos del uso de la API en el foro si no se encuentran busca en google...

538
Visual Basic para principiantes / Re: Skin Que Muestre El Control Image Vb 6.0
« en: Miércoles 28 de Mayo de 2008, 13:01 »
Bien, te cuento...

De entrada saber el nombre del ocx no te soluciona tu problema, pero hay formas de solucionarlo, sigue leyendo y te explico 3 maneras de hacerlo... (2 muy parecidas entre sí).
 
El control Image tiene una propiedad llamada 'Strecht' si la pones a true, la imagen se ajusta al tamaño del control image... así modificas el tamaño del control, la imagen se adapta ditorsionándose si es preciso para rellenar el control image.

El control picturebox se comporta de forma muy distinta, el control picturebox, tiene una propiedad llamada 'autosize' si la activas lo que sucede es que en vez de la imagen ajustarse al control como sucedía con el control image, es el control el que se ajusta al tamaño de la imagen.

Yo sólo uso el control picturebox para mostrar imágenes cuando necesito usar ciertas funcionalidades como usar el método paintpicture o el savepicture, o cuando necesites incluir más controles para que actue como contenedor que es. Si no es así uso el 'image' usa menos recursos en memoria.

Entonces para resolver tu problema hay 3 formas la más sencilla de manejar es incluir dentro del control picturebox un control image, y cuando quieras redimensionar el picturebox, haces lo propio con el control image dentro de él. Para trabajar con la imagen dentro del picturebox te debes referir a ella con su porpiedad 'image' no 'picture' esto es asi: picturebox1.image  ...

El otro método es usando el método paintpicture y requiere el uso de 2 controles picturebox, el primero contiene la imagen que deseas con la propiedad establecida a autosize=true, este picturebox está oculto 'invisible=true', ahora cuando queramos modificar el tamaño del picturebox que nos interesa modificamos su tamaño, y con el método paintpicture 'pegamos' la imagen del picturebox oculto en las coordenadas que nos interese del picturebox que nos interesa. Siempre que modifiquemos el picturebox destino, deberemos hacer un paintpicture desde el oculto hacia aquel, por tanto el oculto tiene la imagen tal como se ha recibido de donde sea que se tomare. Debes darte cuenta que este método pega una imagen no persistente, es decir si colocas una ventana encima verás que la imagen se 'pierde', para evitar que esto suceda lo que se debe hacer es activar la propiedad 'autoredraw=true' con ello lo que internamente hace es guardar una copia de la imagen contenida ' image' en memoria, de modo que cuando se exponga la superficie del picturebox, y sea invocado el repaint, redibuja el área expuesta con el contenido que tenía...  

El terce método es similar a este 2º pero no pegamos la imagen cada vez que cambiamos el pictureboxdestino, sino sólo lo pegamos 1 vez, luego nada más transferir el gráfico no persistente al picturebox hacer algo como: picturebox1.picture=picturebox1.image , con lo que consigues que ya tenga su propiedad picture dispuesta. Supongamos que ahora quiero modificar el tamaño, antes que nada regojo sus medidas actuales, luego modifico el tamaño del control y mediante paintpicture siendo el mismo el origen y el destino, y tomando como coordenadas de tamaño origen las que guardamos, pegamos la imagen al área del picturebox, nuevamente haremos un picturebox1.picture=picturebox1.image. Este método 3º sin embargo tiene bastantes inconvenientes por lo que sólo debería usarse cuando no quede otro remedio, por ejemplo si pegas la imagen sin rellenar todo el área nueva, la imagen se 'monta' encima de la existente, esto es útil en determinadas situaciones pero porbablemente en muchos casos no sea lo que se quiere hacer. Por tanto te recomiendo que uses el método 1 ó el 2. Este 3º método también se puede usar cuando no te interesa activar autoredraw por alguna razón (por ejemplo si dibujas encima de él), ya que si activas 'autoredraw' los gráficos no persistentes se fijan como gráfico, y por tanto si dibujaste un círculo encima de la imagen se mantiene y sólo puede ser borrado cuando la imagen es rescrita por otra. Un g´rafico no persistente puede borrarse siempre con 'picturebox1.cls'.

Estos 3 mecanismos bien usados son suficientes para controlar cualquier gráfico dentro de un picturebox. Una cosa más... si por ejemplo quieres modificar el tamaño del picturebox, de modo que la imagen se ajuste al picturebox pero manteniendo las proporciones originales, (no deformándose como nos sucedía en el control image), deberás guardar la proporción original de los píxeles (el alto con respecto al ancho), así cuando aumente el alto del picturebox, x pixeles, el ancho deberá aumentar 'x* proporción'

... te explico esto de la proporción. supongamos que nuestra imagen tiene 15x10 píxeles, entonces la proporción es ancho/alto= 15/10=1'5 entonces ahora cada vez que cambie el ancho por ejemplo 22 píxeles el alto deberé cambiarlo 22/1'5 o al revés si lo que quiero es modificar el alto en 47 pixeles el ancho deberé modificarlo así: 47* 1'5 naturalmente añadido al tamaño que ya tiene.... por tanto créate un variable picturebox1_Proporcion que debes actualizar cada vez que alojas una nueva imagen....

539
VB .NET / Re: Duda Con Splashscreen
« en: Martes 27 de Mayo de 2008, 11:58 »
Es más sencillo de lo que pueda parecer.

1 ) Añade un módulo e incluye en él una rutina 'main'
Código: Text
  1.  
  2. public sub main
  3.  
  4. end sub
  5.  
  6.  

2 ) Ahora ve a las propiedades del proyecto e indícale que la carga inicial se hace desde 'Main'.

3 ) Ya carga el proyecto desde main, esto sirve para que llames al formulario es decir tu 1ª instrucción debería ser form1.show (ojo no hagas un form1.showdialog)

4 ) En la carga de formulario no debería haber código, o al menos no código pesado, para que arranque lo rápido que tu quieras.

5 ) Al término de carga de tu formulario, se regresa al main, ahora procesa todo eso que deseas, es decir debes trasladar todo eso que haces en el formulario principal en el evento load a una rutina del módulo main o del propio formulario... supongamos que hasta ahora lo tienes en el load: tomas ese código y lo metes en una rutina de nombre por ejemplo :
Código: Text
  1.  
  2. public function carga_Previa() as boolean
  3.    ' el código que quieres ejecutar...
  4. end function
  5.  
  6.  
Entonces en main lo que haces es una llamada a esa rutina, pero justo después de que el formulario se ha cargado completamente y está visible.

Así te quedaría al final algo como:
Código: Text
  1.  
  2. public sub main
  3.     form1.show
  4.     call    form1.carga_Previa
  5. end sub
  6.  
  7.  
No se te ocurra poner en el main debajo de la instrucción de llamada a la funcion carga_Previa la instrucción end, porque el programa se cerraría, en 'end' sólo debe ponerse cuando se arranca desde 'main' pero el formulario es modal es decir se lo llamó como: 'form1.showdialog', que al caso no nos vales porque tenemos que ejecutar una rutina justo tras ser cargado el formulario. Aunque  siempre podríamos hacer esto otro:
 
Código: Text
  1.  
  2. public sub main
  3.     form1.show
  4.     call    form1.carga_Previa
  5.     form1.showdialog
  6.     end
  7. end sub
  8.  
  9.  
Pero lo veo redundante....

Si necesitas algún acondicionamiento previo a la llamada del formulario, posiblemente necesites 'traspasar' declaraciones de variables desde el formulario al módulo, para que estas estén disponibles antes de que se cargue el formulario.

540
VB .NET / Re: Unir Dos Imagenes Bit A Bit
« en: Martes 27 de Mayo de 2008, 11:41 »
No se hacen tareas, ni se envían trabajos al correo de nadie. En cuanto al uso de funciones está disponible la MSDN en español en la página de Microsoft.

Luego no especificas si lo que quieres es fundir 2 imágenes en 1 sola o si lo que quieres es añadir una segunda imagen al final (o encima) de la primera.

Si es lo 2º lo puedes hacer en un 'periquete', tanto en vb6 cono en vb2005: De entrada coloca tu 'logo' en un picturebox, y la imagen primaria en otro picturebox, ahora con el método bitblt o paintpicture (en vb6) copias el contenido del pictureboxLogo al pictureBoxDestino en las coordenadas que quieras, conlas medidas que quieras. Esto no demora ni 5 minutos ni 2 minutos, es instantáneo salvo que las imágenes tengan cientos de Mb. , que imagino que no es el caso.

Lo acorde es que el logo tenga transparencia para no generar imágenes demasiado intrusivas, entonces si usas VB6 esto deberías hacerlo usando una imagen GIF por ejemplo.

Si quieres trabajar a nivel de bit, debes usar las APIs para tener un tiempo de respuesta aceptable, procesarlo en memoria y sólo cuando esté el resultado final listo volcarlo a un control de imagen o a fichero. Después podrás importar el proyecto a vb2005 y ver la lista y consejos de conversión que te ofrece , para futuras referencias o para inentar mejorarlo. Personalmente trabajando con imágenes me siento más cómodo con VB6, siento que es más rápido...aunque no he explorado todo el potencial de vb2005 en cuanto a imagen se refiere...

541
Visual Basic para principiantes / Re: Skin Que Muestre El Control Image Vb 6.0
« en: Martes 27 de Mayo de 2008, 11:17 »
¿ Puedes explicarte mejor ???.

A qué llamas: 'saber si hay algún skin' ???
Que quieres decir con: 'que muestre un control image' ???
Qué quieres decir con: 'no puedo modificar el sistema' ???
....y que quieres decir con: 'cuenta con un mapa de muchas coordenadas' ???

La verdad, te leo y no de qué cojones estás hablando: de programación, de aplicaciones, de personalizar tu S.O. del robot de las estrellas .... , incluso me pareciera entender (de rebote) que quieres saber el nombre del OCX que maneja el control image... pero... con esas palabras no logro entender que quieres.

Explícate mejor, dedícale 5 minutos, no 20 sg. Unforo no es un teléfono celular, no te cuesta cada palabra que pones, no ahorres. aquí ahorrar palabras es ganarse que pasen de tu mensaje porque no se entiende qué quieres...

542
Visual Basic 6.0 e inferiores / Re: Convertir Ascii A Ebcdic (comp3)
« en: Martes 27 de Mayo de 2008, 11:07 »
Ignoro para que lo necesitas exactamente.
Aún conservo por ahí esta tabla, quizás te sirva.

Tabla_Ebcdic_Ascii:
Código: Text
  1.  
  2. "\x00\x01\x02\x03\x37\x2D\x2E\x2F\x16\x05\x15\x0B\x0C\x0D\x0E\x0F" ' 00-0F
  3. "\x10\x11\x12\x13\x3C\x3D\x32\x26\x18\x19\x3F\x27\x22\x1D\x35\x1F" ' 10-1F  
  4. "\x40\x5A\x7F\x7B\x5B\x6C\x50\x7D\x4D\x5D\x5C\x4E\x6B\x60\x4B\x61" ' 20-2F
  5. "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\x7A\x5E\x4C\x7E\x6E\x6F" ' 30-3F  
  6. "\x7C\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xD1\xD2\xD3\xD4\xD5\xD6" ' 40-4F
  7. "\xD7\xD8\xD9\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xAD\xE0\xBD\x5F\x6D" ' 50-5F  
  8. "\x79\x81\x82\x83\x84\x85\x86\x87\x88\x89\x91\x92\x93\x94\x95\x96" ' 60-6F
  9. "\x97\x98\x99\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xC0\x4F\xD0\xA1\x07" ' 70-7F
  10. "\x43\x20\x21\x1C\x23\xEB\x24\x9B\x71\x28\x38\x49\x90\xBA\xEC\xDF" ' 80-8F  
  11. "\x45\x29\x2A\x9D\x72\x2B\x8A\x9A\x67\x56\x64\x4A\x53\x68\x59\x46" ' 90-9F
  12. "\xEA\xDA\x2C\xDE\x8B\x55\x41\xFE\x58\x51\x52\x48\x69\xDB\x8E\x8D" ' A0-AF
  13. "\x73\x74\x75\xFA\x15\xB0\xB1\xB3\xB4\xB5\x6A\xB7\xB8\xB9\xCC\xBC" ' B0-BF  
  14. "\xAB\x3E\x3B\x0A\xBF\x8F\x3A\x14\xA0\x17\xCB\xCA\x1A\x1B\x9C\x04" ' C0-CF
  15. "\x34\xEF\x1E\x06\x08\x09\x77\x70\xBE\xBB\xAC\x54\x63\x65\x66\x62" ' D0-DF
  16. "\x30\x42\x47\x57\xEE\x33\xB6\xE1\xCD\xED\x36\x44\xCE\xCF\x31\xAA" ' E0-EF
  17. "\xFC\x9E\xAE\x8C\xDD\xDC\x39\xFB\x80\xAF\xFD\x78\x76\xB2\x9F\xFF" ' F0-FF
  18.  
  19.  

Puedes buscar información adicional en las APIs de SNA (System Network Arquitecture) concretamente una función llamada CSV . CSV convierte entre EBCDIC y ASCII, pero claro supongo que sólo lo quieres para trabajar con la base de datos no para comunicaciones, pero bueno tu decides, si le echas un vistazo o no.

543
Visual Basic 6.0 e inferiores / Re: Funcion
« en: Martes 27 de Mayo de 2008, 09:36 »
La función se llama 'shell' y también está 'shellExecute'

Código: Text
  1.  
  2. dim ret as double
  3. ret= shell(ruta, estiloVentana)
  4.  
  5.  

Nota: ruta es un string que incluye los posibles parámetros que se haya de pasar al programa (si es el caso). Y donde estiloVentana indica si es modal o no, si está maximizada, oculta...

shellExecute es una API... esta es su declaración:
Código: Text
  1.  
  2. Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  3.  
  4.  

544
Visual Basic 6.0 e inferiores / Re: Filesystemobject Mostrar Tamaño De Copiado
« en: Domingo 25 de Mayo de 2008, 10:02 »
No conozco si existe una forma de conocer si ese proceso de copia ha terminado. Pero puedes usar un método alternativo un poco más laborioso pero que te permite más control.  El otro método es copiar recursivamente cada subcarpeta y fichero contenidos... e ir mostrando el progreso de avance.

Para ello puedes usar la colección Folders y Files de scripting.

Es bueno usar 2 rutinas para hacer eso mismo, en función de si el tamaño es grande o pequeño y por ello el tiempo empleado.

Si por ejemplo el copiado es interno a tu aplicación y no como resultado de una acción del usuario tal como lo haces iría bien ya que se supone que la carpeta que vas a copiar sea del programa y no tenga un gran tamaño.

Bloquear una aplicación completamente mientras se espera a terminar un proceso, no es lo deseable, desespera al usuario, sin embargo es necesario si la aplicación necesita que se finalice la operación en curso para poder continuar, en dicho caso lo ideal es ir informando del progreso de la acción o de otro modo el usuario pueda creer que se ha colgado. Si el progreso tiene un trato porcentual, muestra una barra de progreso, si no se sabe a ciencia cierta cuando va a terminar porque hace una llamada asíncrona no controlada por el programa, entonces activa una animación antes de la llamada y desactiva la animación después de la llamada. Para la animación puedes usar el objeto animation que puedes agregar del componente: 'windows Common controls 2.6.0' ó 2.6.5... en la carpeta 'tools' de Visual Studio 6.0 busca los archivos '.AVI' y elige el que prefieras o crea tu mismo uno....

En vez de bloquear enteramente el formulario, mira de ver si es suficiente con bloquear ciertos controles que se vean afectados hasta que el proceso no termine, para hacer esto de una forma fácil y rápida incluye todos esos controles en un mismo contendor (o contendedores dentro del mismo contenedor), así por ejemplo si empleaste un sstab y estaban en la fiche 3, podrías hacer

Código: Text
  1.  
  2. sstab1.tabenabled(3)=false ' desactiva la ficha que tiene los controles que no deseamos que sean tocados
  3.      ''''' iniciar una forma de progreso
  4.      ''''     iniciar el proceso que se desea atender
  5.      '''' din indicador de progreso
  6. sstab1.tabenabled(3)=true ' reactivar el contenedor
  7.  
  8.  
El contenedor pueder ser igualmente un frame o un picturebox o si está todo en un formulario y nada más, pués también.

En cualquier caso un bloqueo total 'mosquea' mucho a los usuarios, ya que da la sensación de que están haciendo algo 'malo' o que se ha colgado... yles tienta a reiniciar el computador, con la posible pérdida de ficheros que luego le imputarán a tu programa (salvo que el usuario final seas tu mismo).

545
Hardware / Re: Configurar Teclado De Us
« en: Sábado 24 de Mayo de 2008, 16:51 »
Citar
y como mas o menos me  se de memoria donde está cada cosa, no hay problema!!!, paso de pegar pegatinitas para acordarme!!!!

Haz como yo.... toma un lápiz de tinta indeleble y 'repinta' los caracteres que quieras... de paso si tienes borrado algún carácter lo 'refrescas'.

Si tu teclado es blanco primero pinta con un lápiz blanco la letra a cambiar, luego de negro. Si el teclado es negro, al revés en el orden...

El método es sencillo rápido y eficaz... (si activas más idiomas desde el panel de control, luego en la barra de tareas puedes añadiruna la 'barra de idiomas', y conmutar rapidamente entre idiomas (si en vez de siusutituir teclas simplmenete las repintas en el canto frontal)).

546
Diseño de Algoritmos / Re: Suma De Enteros O Particiones De 1 Numero
« en: Sábado 24 de Mayo de 2008, 15:37 »
Este tipo de problemas se presenta cuando se plantea mal un problema. Hay que diferenciar claramente cuando un problema necesita recursividad y cuando iteración controlando las variables a cada caso.

En este caso concreto yo utilizaría tanto recursividad como iteración... la recursividad por ejemplo para usar diferentes operandos, desde las sumas monarias hasta las sumas de todos los operandos (tantos como el valor máximo empleado), además emepzaría desde el final y acabaría cuando el nº de operandos fuera 0.

547
Ingeniería del Software / Re: Diagrama
« en: Sábado 24 de Mayo de 2008, 03:38 »
Selecciona los campos que uqieras usar y listo...

Sería muy pobre que un sistema te obligue a colocar todos los campos que tenga una tabla, si es una base de datos relacional, acaso no puedes decidir que campos usar de qué tablas, etc... entonces porque interpretas que has de estar limitado o forzado cuando la idea es precisamente lo contrario flexibilidad total...

De todo modos hay cosas que no hace falta preguntar, com probar y ver qué sucede también se sabe. Si fuera el caso te daría un errro indicándote que es preciso indicar todos los campos, no crees ????...

548
Software / Re: Programa Para Copiar Una Pelicula
« en: Sábado 24 de Mayo de 2008, 03:26 »
Cita de: "Yañez"
Citar
y entendiendo que sólo es para respaldar un original...

Tampoco estoy de acuerdo con la piratería, pero entiendo que hay sitauciones en que uno quiere respaldar sus discos originales...
efectivamente... precisamente entre ayer y hoy he estado haciendo un pequeño programa para refundir contenido de CDs en 1. Si sucede como me ha pasado a mi que tanto el original como la copia ya están rayados, casi no hay escape excepto intentar ver si entre uno y otro se puede sacar todos los archivos que componen el original para rehacer entre todos una copia.... y todo porque usé el original después que se rayó la copia, en vez de haber hecho una nueva copia...

Lo lógico es que se pague una sola vez por un producto, a mi no me guataría nada que cada 2 o 3 años tuviera que recomprar nuevamente cada libro que comprçe en su día porque se ha deteriorado de tal manera que ya es imposible usarlo...

...Sólo que con el papel, la cosa es mucho más duradera, los CDs y DVDs en cambio son muy frágiles, demasiado frágiles y según cuáles demasiado caros para comprar 2 veces el mismo.

549
SQL Server / Re: Instalar Sqlexpress 2005
« en: Sábado 24 de Mayo de 2008, 03:17 »
Pués bien claro te lo está dicendo. No puedes actualizar porque tu software o hardware son muy antiguos, posiblemente no cumplen los requisitos para poder funcionar. No recuerdo los requisitos ahora mismo, pero si buscas por Google seguro que los encuentras. Considera tu memoria, el espacio libre en tu disco duro, la velocidad del procesador y el S.O. que tienes, por ejemplo si tienes windows98, posiblemente no te deje, querrá como mínimo el server 2000 en adelante, si tienes XP, no recuerdo ahora mismo pero en la versión Home, creo que no funcionaba 2005 necesitas al menos el 'PRO'fesional.. pero vamos ya te digo que no estoy seguro de los requisitos pués hace tiempo que no los miro....

Por otro lado te indica que posiblemente el idioma que prentedes instalar no se adecúa a tus preferencias... esto es que las DLLs de la versión de tu equipo son en un idioma y la versión de SQL espera encontrar otra. Esto es más una recomendación pués siempre podrás camiar en el panel de control ciertas opciones de 'región'.

Actualiza profundamente tu software o incluso el propio hardware, o bien confórmate con la versión 2000...

550
VB .NET / Re: Clase De Conexion
« en: Sábado 24 de Mayo de 2008, 02:53 »
Darte indicaciones es un poco engorroso, especialmente si no tienes claro qué hacer ni por donde empezar.

No obstante deberás definirte por el tipo de conexión que quieres hacer, por ejemplo: web .

si quieres hacer algo para FTP, será distinto de si quieres hacer algo para TCP, etc...  además deberás decidir si quieres que sea lo más 'compatible' posible, en cuyo caso deberás orientarte a 'SOAP', o si prefieres rendimiento dejando de lado compatiblidad en cuyo caso deberias usar 'Remoting'.

Por tanto busca en tu MSDN SOAP, Remoting, Network, Channel, etc... empolla un poco y luego se podrá dar explicaciones precisas a problemas concretos...

Páginas: 1 ... 20 21 [22] 23 24 ... 29