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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 ... 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 [286] 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 ... 432
2851  Programación / Programación Visual Basic / Re: No puedo utilizar Load Label en PictureBox en: 5 Julio 2018, 10:39 am
Al final se me hizo muy tarde...

He visto el vídeo, y aunque sirve para hacerse una ídea d elo que estás haciendo, no aporta detalles sobre el problema. Quiero decir que no recala en ningún momento en el error que reportas.

Te decía que cuando debes utilizar gráficos a mansalva, los gráficos conviene que sean 'dibujados', es decir métodos y no 'controles'. Los controles ocupan espacio de memoria, pero más alla de eso, el uso indiscriminado puede hacerlo lento y caer en el error que te sugrge. estoy convencido que has alcanzado el límite máximo de controles que s epermite para un formulario (ahora mismo no recuerdo cual es, ya que es algo que uno nunca considera que se va a dar y lo acaba olvidando (el valor exacto)).

Para usar métodos gráficos, lo más adecuado es recurrir a las API gráficas que proveen GDI32 o al menos simplemente GDI, indistintamente de que uno se provea sus propios métodos cuando se quiera hacer algo específico que no esté prtevisto, o que no satisfaga por algna razón.
El inconveniente de usar las API, es que evidentemente se necesita aprender a conocerlo y eso lleva su tiempo. Especialmente si uno nunca se ha acercado a usar APIs, puede sonarle a chino, la forma de funcionar y no entender ciertos detalles por que se alejan (de alguna manera), de la forma relativamente sencilla (y a veces tortuosa) en que funcionan las cosas en VB6.

Otro forma, es que sin salirse de vb6, cree uno mismo determinada funcionalidad, 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...

Asumo que básicamente operas en un entorno 2D... aunque se puede hacer también un entorno 3D, e incluso ir más alla, con raytracing y tal... se sale de la envergadura de ayuda para unos foros, aunque siempre se puede dar orientación si la precisas...

...si el fin de semana saco un poquito de tiempo libre, veo de hacer un control así, bueno me conozco, y al final sé que aunque tenga tiempo libre surgirá algo, así que aprovecho ahora y en un momento te doy alguna orientación que puede servirte de guía...

La colección podría almacenar una estructura (o clase) con los siguientes tipos (así a bote pronto):
Código
  1. Private ColGrPaths            As New Collection
  2. private p_NumGrPaths       As long
  3.  
  4. ' El texto o una polilínea requerirá otro desarrollo, porque el uno exige un string, y el otro múltiples puntos...
  5. Public Type DatosGraficos
  6.    Orden       As Byte     ' punto, línea, rectángulo, círculo, arco, polígono, elipse...
  7.    SubOrden    As Byte     ' si línea, si círculo ó elipse, si arco...
  8.    Activo      As Byte     ' Se dibuja si tiene valor 255, si no se omite (cuando se pide dibujar todo).
  9.    X           As Long     ' cordenadas
  10.    Y           As Long     '   "
  11.    Ancho       As Long     ' medidas (radio en caso de círculo polígono, etc...)
  12.    Alto        As Long     '   "     (aristas en caso de polígono, etc...)
  13.    Color       As Long     ' Color con que se dibuja. Un flag determina si se usa el color por defecto, del control o se delega en el que aquí se designe.
  14.    Grosor      As Byte     ' Grueso de línea "        "      "
  15.    FlagABC     As Byte     ' Modificador de acciones
  16.    Flags       As Long     ' por ejemplo rellenar interior (casos de círculo, elipse, polígono, etc)
  17.    FlagXYZ     As Long     ' modificadores de posicionado, desplazamiento y escala...
  18. End Type
  19.  
  20. ' Dibuja toda la colección almacenada de métodos gráficos... (solo los que estén activos).
  21. Public Sub PathDibujarTodo(Optional ByVal Actualizar As Boolean = True)
  22.    Call PathsDibujar(0, ColGrPaths.Count - 1, Actualizar)
  23. End Sub
  24.  
  25. ' Dibuja de un plumazo todas las órdenes gráficas reclamadas y (si se reclama) acto seguido actualiza la imagen. Si cantidad es un valor negativo, dibuja en orden inverso. Si Cantidad excede el límite se ignora.
  26. Public Sub PathsDibujar(ByVal Desde As Long, ByVal Cantidad As Long, Optional ByVal Actualizar As Boolean = True)
  27.    Dim k As Long, Final As Long
  28.  
  29.    If (EnRango(Desde) = True) Then ' se exige que desde sea un valor 'dentro' de la colección.
  30.        If Cantidad = 0 Then Exit Sub ' nada que dibujar... caso típico que el valor sea el resultado de una expresión.
  31.  
  32.        Final = (Desde + Cantidad)
  33.        If (Cantidad > 0) Then
  34.            If (Final >= ColGrPaths.Count) Then Final = ColGrPaths.Count - 1
  35.  
  36.            For k = Desde To Final
  37.                If (ColGrPaths(k).Activo And c_Activo) Then
  38.                    Dibujar (ColGrPaths(k))
  39.                End If
  40.            Next
  41.        Else
  42.            Final = -Final
  43.  
  44.            For k = Final To Desde Step -1
  45.                If (ColGrPaths(k).Activo And c_Activo) Then
  46.                    Dibujar (ColGrPaths(k))
  47.                End If
  48.            Next
  49.        End If
  50.  
  51.        If (Actualizar = True) Then
  52.            Call GrEndPath ' actualiza la imagen
  53.        End If
  54.    End If
  55. End Sub
  56.  
  57. '...
  58.  
  59.  
  60.  

