Archivo por meses: febrero 2013

Fotos del paseo Balcón de Europa y la Cuesta del Cielo nevada

 

Pues eso… que hoy jueves 28 de febrero de 2013 se celebra el día del pedal (además del día de Andalucía) y antes de las 8 de la mañana estaba cayendo un agua fortísima (con granizos) acompañada de tormenta (rayos y truenos) y con alguna que otra racha fuerte de viento…
Total que se iba a cancelar lo del día del pedal, pero resulta que a eso de las 8 (o poco antes) dejó de llover, dejó de granizar, dejó de tronar (por no decir atormentar) y hasta se despejó el día (no del todo, pero lo suficiente como para dar esperanzas de que ya había pasado toda la lluvia).

Y como yo iba a ir a echar una mano para ayudar en lo que hiciera falta, pues… una vez que me confirmaron que sí, que había día del pedal, me fui para la plaza de España (donde está el ayuntamiento y cerca del paseo Balcón de Europa) y como ya antes había visto que estaba la Cuesta del Cielo con algo de nieve, me fui al paseo y estuve haciendo algunas fotos con el móvil (el iPhone 4 que me regaló mi hijo Guille) y aquí están casi todas esas fotos…

Hay dos tandas, la primera la hice a eso de las nueve de la mañana y la otra cuando terminó todo a eso de las tres y media de la tarde, y aquí tienes los enlaces a los dos álbumes que he publicado en Picasa web. Allí también está el de las fotos del día del pedal (o al menos las que yo hice en la plaza).

Espero que te gusten y que no te las adjudiques… es decir, las fotos puedes usarlas para tu uso propio y personal, pero nada de usarla con fines comerciales… ¿vale? pues eso…
Gracias.

 

Cuesta del Cielo nevada 1 (28 feb 13)

 

 

Cuesta del Cielo nevada 2 (28 feb 13)

 

 

Nos vemos.
Guillermo

Fotos de la subida al tajo del Almendrón (domingo 17 feb 2013)

 

Pues eso… las fotos de las subida (o excursión) al tajo del Almendrón del (hoy) domingo 17 de febrero de 2013… en realidad solo algunas, ya que no he subido las 78 que he hecho, sólo 24 (+1 del mapa con la ruta), pero no te acostumbres que no sé lo que haré otras veces… por aquello de que alguna gente se queja de que subo muchas fotos…

Por cierto, que en esta ocasión el recorrido ha sido diferente a las otras veces que he estado yo (esta fue mi primera ruta con Manolo en enero de 2009), ya que siempre la hemos hecho por la parte que en esta ocasión hemos vuelto, y la verdad es que la ida está mucho más chula que el camino de vuelta, ya que hay más vistas panorámicas (no está tan metido entre los barrancos esos que hay).

Y dice Manolo que la próxima (la del mes que viene) que es a Navachica (el monte más alto de la sierra nerjeña) también la haremos por esa parte, y una vez pasado el Almendrón ir hacia Navachica… como te podrás imaginar será más dura que esta de hoy…  aunque la dureza "presumiblemente" será porque será más larga y por tanto habrá que ir a un ritmo algo más rápido que el de hoy.

 

Esta es la foto del grupo y la ruta, y más abajo tienes el enlace al álbum de Picasaweb.

mapa El Almendrón - Endomondo
El mapa de la ruta, que según el Endomondo han sido 13.27 km
(si pulsas en la foto te llevará a los datos de Endomondo)

 

P1190198_lr
La foto del grupo al completo
(si pulsas en la foto te llevará al álbum de picasaweb)

 

El enlace al álbum en Picasa web:

El Almendrón – 2013 feb 17 domingo

 

 

 

Nos vemos.
Guillermo

Error al usar una DLL de COM (ActiveX) en Windows 8 (x64)

 

Pues eso… que estaba yo actualizando al Visual Studio 2012 una aplicación que hace un par de años me funcionaba en Windows 7 con Visual Studio 2010 y en el que utilizo un componente ActiveX (COM) creado con Visual Basic 6.0. Pero a la hora de usarlo me da este error:
Retrieving the COM class factory for component with CLSID {6366501A-4960-4E2D-8E09-00F022ACD30E} failed due to the following error: 80040154.

Y después de varias búsquedas en google y desechar las que indican que hay que registrar el OCX/DLL con permisos de administrador (eso ya lo sabía yo desde Windows Vista, jeje) y ver que lo único "medio válido" es un comentario de que compile la DLL a 64 bits, me digo yo a mi mismo (algunas veces hablo con mi otro yo) ¿y si es cosa de que debe estar en modo x86?

