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

#21
Pues de nuevo...
Muchísimas gracias, tu ayuda esta siendo inestimable.

Estoy depurando muchas cosas que tenía mal o que se podían implementar mejor.

Un saludo.
#22
Hola NEBIRE:

Tu explicación es simplemente magistral, y ojala yo supiera hacer lo que me sugieres, de todas formas he copiado y salvado todo el código por que voy a hacer pruebas a ver que consigo y de paso aprendo, pero para este proyecto esta solución es impracticable por que nada del código que tengo me serviría, pero al menos ya se cual es el problema, estoy reduciendo algunos objetos, pasándolos a nuevos Forms, pero como ya no necesito añadir mas objetos y como está el programa funciona perfecto, incluso en PC's con poca memoria, pues se queda así.
Pero has mencionado esto que si me sería muy interesante:
Citar
por ejemplo crear un control de usuario transparente, que provea no solo funcionalidad gráfica, sino también alguna colección, para almacenar métodos gráficos, entonces de ese modo, un solo control, podría tener por ejemplo 200 métodos gráficos, usando un único control de usuario... y por ejemplo, el control podría contener dibujado toda esa escalera sobre sí, podrías tener luego otro control (otra instancia del mismo control), para la leyenda, o bien otros métodos gráficos en el mismo control...

Como se hace un control de usuario transparente, que sería el que tendría el Picture que tengo donde se dibuja todo, y entonces sería reemplazar en todo el código en nombre del Picture.

No se si esto sería abusar de tu generosidad y empeño que has puesto en ayudarme, o en su caso algún link?.

Yo voy a buscar a ver si encuentro algo por donde empezar.

Muchísimas gracias por tu ayuda.

Un saludo.

#23
Para que te hagas una idea, he subido un pequeño vídeo, una imagen vale mas que mil palabras. Este es ellink:

https://youtu.be/fwodS_yRjTk

Un saludo.
#24
Hola de nuevo:

He copiado el Picture, y lo he pegado en un único Form en un proyecto nuevo.
desde el Form_Load  con esto:
   n=Me.Controls.Count, me dice que tiene 246 objetos,.

Este picture ocupa todo el ancho del Form y el alto menos 100.
He puesto un label nuevo "Label1" con indice 0

En en un Sub MouseDown del picture copiado, he puesto:
For i =1 to 60
    Load Label1(i)
Next

Y lo carga sin problemas, por lo tanto no es el Picture el que genera el error, y me preguntas por el nº de error... no hay nº de error, simplemente el mensaje dice
"Uso no válido de la propiedad" si mas.

Me sugieres esto:
Lo adecuado es tener un 'hiddenSurface', una clase que alberga un objeto bitmap, donde vas dibujando con las API de GDI32 y luego tras el dibujado lo vuelcas como gráfico al picturebox...

Esto no se lo que es, pero no tengo problemas de memoria ni de velocidad, ten en cuenta que todo se dibuja en tiempo real en el Picture, utilizando solo Picture.Line, y Picture.Circle, solo dibujo rectángulos con y sin fill, líneas y arcos, y sitúo objetos Image, Picture con Bitmap cargados en diseño, Label, Textbox y algunos Shapes y Lines creados en tiempo de diseño, que sitúo con sus coordenadas, y los hago visibles o no.

Luego el proceso de dibujado es muy complejo, hace cientos de operaciones de trigonometría, pero todo va muy rápido.

No creo que pueda averiguar donde está el problema, por eso decidí, crear en tiempo de diseño, 30 TextBox, 40 Labels, que son el máximo de textos o parámetros que puede necesitar el programa.

De nuevo gracias por tu interés y ayuda, alguna idea que pueda comprobar?.

Un saludo.

#25
Hola NEBIRE:

Gracias por responder.
El código donde lo cargo, es simplemente
For i = 1 to N
Load Label1(i)
Next

Pero es que el error no está en el código, este label, y varios mas, están dentro de un PictureBox llamado "picContenedor", que ademas tiene varios Image, TextBox, otros PictureBox, ListBox,Shapes, Lines, etc.

Resumiendo, en este "picContenedor" es donde se dibujan una serie de planos de partes de estructuras metálicas, que algunos parámetros de dibujo dependen de otros Foms que calculan y devuelven datos para dibujar los planos.

Debido a la complejidad de todo esto, es imposible que adjunte código, por que lo que yo creo es que ese PictureBox "picContenedor" que utilizo esta corrupto y por eso no me deja utilizar Load ni para Labels, Image, Textbox ni nada.
Pero todos los demás Forms (13 en total), que algunos también tienen PictureBox si me permiten utilizar Load.