Dibujar sería una función que simplemente recibe el objeto y mediante un 'select case' invoca a la función específica que se encarga de dibujar la orden específica...

Nota como esta función también es pública, para permitir dibujar una orden que no conste en la colección, peor que a cierto momento pueda interesar.
Lógicamente también podrán invocarse externamente los métodos gráficos, sin necesidad de que existan como un 'objeto'...
Código
  1. Public Sub DibujarOrden(ByRef dg As DatosGraficos)
  2.    With dg
  3.        Select Case .Orden
  4.            Case ORDEN_GRAFICA_LINEA   ' 0 más arriba las que sean más frecuentes de ser dibujadas
  5.                Call Me.GrLinea(.X, .Y, .X + .Ancho, .Y + .Alto, .Color, .Grosor)
  6.            Case ORDEN_GRAFICA_RECTANGULO
  7.            Case ORDEN_GRAFICA_CIRCULO
  8.            Case ORDEN_GRAFICA_POLIGONO
  9.            ' ...
  10.            Case Else             ' orden desconocida...
  11.        End Select
  12.    End With
  13. End Sub
  14.  

Y algunas funciones... en este ejemplo, varias funciones que definen un objeto sin ambigüedad, finalmente invocan al mismo (privado)...
Código
  1. Public Sub GrLinea(Optional ByVal X1 As Variant, Optional ByVal Y1 As Variant, Optional ByVal X2 As Variant, Optional ByVal Y2 As Variant, Optional ByVal Color As Variant, Optional ByVal Ancho As Byte = 1, Optional ByVal AbsolutoOrigen As Boolean = True, Optional ByVal AbsolutoDestino As Boolean = True)
  2.    Call LinRectCaja(X1, Y1, X2, Y2, Color, Ancho, AbsolutoOrigen, AbsolutoDestino)
  3. End Sub
  4.  
  5. Public Sub GrRectangulo(Optional ByVal X1 As Variant, Optional ByVal Y1 As Variant, Optional ByVal X2 As Variant, Optional ByVal Y2 As Variant, Optional ByVal Color As Variant, Optional ByVal Ancho As Byte = 1, Optional ModoFusion As DrawModeConstants = vbCopyPen, Optional ByVal AbsolutoOrigen As Boolean = True, Optional ByVal AbsolutoDestino As Boolean = True)
  6.    Call LinRectCaja(X1, Y1, X2, Y2, Color, Ancho, AbsolutoOrigen, AbsolutoDestino, ModoFusion, True)
  7. End Sub
  8.  
  9. Public Sub GrCaja(Optional ByVal X1 As Variant, Optional ByVal Y1 As Variant, Optional ByVal X2 As Variant, Optional ByVal Y2 As Variant, Optional ByVal Color As Variant, Optional ModoFusion As DrawModeConstants = vbCopyPen, Optional ByVal AbsolutoOrigen As Boolean = True, Optional ByVal AbsolutoDestino As Boolean = True)
  10.    Call LinRectCaja(X1, Y1, X2, Y2, Color, , AbsolutoOrigen, AbsolutoDestino, ModoFusion, True, True)
  11. End Sub
  12.  
  13. ' Resume las 3 funciones previas en una sola.
  14. Private Sub LinRectCaja(Optional ByVal X1 As Variant, Optional ByVal Y1 As Variant, Optional ByVal X2 As Variant, Optional ByVal Y2 As Variant, Optional ByVal Color As Variant, Optional ByVal Ancho As Byte = 1, Optional ByVal AbsolutoOrigen As Boolean = True, Optional ByVal AbsolutoDestino As Boolean = True, Optional ModoFusion As DrawModeConstants = vbCopyPen, Optional ByVal Box As Boolean = False, Optional ByVal Relleno As Boolean = False)
  15.    Dim AnchoPrevio             As Integer
  16.    Dim ModoFusionPrevio        As DrawModeConstants
  17.  
  18.    With PicMask  ' es un objeto oculto, puede ser incluso un picturebox...(no visible)
  19.        AnchoPrevio = .DrawWidth: .DrawWidth = Ancho
  20.        ModoFusionPrevio = .DrawMode: .DrawMode = ModoFusion
  21.  
  22.        ' si se omiten ambos (x1 y x2), se trazará una línea de currentX a 0
  23.        If (IsMissing(X1) = True) Then
  24.            X1 = .CurrentX
  25.        ElseIf (IsMissing(X2) = True) Then
  26.            X2 = .CurrentX
  27.        End If
  28.  
  29.        ' si se omiten ambos (y1 e y2), se trazará una línea de currentY a 0
  30.        If (IsMissing(Y1) = True) Then
  31.            Y1 = .CurrentY
  32.        ElseIf (IsMissing(Y2) = True) Then
  33.            Y2 = .CurrentY
  34.        End If
  35.  
  36.        '
  37.        If (Relleno = True) Then ' exige Boxed también
  38.            If (IsMissing(Color) = True) Then Color = .FillColor
  39.            If (AbsolutoOrigen = True) Then
  40.                If (AbsolutoDestino = True) Then
  41.                    PicMask.Line (X1, Y1)-(X2, Y2), Color, BF
  42.                Else
  43.                    PicMask.Line (X1, Y1)-Step(X2, Y2), Color, BF
  44.                End If
  45.            Else
  46.                If (AbsolutoDestino = True) Then
  47.                    PicMask.Line Step(X1, Y1)-(X2, Y2), Color, BF
  48.                Else
  49.                    PicMask.Line Step(X1, Y1)-Step(X2, Y2), Color, BF
  50.                End If
  51.            End If
  52.        ElseIf (Box = True) Then
  53.            If (IsMissing(Color) = True) Then Color = .ForeColor
  54.            If (AbsolutoOrigen = True) Then
  55.                If (AbsolutoDestino = True) Then
  56.                    PicMask.Line (X1, Y1)-(X2, Y2), Color, B
  57.                Else
  58.                    PicMask.Line (X1, Y1)-Step(X2, Y2), Color, B
  59.                End If
  60.            Else
  61.                If (AbsolutoDestino = True) Then
  62.                    PicMask.Line Step(X1, Y1)-(X2, Y2), Color, B
  63.                Else
  64.                    PicMask.Line Step(X1, Y1)-Step(X2, Y2), Color, B
  65.                End If
  66.            End If
  67.        Else
  68.            If (IsMissing(Color) = True) Then Color = .ForeColor
  69.            If (AbsolutoOrigen = True) Then
  70.                If (AbsolutoDestino = True) Then
  71.                    PicMask.Line (X1, Y1)-(X2, Y2), Color
  72.                Else
  73.                    PicMask.Line (X1, Y1)-Step(X2, Y2), Color
  74.                End If
  75.            Else
  76.                If (AbsolutoDestino = True) Then
  77.                    PicMask.Line Step(X1, Y1)-(X2, Y2), Color
  78.                Else
  79.                    PicMask.Line Step(X1, Y1)-Step(X2, Y2), Color
  80.                End If
  81.            End If
  82.        End If
  83.  
  84.        .DrawWidth = AnchoPrevio
  85.        .DrawMode = ModoFusionPrevio
  86.    End With
  87. End Sub
  88.  