Así que, me voy al Visual Studio 2012 (en realidad no es que me vaya, está algo complicado de que me pueda meter yo por la pantalla… si no que centre mi atención en el VS) y cambio en la ficha de Compilación (Compile) que en vez de AnyCPU sea x86, el cambio lo hago en los tres proyectos que utiliza lo que estoy mirando (aunque creo que sólo sería necesario en el ejecutable no en las 2 dll, pero por si las flais, lo cambio en todos).

¡Y funciona!

 

Así que… aquí estoy contándotelo por si alguna vez te pasa (o me vuelve a pasar a mí y no me acuerdo del tema…)

 

Espero que te sea de utilidad y acuérdate de "donar" algo… que si no… ¡que malamente está la vida! ¡ay! en fin…

 

Nos vemos.
Guillermo

Algunas diferencias entre WPF para escritorio y la Tienda de Windows

 

Pues eso… aunque el título más bien tendría que ser: algunas propiedades que están en las aplicaciones WPF para escritorio y que no está o son diferentes en las aplicaciones WPF para la Tienda de Windows.

 

Aquí te enumero algunas que me he ido encontrando:

1.- En las aplicaciones WPF para escritorio algunos controles tienen la propiedad Tooltip, en las aplicaciones para Windows Store hay que usar: ToolTipService.ToolTip.

2.- En WPF/desktop el control TextBlock tiene la propiedad IsEnabled, en las aplicaciones de Windows Store podemos usar: IsTextSelectionEnabled.

En este ejemplo se asigna a esa propiedad el valor que tenga la propiedad IsEnabled de un control llamado cboTablas:

IsTextSelectionEnabled="{Binding Source=cobTablas, Path=IsEnabled}"

 

3.- El control TextBlock no tiene la propiedad Background en las aplicaciones para la Tienda de Windows. En este caso, lo que yo he hecho es poner dicho control dentro de un objeto Border, ya que lo que yo hacía con el color ese de fondo era darle otro aspecto (tipo información):

<Border Background="LightGoldenrodYellow" 
        Grid.Row="6" Grid.Column="1" Grid.ColumnSpan="3" 
        Margin="5" VerticalAlignment="Top">
    <TextBlock x:Name="lblInfo" Text=""  
               TextWrapping="Wrap" FontSize="10" 
               IsTextSelectionEnabled="{Binding Source=cobTablas, Path=IsEnabled}"/>
</Border>

 

 

Y ya no me he encontrado con más problemas en esta aplicación (simple) que estoy migrando… el problema seguro que lo tendré con el código… #enfin…

 

Nos vemos.

Guillermo

Reloj para la Tienda de Windows por elGuille.info

 

Pues eso… en esta entrada del blog puedes comentar los fallos de "Reloj para la Tienda de Windows", así como los deseos (nuevas características) que te gustaría que la aplicación  tuviese.

Decirte que a día de hoy 08 de febrero de 2013 a las 13:02 tengo previstos estos cambios:

  • Usar siempre las fechas en formato dd/mmm/aaaa (salvo para el tile que seguiré usando AM/PM)
  • Podrás definir alarmas para ciertos días, a una hora determinada:
    – todos los días
    – de lunes a viernes
    – el día de la semana indicado (ejemplo: todos los miércoles a las 13:35)
  • Opción para cambiar a modo "temporizador", de forma que indiques a los cuántos minutos quieres que te avise y muestre la cuenta atrás
  • Una especie de "técnica pomodoro" (no especie, si no al estilo de)

 

Y lo que se os vaya ocurriendo que encaje en este tipo de programa… sobre todo teniendo en cuenta que las aplicaciones para la Tienda de Windows no son como las aplicaciones de escritorio en el sentido de que las cosas que haya que programar (programar en el sentido de cronometrar) deben ser más o menos fijas, ya que nunca debes confiar en que una aplicación de la Tienda de Windows siempre esté en funcionamiento… no… y de eso tengo que hablar más, pero en otra entrada del blog…

 

Espero que comentes… y que valores la aplicación en la Tienda de Windows… 😉

Gracias.

Nos vemos.
Guillermo

(Please press on "read more" to view the Englis translation)

Sigue leyendo

Utilizar el mismo control en dos sitios (Windows Store)

 