Quiero hacer una prueba de copiar todo el contenido de este  "picContenedor" en otro nuevo llamado por ejemplo pic, luego borrar  "picContenedor" y renombrar pic por  "picContenedor"
De esta forma al menos podría verificar si el problema es de  "picContenedor" o de alguno de los elemento contenidos en el.

Pero no veo ninguna forma de seleccionar todo el contenido de  "picContenedor" copiarlo y pegarlo en el nuevo pic, en tiempo de diseño.

Alguna idea?
Un saludo.
#26
Hola a todos:

Esta pregunta parece obvia y simple, pero me está volviendo loco..
Tengo un proyecto con 14 Forms, en el principal (Main) tengo un PictureBox donde se grafican lineas, círculos,etc.
Hasta aquí todo correcto, pero este PictureBox, contiene imágenes, TextBox, y ListBox.
Todo funciona OK, pero he tenido que poner 30 Labels que necesito en tiempo de diseño, por que si pongo solo una, por ejemplo Label1 con índice 0 Label1(0), y luego cargo mas en tiempo de ejecución con un For-Next, Load Label1(i), etc, me sale un error "Uso no válido de la propiedad" y no me explico por que.
En el resto de los Foms si me deja hacerlo, y no me lo explico.

Alguna ayuda?

Gracias.
#27
Gracias scavdr, pero ya lo he solucionado.

Un saludo.
#28
Hola a todos:

A ver si alguien me puede echar una mano, que me estoy volviendo loco.
Tengo 2 ListBox List A y List B, que se ven en la imagen.
Los dos tienen los mismos items, List B es una copia de List A.

Y lo que quiero es, según se ve en la imagen, mover los items de List B, e insertarlos en List A debajo del item de List A que tiene seleccionado, y claro esta que esos mismos items de List B, se borren en List A.
Utilizo 2 ListBox por que List A es MultiSelect = 0, y List B Multiselect = 2.

La operación realmente sería mover de sitio los seleccionados en List B, en List A.

Un saludo.  
#29
Hola Grave:
Muchas gracias por tu ayuda, pero esa solución me parece muy complicada, y ademas yo no se hacer una clase de este tipo, si no te importa explicarme como se haría, te lo agradecería y una cosa mas que aprendo.

Hola MCKSys Argentina:
Gracias también a ti por tu ayuda, en el link que me indicas, solo tiene la constante pero no el valor Hex, pero el tener que buscarlo luego me ha servido para encontrar la forma perfecta de hacerlo.
Por si a alguien le sirve, y como agradecimiento lo aporta aquí:



Public Function CopiarSeleccionados(list As ListBox) As Long
    Dim numSelected As Long, i As Long
   
   'lee el nº de items seleccionados
   'si el listbox es single-select style numSelected retorna -1 (LB_ERR).
   'si el listbox es multiselect style,y niguno es seleccionado,
   'numSelected rettorna 0, si hay seleccionados, numSelected retorna el nº seleccionado (del List.SelCount)
    numSelected = SendMessage(list.hwnd, LB_GETSELCOUNT, 0&, ByVal 0&)
   'debug ...
    'Debug.Print numSelected; " items seleccionados:"
    'Debug.Print "inddice", "item"
    CopiarSeleccionados = 0
    If numSelected > 0 Then
       'dimensiona un array largo para almacenar los items seleccionados
       ReDim sSelected(0 To numSelected - 1) As Long
       'pasa el array a Sendmessage para que lo llene con el item seleccionado
       ret = SendMessage(list.hwnd, LB_GETSELITEMS, numSelected, sSelected(0))
       'debug ...
       For i = 0 To numSelected - 1
           Debug.Print list.list(sSelected(i))   'el contenido del item
           'aqui lo que se necesite
       Next
    End If
End Function


Un saludo a todos.
#30
Gracias por responder:

Lo de seleccionar el contenido del ListBox entero no importa el número de items que tenga, ya lo he solucionado con SendMessage y una sola línea de código.

SendMessage list.hwnd, LB_SETSEL, True, ByVal -1 'select all
SendMessage list.hwnd, LB_SETSEL, False, ByVal -1 'deselect all


No me gusta utilizar ListView, salvo que sea imprescindible, es mucho mas lioso e innecesario para una simple lista, pero voy a probar tu sugerencia.

Pero ahora lo que necesito es copiar todos los items seleccionados (sucesivos o no) de un ListBox a otro ListBox, y lógicamente con SendMessage, pero no encuentro nada.

Alguna idea?

Un saludo.