También puede suceder

CurrentX y CurrentY se guardan como propiedades que no aparecen en el visor de propiedades (deben retirarse, para estar disponibles solo en tiempo de ejecución), es adecuado, para trazar por ejemplo polilíneas... Una polilínea, sería simplemente una colección de puntos, + 1 orden gráfica que defina el primer punto, el color, ancho, etc...
Esto te permite obtener donde terminó de dibujar un objeto para (por ejemplo) seguir dibujando en un punto específico, algo que
Código
  1. ' Devuelve o establece las coordenadas verticales para el siguiente método Print o Draw.
  2. Public Property Get CurrentY() As Single
  3.    CurrentY = UserControl.CurrentY
  4. End Property
  5.    Public Property Let CurrentY(ByVal Y As Single)
  6.        UserControl.CurrentY = Y
  7.    End Property
  8.  
  9. ' Devuelve o establece las coordenadas horizontales para el siguiente método Print o Draw.
  10. Public Property Get CurrentX() As Single
  11.    CurrentX = UserControl.CurrentX
  12. End Property
  13.    Public Property Let CurrentX(ByVal X As Single)
  14.        UserControl.CurrentX = X
  15.    End Property
  16.  

Como hablamos de una colección lógicamente hacen falta dos cosas para ello, además operaciones en la colección: añadir, eliminar, vaciar...
Aquí un ejemplo para añadir:
Código
  1. ' Añade los datos de una orden gráfica en la posición indicada y devuelve el valor de dicha posición. Si el índice está fuera de rango, lo añade al final.
  2. ' OJO: No verifica si la orden existe o no, al dibujar, si no existe, o un parámetro no es válido, se ignora... y continúa con el siguiente.
  3. '   Puede ser mejor desde aquí señalar que es erróneo... o devolver false, y el index devolverlo por referencia.
  4. ' DibujarAhora: fuerza a dibujar ahora mismo la orden gráfica, aunque en general es mejor almacenarlas y luego dibujarlas.
  5. Public Function PathsAñadirIndex(ByRef Graf As DatosGraficos, Optional ByVal Index As Long = -1, Optional ByVal DibujarAhora As Boolean = False) As Long
  6.    If ((Index < 0) Or (Index > ColGrPaths.Count)) Then
  7.        Index = (ColGrPaths.Count + 1) ' en ambos casos se añade al final
  8.    End If
  9.  
  10.    Call ColGrPaths.Add(Graf, , Index)
  11.  
  12.    If (DibujarAhora = True) Then
  13.        Call Me.DibujarOrden(Graf)
  14.        RaiseEvent Actualizado
  15.    End If
  16.  
  17.    PathsAñadirIndex = Index
  18. End Function
  19.  
  20.  