Pues eso… que quería usar el mismo control en dos sitios diferentes (según se muestre o no el AppBar) y como no quería crear otro control para que haga lo mismo que el que ya tenía, pues… a hacer lo que "supuestamente" había que hacer… es decir, cambiarlo de contenedor.

Lo que pasa con las aplicaciones de la Tienda de Windows (Windows Store) o lo mismo es cosa de XAML, ¡vaya usted a saber!, es que el mismo control (incluso un clon referenciado, vamos que no es una copia) no puede estar en dos sitios a la vez.

Esto es lógico, pero creo que con los controles de VB6 o de Windows Forms cuando lo "emparentabas" en otro control ya perdía toda la familiaridad con el que antes hacía de padre… pero hace unas semanas que comprobé que en XAML/Windows Store no es así.

¿No te estás enterando verdad? No te preocupes, es que cuando no duermo, pues… pasa lo que pasa… la cuestión es que te voy a explicar cómo usar el mismo control para que "parezca" que es una copia ya que unas veces se mostrará en la pantalla de la aplicación y si cuando se muestre el AppBar ese mismo control estará en la barra de la aplicación.

El código te lo voy a mostrar en Visual Basic y también en C# (para que no te quejes).

Pero primero voy a mostrarte el código XAML.

 

<Page.BottomAppBar>
    <AppBar x:Name="mainBottomAppBar" Style="{StaticResource ClockAppBarBackground}" Padding="10,0,10,0"
            Closed="mainBottomAppBar_Closed" Opened="mainBottomAppBar_Opened">
        <Grid>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                <Button x:Name="buttonAlarmas"  
                        Style="{StaticResource AlarmasAppBarButtonStyle}" Click="buttonAlarmas_Click" />
            </StackPanel>            
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                <Button x:Name="buttonClock"
                        Style="{StaticResource AboutClockAppBarButtonStyle}" Click="button_Clock" />
                <StackPanel x:Name="spAppBarSettings" Margin="0,0,-10,0">
                    <Button x:Name="buttonSettings"  
                            Style="{StaticResource SettingsAppBarButtonStyle}" Click="button_Settings" />
                </StackPanel>
            </StackPanel>
        </Grid>
    </AppBar>
</Page.BottomAppBar>

 

Nota:

Los estilos usados en el código XAML son modificaciones de los que hay en el fichero StandardStyles.xaml, salvo el estilo de la barra de la aplicación que lo que contiene es la definición del color de fondo y del borde.

De todas formas, pondré el código de muestra de la página XAML en pastebin.com y así no tendrás problema con los estilos y esas cosas.

 

utilizar mismo control

 

Este código es la definición de la AppBar en la que hay tres botones, uno de ellos muestra el panel de configuración (settings charm) y los otros dos hacen lo mismo que si eligiéramos esas dos opciones en el propio panel de configuración, aquí no te muestro el código, pero te lo explico para que sepas porqué el control AppBar tiene esos dos eventos.

En esos dos eventos es donde hago el cambio de contenedor del control buttonSettings (el de configuración) ya que es el que me interesa que esté "aparentemente" en dos sitios a la vez.

Este es el código de Visual Basic y el de C# está convertido, así que… aunque supongo que funcionará, comprueba que lo hace… (es que tendría que crear un proyecto para probarlo yo, y… pues eso… )

VB:

 

' Añadir el botón de configuración al panel inferior    (04/Feb/13)
' para que siempre esté visible
' Pero sólo cuando se cierre la AppBar
Private Sub mainBottomAppBar_Opened(sender As Object, e As Object)
    spRow2.Children.Remove(buttonSettings)
    spAppBarSettings.Children.Add(buttonSettings)
End Sub

Private Sub mainBottomAppBar_Closed(sender As Object, e As Object)
    spAppBarSettings.Children.Remove(buttonSettings)
    spRow2.Children.Add(buttonSettings)

 

C#:

 

// Añadir el botón de configuración al panel inferior    (04/Feb/13)
// para que siempre esté visible
// Pero sólo cuando se cierre la AppBar
private void mainBottomAppBar_Opened(object sender, object e)
{
    spRow2.Children.Remove(buttonSettings);
    spAppBarSettings.Children.Add(buttonSettings);
}

private void mainBottomAppBar_Closed(object sender, object e)
{
    spAppBarSettings.Children.Remove(buttonSettings);
    spRow2.Children.Add(buttonSettings);
}

 

Es importante que el control que queremos mover esté primero en el contenedor spRow2, ya que al abrir la AppBar se intentará quitar de la colección de este panel y si o está… ¡ganaremos un hermoso error!