También es adecuado contar con otras operaciones menos frecuentes, pero igualmente útiles...
Aquí remplazar (una existente por otra que se entrega), y una que intercambia el orden de dos (el orden almacenado supone el orden en que se dibujan).
Código
  1. ' Remplaza un ítem gráfico (orden), que consta en la colección por otra orden procedente del exterior. Devuelve True, si el íitem existe.
  2. Public Function PathsRemplazar(ByVal Index As Long, ByRef Graf As DatosGraficos) As Boolean
  3.    If (EnRango(Index) = True) Then
  4.        Call ColGrPaths.Add(Graf, , Index)
  5.        Call ColGrPaths.Remove(Index + 1)
  6.        PathsRemplazar = True
  7.    End If
  8. End Function
  9.  
  10. ' Intercambia dos ítems (órdenes gráficas), de posición entre sí. Devuelve True, si ambos ítems existen.
  11. Public Function PathsIntercambiar(ByVal Index As Long, ByVal PorIndex As Long) As Boolean
  12.    Dim g As DatosGraficos
  13.  
  14.    If (EnRango(Index) = True) Then
  15.        If (EnRango(PorIndex) = True) Then
  16.            With ColGrPaths
  17.                g = .Item(Index)
  18.                .Item(Index) = .Item(PorIndex)
  19.                .Item(PorIndex) = g
  20.            End With
  21.            PathsIntercambiar = True
  22.        End If
  23.    End If
  24. End Function
  25.  

También puede suceder que uno no quiera dibujar en orden todo, sino solo ciertas órdenes... puede construirse funciones que recorriendo la colección solo dibuje determinadas funciones, si es complicado y exige ciertos condicioonantes muy variables, se puede reclamar una enumeración de la colección y entonces en la entrega evaluar si debe o no dibujarse:
Código
  1. ' Enumera los ítems de la colección (por evento) desde el índice indicado hasta el final, en la dirección señalada. Es posible cancelar cuando se desee. Cuando llega al último ítem, lo indica expresamente.
  2. Public Function PathsEnumerar(ByVal DesdeIndex As Long, Optional ByVal HaciaAtras As Boolean = False) As Boolean
  3.    Dim k As Long, Cancelar As Boolean, Final As Long
  4.    Dim dir As Long
  5.    Dim g As DatosGraficos
  6.  
  7.    If (EnRango(DesdeIndex) = True) Then
  8.        ' Con solo esto, podemos recorrer la colección enambas direcciones, el bucle apenas sufre cambios.
  9.        If (HaciaAtras = False) Then    ' desde index hasta el final.
  10.            Final = (ColGrPaths.Count - 1): dir = 1
  11.        Else                            ' desde index hasta el 1º
  12.            Final = 2: dir = -1
  13.        End If
  14.  
  15.        ' si el index es el final, no entra en el bucle
  16.        Do While (DesdeIndex <> Final)
  17.            g = ColGrPaths.Item(DesdeIndex)
  18.            RaiseEvent Listado(DesdeIndex, g, Cancelar, False)
  19.            If (Cancelar = True) Then Exit Do
  20.            DesdeIndex = (DesdeIndex + dir)
  21.        Loop
  22.        ' aunque se salga del Do...Loop, sabemos si se canceló porque el índice no llegó a sumar hasta el final.
  23.        '   luego lo enviamos ahora, y ahora da igual que cancele, ya no hay más...
  24.        If (DesdeIndex = Final) Then
  25.            g = ColGrPaths.Item(Final)
  26.            RaiseEvent Listado(Final, g, False, True) ' indicamos que es el final...
  27.        End If
  28.  
  29.        PathsEnumerar = True ' también podría devolver el nº de ítems enviados.
  30.    End If
  31. End Function
  32.  

Se ha mostrado algún evento... el control puede proveer algunos eventos, como cuando termina de redibujartodo, por si se precisa hacer algo desde fuera, como activar algún botón, etc...
Código
  1. ' Ocurre cada vez que se actualiza la Imagen.
  2. Public Event Redibujado()
  3. ' Ocurre cada vez que se actualiza la imagen, cuando se reclama dibujar una sola orden gráfica.
  4. Public Event Actualizado()
  5. ' Ocurre cuando se reclama una peración de Listar Paths (órdenes gráficas), adecuado cuando se deban modificar, algunos ítems.
  6. Public Event Listado(ByVal Indice As Long, ByRef Grafico As DatosGraficos, ByRef Cancelar As Boolean, ByVal Final As Boolean)
  7.  


Con el valor activo, puedes desactivar que un método gráfico no se dibuje la próxima vez, etc...
Como ves, un control así permite almacenar muchos métodos gráficos contiene todos los datos precisos para dibujar, pero no alcanza ni sobrepasa límites impuestos, además permite aislar adecuadamente unos gráficos de otros, por ejemplo un único control podría contener todos los métodos gráficos para dibujar la escalera... añadiendo además por ejemplo una función GrEscala(byval Escala as single), podría tomar toda la colección de métoso y rescalar su 'ancho y alto' o sólo a aqellos métodos que sean de cierto tipo... igualmente moverlos todos de sitio sería desplazar el control, pero mover a determinados objetos de sitio, podría hacer otra función que recorra la colección para añadir restar a las cordenadas un valor específico...