Esto lo podemos hacer por código (por ejemplo asignándolo en algunos de los eventos iniciales de la página o mejor aún, a la hora del diseño. Es decir, en vez de ponerlo donde yo lo he puesto (en la AppBar, más que nada para que vieras el código completo de la barra) debería estar en el control spRow2.

 

Otro problema con el que me he encontrado es que resulta que cuando el usuario pulsa en buttonSettings la barra de la aplicación se oculta, pero cuando se pulsa en cualquiera de los otros dos… pues… no se oculta, así que… lo que he hecho es cerrar por medio de código la barra, pero no he usado la propiedad "Visibility" para ocultarla, ya que eso haría que no se volviera a ver. Lo que he hecho es asignarle un valor falso a la propiedad IsOpen, de forma que se cierra pero sin más problemas. Esa asignación la hago en los dos botones que me daban problema, es decir, cuando el usuario pulsa en uno de esos botones, le asigno el valor falso a esa propiedad (IsOpen) y después muestro el panel de configuración y todo lo que haya que hacer.

En este caso, el código es muy simple (adivina cuál es el de VB y cuál el de C#):

 

mainBottomAppBar.IsOpen = False

mainBottomAppBar.IsOpen = false
 ;

 

Bueno, después de este inciso, sigamos con lo de "mover" el control de sitio.

Como ya te comenté hace un rato, el control para mostrar el panel de configuración (settings charm) también debe estar en el panel al que he llamado spRow2 y que estará situado al pie de la página (concretamente el control ese parecerá que está en el mismo sitio).

Y como ese StackPanel sólo tendrá el botón en cuestión hay un problema añadido, y es que cuando lo quitamos de ahí para ponerlo en el AppBar, el resto de la pantalla se baja… así que… ¡hay que arreglarlo! y eso lo he arreglado indicando la altura mínima del panel que lo contiene, de forma que ese tamaño sea el mismo que el que tiene el botón.

Mir el código y cuando lo pruebes, quita la asignación de MinHeight y verás lo que ocurre.

 

<!-- el MinHeight es para que al quitar el botón (por código)
     no se mueva lo que haya en medio 
     que se iba para abajo al abrir la appBar -->
<StackPanel x:Name="spRow2" Grid.Column="2" Orientation="Horizontal" MinHeight="90">
    <!-- poner aquí el botón de configuración, pero por código -->
</StackPanel>


 

Y creo que con esto ya está bien…

Te resumo las cosillas que creo que tiene de interesante este rollo que te he soltado, perdona si no me he sabido explicar bien o lo ves algo poco claro y enredado, pero es que llevo más de 24 horas sin pegar ojo y… eso se nota…  No es una excusa, pero… si no entiendes todo lo que te he dicho, para que sepas que no es culpa tuya, al menos el 100% jejeje (¡qué malo soy!).

 

En este ejemplo hemos visto:

– Cómo añadir una AppBar en la parte inferior de nuestra página (se mostrará al pulsar con el botón secundario del ratón).

– Hacer que se cierre la AppBar en caso de que se quedara abierta al pulsar en uno de los botones.

– Cuando veas el código XAML completo del ejemplo, sabrás cómo agregar estilos para usarlos sólo en la página en la que se definen.

– Utilizar los eventos de apertura y cierre de la AppBar para cambiar un botón de un contenedor a otro, concretamente de la colección Children de un control StackPanel.

– Cómo mantener las cosas en su sitio cuando el tamaño de un panel o contenedor cambia de tamaño (normalmente de la altura).

– Y si te fijas en el código verás que está el botón de ir hacia atrás, pero como esta página no lo utiliza (y tampoco la página en la que utilizo el código este que estoy mostrándote), lo he ocultado, pero con idea de que el título no se desplace a la izquierda, he puesto que la columna en la que está el botón de ir hacia atrás en lugar de tener un ancho automático (<RowDefinition Height="Auto"/> ) lo he puesto para que tenga un tamaño fijo, que es el que he calculado teniendo en cuenta el ancho del botón más los márgenes, en mi caso (y generalmente si usas ese diseño) es de 110 (<RowDefinition Height="110"/> ).

– Y seguramente más cosas, pero lo principal es lo que te he relacionado.

 

Recuerda que en mi cuenta de Pastebin tienes el código completo (o casi) del ejemplo (que al final he hecho), tanto para Visual Basic como para C#.

 

 

Espero que te haya sido de utilidad.

Nos vemos.

Guillermo