...y fíjate que sin embargo todo ese código, está en VB6 "puro", sin APIs, recurriendo a las APIs, sería más potente... (gráficamente VB6 es bastante pobre, no es esforzaron demasiado durante el diseño de VB, de dotarle de buneas funcionalidades) pero asumo que no dominas el mundo de las API.
2852  Foros Generales / Noticias / Re: De esta forma la UE quiere acabar con el Internet que todos conocemos en: 5 Julio 2018, 08:16 am
Al inicio de Internet, la queja d eklas empresas de software (como microsoft) es que querían ver más presencia empresarial en la red, ya que ahasta el momento, la red parecía tener solo fines educativos...
Tímidamente fueron asomando la cabeza diferentes facetas de la vida, hasta que al final emergió el mundo empresarial...
Y así llegamos hasta esta época donde parece que la única finalidad de la RED es única y exclusivamente empresarial, es decir es como si fuera un diseño por y para las empresas donde el resto son intrusos y que por tanto, hay que eliminar o exigirles que paguen de alguna manera...


En estos casos yo siempre abogo por lo mismo, cifrado, cifrado y más cifrado... y nada de software de grandes compañías, a cada caso algo diseñado específicamente, cuánto más específico mejor, cuantos más diseños mejor...


...cuando entiendan que el mundo no tiene ni gente ni máquinas suficientes para espiar, a lo mejor entienden que lo mejor es dejarlo en paz. ...pero mientras crean tener el poder y poder controlarlo, todo, la tentación de intentarlo es demasiado grande... cifremos, pués.
2853  Foros Generales / Noticias / Re: Hay 10.000 empleos tecnológicos vacantes por la falta de cualificación en: 5 Julio 2018, 08:04 am
Ya... vacantes sin rellenar...

Personal cualificado hay de sobra, lo que falta es personal que acepte que le paguen una miseria teniendo un currículum por la nubes.

Las empresas quieren astronautas al precio de barrenderos, así por supuesto que seguirán vacantes...
2854  Foros Generales / Foro Libre / Re: Trump, a su gabinete: "¿No podemos simplemente invadir Venezuela? en: 5 Julio 2018, 07:45 am
Es que éste tipo, es como un elefante 'hociqueando' en una farmacia... a cada paso que dá, rompe todo a su paso...

Si hay un conflicto armado en Venezuela que sea por que esa es la solución que elija el propio pueblo venezolano (pienso yo), no por intervención externa.
2855  Programación / Programación Visual Basic / Re: No puedo utilizar Load Label en PictureBox en: 4 Julio 2018, 19:41 pm
Un poco más tarde miro el vídeo, ahora tengo solo justo un ratito libre...

Bien... ya me has contestado...
Todo apunta a que el problema es el que asumía... 246 controles en el form... luego en efecto la causa es alcanzar el límite de controles para el formulario...
pero, vamos ahora a encasillarlo exactamente...

En la función que te origina el error, coloca algo de código similar a esto:
Código
  1. private function tufuncionCargandocontroles
  2.    On local error goto CuentameLosControles
  3.  
  4.    '... aquí tu código...
  5.  
  6.  
  7.   Exit function ' ó Sub
  8. CuentameLosControles:
  9.    Call MsgBox(CStr(Me.Controls.Count))
  10. End function

Lós métodos gráficos, circle, line, no son problema, pero ojo, no confundas los métodos gráficos con los 'controles de usuario': line, shape, label, image y frame, todos ellos son 'irreales', pero ocupan puesto como control de usuario...

A la noche que llegue a casa, miro el vídeo y te pongo un ejemplo de operativo...

2856  Programación / Programación C/C++ / Re: obtener el número máximo y el número mínimo de matriz aleatoria c++ en: 4 Julio 2018, 10:03 am
Es absurdo, preguntar que te resuelvan algo como eso...

Son matemáticas de niño de 8 años... hallar el mayor o menor de una serie.

Vas recorriendo la serie si el actual es menor que el que tenías como el menor, entonces ese valor pasa a ser el menor, es decir se 'memoriaza el valor del que ahora es el menor, y se mmemoria para poder en adlante compararlo con el resto... al final d ela serie el que consta como el menor, resulta serlo.
Como el primero de la serie no tiene con quien compararse, el primero se toma de entrada como el menor, luego el resto de comparaciones d ela serie comienza con el siguiente, es decir con el 1.

Hallar el mayor d ela serie, es lo mismo, pero manteniendo otra 'memorizado' (variable), para el considerado mayor hallado...

Y como decía, el código tan elemental, que no merece ponerlo, si alguien es incapaz de hacerlo por su cuenta, lo que debe hacer es dedicarse a otra cosa, que como mínimo "se le dé mejor".
2857  Programación / Programación C/C++ / Re: funciòn en C en: 4 Julio 2018, 09:50 am
Las variables, como sabes (o debieras saber) contienen valores...

Por lo general son declaradas en alguna parte (hay lenguajes que no exigen una declaración explícita (se deduce implícitamente de su uso)).

Sin embargo parece que tú esperas o crees que solo pueden estar declaradas en el cuerpo del código... pero también pueden estar declaradas como constantes, como retorno de funciones  (en ese caso, la función actuaría como una variable), como parámetros en funciones, etc... ése último caso descrito, es el tuyo.

Si se tienes un código como este:

Código:
entero edad
edad = DameMiEdad(fechaNacimiento, AñoActual)
mostrar edad

Y tu pasas estos datos:
Código:
edad= DameMiEdad(2000, 2018)
Te dirá que tu edad es 18 años...

Tu e parte alguna haces una asignación:
Código:
fechanacimiento= 2000
AñoActual = 2018
Esos son los nombres de los parámetros de la función... tu puedes pasar una contante (valor inmediato, como en el jeemplo), u otra variable o expresión numérica, siempre que sea del mismo tipo o sea convertida a dicho tipo (para que no genere error)...

es decir perfectamente podrías haber hecho:

así...
Código:
propiedad get DosMileniosDC
    Devolver 2000
fin propiedad
edad = DameMiEdad(DosMileniosDC, 2018)

ó...
Código:
entero malditoaño = 20 * 100
edad = DameMiEdad(malditoaño, 2018)

ó...
Código:
entero e = 8
entero c = 22
edad = DameMiEdad(((50 +10) * e) - (c * 40) ,  2018)

en el primer caso, al parámetro se la pasa el valor que devuelve una propiedad, en el segundo caso, el valor de otra variable, en el 3º caso, el valor de una expresión... y en ningún caso se ha hecho:
Código:
fechanacimiento= .....

Por que la idea de una función (del diseño léxico de una función), es precisamente decorrar la asignación de variables de una forma que nos parezca un único bloque, coherente, donde se exige el pasó de cada parámetro.... por supuesto el compilador,  tendrá que señalar una posición de memoria y pasar un valor a dicha posición o a un registro de la CPU, es decir a nivel atómico, es lo mismo que asignar el valor a una variable mediante el símbolo '=' ... pero más eficaz en el diseño, más rápido e intuitivo...

Lo demás, que preguntas no tiene sentido... si tu mismo dices que funciona el código, y si lo has programado tú, se supone que cada línea está ahí, porque la entiendes y has puesto lo que entendías que cabe poner...
Cuando un programador da nombres a variables, debe darles nombres de tal modo  que entienda su cometido, que su solo nombre sea autoexplicativo... la única razón para no hacerlo así es que sea algo tan sencillo, que no requiera más complicaciones, pero aún así, sobretodo para los novatos y estudiantes es buena práctica que el nombre dado a una variable autoexplique lo que hace.

Entonces:
Código:
esp=f-1
' esto lo hace a medias... esp, podría ser 'espacios' como podría ser 'esparragos', ó 'espera' ó 'espabiado' ó 'español' ó 'espartaco', ó... si es 'espacio', por qu´leches nio poner 'espacios = ...' te cobran por cada carácter que escribes?????.
En los 80 había que conformarse con una letra y a lo sumo con una letra seguida de un número porque la memopria era muy , muy limitada, ahora resulta de risa la estupidez en ahorrar caracteres a las variables.

Igualmente 'f'... por qué rayos no poner 'filas', pero más aún dado el que esa filas son las filas que tendrá el ejercicio, mejor sería señalarlo como: FilasDeAsteriscos...
Y finalmente llegamos al autoentendimiento del código:
Código:
EspaciosPorLinea = (AsteriscosPorLinea - 1)

Es un problema matemático, antes que de programación que... ...si "unos quedan delimitados por otros", la cantidad de delimitadores siempre es 1 menos, salvo que lo delimite también por fuera en cuyo caso es 1 más...  Así "As" delimitadas por "Bs"...
ABA
ABABA
ABABABA
ABABABABABABABABABABA
...siempre habrá una 'B' menos que 'A'
entonces aún mejor que:
Código:
EspaciosPorLinea = (AsteriscosPorLinea - 1)
"
que es específico al problema sería
Código:
NumDelimitadores = (NumDelimitados -1)
es genérico se aplica a cualquier caso o cosa, pero si te resulta más abstracto, y te deja perplejo o con dudas, sigue siendo válido el
Código:
EspaciosPorLinea = (AsteriscosPorLinea - 1)
pero:
Código:
esp = f-1
Resulta lastimosos de entender...

...falta ver si te lo aplicas en adelante...
2858  Programación / Programación Visual Basic / Re: No puedo utilizar Load Label en PictureBox en: 3 Julio 2018, 22:53 pm
Ya, pero es que ese mensaje de errror, no se puede generar así como así...

VB6, tiene un límite de controles gráficos que se pueden cargar en un solo formulario... tal como señalas que tienes muchos objetos... solo puedo asumir que el problema esté por ahí...

Prueba antes de cargar con load... un msgbox que indique cuantos controles tienes cargados...

Código
  1. Private Sub Form_Load()
  2.    With Label1(0)
  3.        .BackStyle = 1 ' opaco
  4.        .BackColor = vbBlack
  5.        .ForeColor = vbWhite
  6.    End With
  7.  
  8.    For k = 1 To 9
  9.        Load Label1(k)
  10.        With Label1(k)
  11.            Call .Move(k * 60, k * 60)
  12.            .Visible = True
  13.        End With
  14.    Next
  15.  
  16.    Call MsgBox(CStr(Me.Controls.Count))
  17. End Sub
  18.  

y repite lo mismo, justo antes de que se origine el error, aver si viendo la diferencia de controles entre el antes y el después queda claro algo más...


Haz copia del formulario antes de nada (y su *.frx asociado)...

Una forma de reproducir dicho picturebox, es crear un nuevo proyecto vacío... y 'copiar el picturebox' y pegarlo al formulario de ese nuevo proyecto (si lo pegas en el mismo formulario-proyecto, corres el riesgo de que se las colecciones de controles aumenten su índice, pero pegado a un nuevo proyecto, cada control se mantiene con su índice (y tabindex) correctamente...

Si la copia resultó sin problemas, crea otro nuevo proyecto ahora corta el picturebox y pégalo allí... guarda cambios en los 3 proyectos, y luego la copia que pegaste en el proyecto nuevo previo, muévelo al proyecto original... y vuelve a guardar cambios... si sigue dando problemas sin más detalles será difícil saber qué es...
No puedes dar al menos el nº de error?... aquí tengo la ayuda en ingés, y no aparece ningún texto similar (traducido)...

De todos modos, por lo que me cuentas, creo que estás cometiendo un grave error al querer manipular gráficos complejos con controles de usuario... dichos controles realmente ni lo son, no poseen un handle propio, si no el del contenedor y sobrecargas innecesariamente el contenedor... aunque este tipo de 'controles' son muy livianos, precisamente por no tener un manejador propio...

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... allí si que no importa si luego tienes unos pocos controles line, o label, pero 4, 8, 12, 20, pero ya, no 150...
2859  Foros Generales / Noticias / Re: Microsoft resucita al legendario ratón IntelliMouse en: 2 Julio 2018, 19:58 pm
...y por fin pude tener un ratón agarrado adecuadamente, para un zurdo que mueve el ratón en sentido opuesto adónde avanza...

No he vuelto a haber otro que me permita configurarlo "to my way"...
2860  Foros Generales / Foro Libre / Re: "Español va a reclamar a la FIFA 15 millones de euros por el VAR" en: 1 Julio 2018, 21:13 pm
...pués suerte, pero...

Las patentes duran 20 años, así que, que se asegure bien esa fecha de 1999...

Además, si la patente no es internacional, si solo se ciñe a España, o si está presentada en más países, pero no en Rusia... perderá el tiempo y algo de dinero en abogados, aunque si son decentes, le dirán (dados los documentos que presente), si merece o no la pena...
Páginas: 1 ... 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 [286] 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 ... 432
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines