desplazar texto de izquierda a derecha con text_effects.au3

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Jonny »

Hola

Antes de nada, disculpas por haber abierto otro post, pero al ser una consulta, no consideré que fuera exactamente lo mismo que posteo en
http://www.emesn.com/autoitforum/viewto ... f=4&t=2137
donde os he dejado hace un rato una UDF, para aplicar efectos a los textos de los controles.

Hace tiempo, pregunté por aquí como hacer que un texto apareciera por la izquierda, y desapareciera por la derecha. No quiero que aparezca todo el texto de golpe y se desplace, sinó que parezca que entra en la ventana por la izquierda, y salga de esta por la derecha, de manera que pueda ir leyéndose conforme va apareciendo. En resumen, igual que en la tele :).

Cuando pregunté como hacer esto, parecía que no había una forma medianamente decente para hacerlo. Entre los que respondieron, llegaron a la conclusión, que lo mejor era usar funciones ie, y html, o algo así, pero no me termina de convencer. Además, ahora con esta UDF, tiene que ser mucho más sencillo, pues he visto funciones para desplazar el texto, pero me faltaría hacer, que fuera apareciendo poco a poco en la ventana y vaya desapareciendo conforme llega al borde derecho. Además, quisiera ir mostrando varios labels, de manera que al terminar de desaparecer uno, apareciera otro (así podría controlar el tiempo que transcurre entre un texto y otro).

¿Se os ocurre como hacerlo? A ver si alguien tiene alguna idea, que con esta librería tiene que ser fácil.

Acias,

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Ximorro »

No entiendo muy bien el problema me suena que esa librería hace exactamente ese tipo de cosas. Recuerdo que el tema de los scrolls lo tocaba bastante. Lo de varios labels tampoco es un problema, se pone uno después de otro y ya está. Si te refieres a que salgan en el mismo sitio también puedes usar un único label y cambiar el texto del efecto y reiniciarlo pasado el tiempo que desees intercalar. De todas maneras mírate los efectos porque se les podía poner varias "líneas" para que fueran pasando diferentes mensajes.

Intenta ejecutar la demo que viene con la librería y te mostrará muchas de las cosas que puede hacer, así te haces una idea. Como te decía en el otro post tienes que modificarlo un poco para que compile pero no creo que fuera tan complicado. He buscado rápido y no encuentro las modificaciones que hice, igual no lo guardé, lo miraré un poco mejor.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Jonny »

Hola

Buf, pues entonces primero me tocará hacer que funcione. No se si serán algunas funciones las que den problemas, o todas, pero desdeluego, como te digo en el otro post ni error ni nada, ni se inmuta con lo que he probado (poner un texto en negrita).
A ver si doy con la tecla para que funcione, y miro lo del scroll.

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Ximorro »

Dependiendo del efecto que estés poniendo mira a ver si resulta que te está quitando la negrita. Igual define la fuente en el udf y pierde algunas de tus propiedades, en algunos casos recuerdo que cambiaba tamaños y colores, quizás pueda afectar también a los estilos (que de hecho se ponen con la misma función que cambia el tamaño...)
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Jonny »

Hola

Me tocará mirarme el código de la UDF, como si lo viera, jejeje.

Lo que hice, fue definir el tamaño y la fuente con guictrlsetfont(), y luego con esta udf, ponerlo en negrita, y esto último era lo único que no se aplicaba, todo lo demás sin problema.

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Ximorro »

¿Ponías la negrita con una función específica de la udf y eso no iba? Entonces malo porque no hace lo que dice. Aunque no sé muy bien por qué iba a dar funciones para poner negrita, quizás por facilitar las cosas.
Prueba a poner la negrita en el mismo GuiCtrlSetFont, a ver si luego no lo quita.
Y si lo quita pon el GuiCtrlSetFont después de iniciar el efecto si es posible, si se pone cabezota ¡para cabezota tú! ;-)
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Ximorro »

Acabo de probarlo ¡simplemente pon la negrita antes del efecto!
Me respeta perfectamente el GUICtrlSetFont($label, 9, 800, -1, "Courier New") antes del efecto (el 800 es la negrita).

Quizás haya efectos que lo tocan, desde luego los hay que cambian el color o el tamaño, pero en tres que he probado no había problema. Aquí muestro uno con y sin negrita, en el mismo label además:

Código: Seleccionar todo

#include "text_effects.au3"

$guiwin = GUICreate("Test", 500, 100)
$label = GUICtrlCreateLabel("", 25, 25, 450, 60)
GUICtrlSetFont(-1, 9, 400, -1, "Courier New")
GUISetState()

_txt_eff__enlarge_from_left($guiwin, $label, "Este texto sale sin negrita...", 75, -1)
Sleep(1500)
GUICtrlSetFont($label, 9, 800, -1, "Courier New")
_txt_eff__enlarge_from_left($guiwin, $label, "...¡y este con negrita! ;-)", 75, -1)
Sleep(1500)
Hay que probar más... :smt077
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Jonny »

Hola

Hhhhmmmm...

Yo lo hacía con la función _txt_eff__style(), que vamos, mi inglés es muy malo, y el del traductor de yahoo parece que no es tampoco muy bueno jaja, pero se deja decir, que es para darle estilo a un texto ¿no?..:

; Description: Sets the text italic, underlined or bold.


A ver como lo has hecho tú, si a tí no te ha dado problemas, no creo que me los vaya a dar amí.

Salu2!
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Chefito »

Bueno, he hecho un ejemplo de una marquesina que va de derecha a izquierda. He empleado tres métodos distintos. Uno mueve un control label, otro va añadiendo un caracter cada vez, y el último utiliza gdi+.
El que mueve el label falla un poco en el refresco, el de los caracteres es un poco brusco, y el que utiliza gdi+ es practicamente perfecto. Este último es muy suave y casi no tiene fallos de refresco.

Os dejo el código para que compareis y veais los resultados por vosotros mismos:

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <windowsconstants.au3>
#include <StructureConstants.au3>
#include <GDIPlus.au3>

Global Const $width=400,$height=400
GUICreate("Ejemplos de marquesina.",$width,$height);, -1,-1, -1,$WS_EX_COMPOSITED)	;con este estilo la primera marquesina parpadea menos (doble buffer para repintar).

;código inicial para marquesina por desplazamiento de un control label.
AdlibRegister("marquesina",20)
Global Const $wlabel1=2100, $poslb1=60
Global $mensaje,$c2=1
Local $c1=$width+100
GUICtrlCreateLabel("MARQUESINA DE DCHA. A IZQ. MOVIENDO UN LABEL:", 10, 10, 350,40) 
GUICtrlSetFont(-1,10)
GUICtrlSetColor(-1,0xff0000)
$label1=GUICtrlCreateLabel("Esto es un texto de prueba en AutoIt que se mueve de derecha a izquierda. Lo que se hace es mover un control label con un texto.", $width, $poslb1,$wlabel1,50) 
GUICtrlSetFont(-1,26)

;código inicial para marquesina por desplazamiento del texto caracter a caracter.
Global Const $wlabel2=2450
Local $velocidad=150
AdlibRegister("marquesina2",$velocidad)
$Mensaje="          Esto es un texto de prueba en AutoIt que se mueve de derecha a izquierda. Lo que se hace es mover un texto caracter a caracter.                                                    "
$textlen=StringLen($mensaje)
GUICtrlCreateLabel("MARQUESINA DE DCHA. A IZQ. CARACTER A CARACTER:", 10, 120, 370,40) 
GUICtrlSetFont(-1,10)
GUICtrlSetColor(-1,0xff0000)
$label2=GUICtrlCreateLabel("", -($wlabel2) + $width, 170,$wlabel2,50,$SS_RIGHT) 
GUICtrlSetFont(-1,26)

;código inicial para marquesina por desplazamiento del texto utilizando GDI+.
Global Const $wlabel=$width, $hlabel=45, $posText=$width+80
Global $contador=$posText, $rect
Global $String = "Esto es un texto de prueba en AutoIt que se mueve de derecha a izquierda. Lo que se hace es mover un texto por medio de GDI+."

GUICtrlCreateLabel("MARQUESINA DE DCHA. A IZQ. CON GDI+:", 10, 230, 350,40) 
GUICtrlSetFont(-1,10)
GUICtrlSetColor(-1,0xff0000)
$label3=GUICtrlCreateLabel("",0,280,$wlabel,$hlabel)
$hwnd=GUICtrlGetHandle($label3)

_GDIPlus_Startup()
$graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
$bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
$backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
$family = _GDIPlus_FontFamilyCreate("Arial")
$hfont = _GDIPlus_FontCreate($family, 26)
$hformat = _GDIPlus_StringFormatCreate()
$rect = _GDIPlus_RectFCreate($posText, 0, $wlabel, $hlabel)
;Con estas tres líneas averiguamos el tamaño en pixeles del texto (bastante práctico para saber cuando pasa todo el texto ;) ).
$rect2 = _GDIPlus_RectFCreate()
$ainfo = _GDIPlus_GraphicsMeasureString ($Graphics, $String, $hFont, $rect2, $hFormat)
$anchoTextoPixel = DllStructGetData($ainfo[0], "width")

$colorTexto = _GDIPlus_BrushCreateSolid(0xff000000)

AdlibRegister("marquesina3",10)

GUISetState(@SW_SHOW)

While 1
   $msg = GUIGetMsg()
   If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()

_GDIPlus_GraphicsDispose($graphics)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_GraphicsDispose($backbuffer)
_GDIPlus_FontFamilyDispose($family)
_GDIPlus_FontDispose($hfont)
_GDIPlus_StringFormatDispose($hformat)
_GDIPlus_BrushDispose($colorTexto)
_GDIPlus_Shutdown()


Func marquesina()
   $c1=$c1-2
   GUICtrlSetPos($label1,$c1,$poslb1)
   If $c1=-$wlabel1 Then $c1=$width+50
EndFunc

Func marquesina2()
   $texto=StringLeft($Mensaje,$c2)
   GUICtrlSetData($label2,$texto)
   $c2=$c2+1
   If $c2>$textlen Then $c2=1
EndFunc

Func Marquesina3()
   $contador=$contador-1
   _GDIPlus_GraphicsClear($backbuffer,0xffd4d0c8)
   $rect = _GDIPlus_RectFCreate($contador)
   _GDIPlus_GraphicsDrawStringEx($backbuffer, $String, $hfont, $rect, $hformat, $colorTexto)
   _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)
   If $contador<-$anchoTextoPixel Then $contador=$postext
EndFunc
Por supuesto se podra hacer de más formas.
El código gdi+ es algo complicado (incluso para mi). Por fortuna esto no se pasa de dificil :smt002 . Yo veo que el gdi+ es uno de los temas más dificiles de tratar, pero poco a poco y pegandose con el al final se van consiguiendo cosas :smt024 .

Con gdi+ se puede hacer que el texto haga muchas cosas, pero eso ya es algo más complicado.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Jonny »

hola

Vaaale, Me pondré a mirar las funciones gdi+, para entender el código...
Jejeje.

Un máquina Chefito, como siempre.

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Ximorro »

Este Chefito es una máquina.
Pero Jonny, creo que los dos primeros efectos deberías haberlos implementado tú, que practicando también se aprende. :smt002

Por cierto, el primer efecto se puede hacer parpadear menos (al menos en XP funciona seguro) usando el estilo extendido EX_COMPOSITED:

Código: Seleccionar todo

Global $WS_EX_COMPOSITED = 0x02000000
GUICreate("Ejemplos de marquesina.",$width,$height, -1,-1, -1,$WS_EX_COMPOSITED)
Con GDI se pueden hacer maravillas, pero es extremadamente engorroso de manejar, gracias Microsoft :-(
Y eso que no te has molestado en liberar recursos (supongo que se liberarán solos al cerrar el programa) que si no se hace el doble de largo...
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Jonny »

Hola

Por casualidad, GDI no tendrá que ver con Direct X ¿Verdad?... jejejeje.
Supongo, que a la hora de hacer efectos que queden bien, por lo visto lo mejor es esta udf, aunque parece que es para pensárselo, jaja.

Salu2!
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Chefito »

Gracias. Me alegra que os haya gustado :smt023 .
Ximorro escribió:Pero Jonny, creo que los dos primeros efectos deberías haberlos implementado tú, que practicando también se aprende.
Totalmente deacuerdo con Ximorro. Jonny, muchas veces haces preguntas innecesarias, sin haber siquiera probado los códigos, ni haber intentado hacer algo :smt011 . Tienes que intertar hacer tú las cosas, buscar en internet, calentarte un poco la cabeza. Incluso colgar algo de código, que muchisimas veces no lo haces.
Tendrías que tener ya presente estas cosas, que llevas bastante por aquí :smt016 .
Yo veo que como hagas algo alguna vez, vas a tener que ponerme siempre en los créditos, porque mucho código es mío :smt005 :smt016 :smt016 .
Ximorro escribió:Por cierto, el primer efecto se puede hacer parpadear menos (al menos en XP funciona seguro) usando el estilo extendido EX_COMPOSITED
Muy bueno Ximorro :smt023 . Ya ni me acordaba de este estilo que utiliza doble buffer para pintar.
Lo iba a poner en el código, pero me descolocaba los objetos y al final simplemente lo he dejado comentado.
Ximorro escribió:Con GDI se pueden hacer maravillas, pero es extremadamente engorroso de manejar, gracias Microsoft :-(
Puffffff, ya os digo. Programar con estas funciones cosas gráficas es una odisea (por lo menos para mí) :smt024 :smt024 . Pero bueno, mirando muchos ejemplos, la ayuda, internet, etc se van consiguiendo cosillas :smt003 .
Ximorro escribió:Y eso que no te has molestado en liberar recursos (supongo que se liberarán solos al cerrar el programa) que si no se hace el doble de largo...
Es verdad, se me paso :smt016 . Hombre...el doble de largo no jajajajaja :smt003 , pero si unas cuantas líneas más.
Bueno, lo he puesto en el código. Supongo que no me haya dejado nada sin liberar :smt017 .
Como se suele decir, las cosas bien hechas, bien hechas están :smt033 .
Jonny escribió:Por casualidad, GDI no tendrá que ver con Direct X ¿Verdad?... jejejeje.
GDI+, DirectX, OpenGL, etc son librerías distintas para tratar gráficos 2D, 3D, sonidos, imágenes, videos, etc (multimedia). Cada uno hace unas cosas u otras. Tienen distintas funciones y distintas caracteristicas.
Para más información, la red, google, wiki, etc.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Ximorro »

Por cierto Jonny, no creas que te estamos atacando, llevas mucho por aquí (más que yo desde luego) así que eres de la familia. Pero de verdad que tengo muchas ganas de ver tus códigos ¡seguro que tienes muchas cosas interesantes!

Estuve empezando a mirar sobre DirectX, en realidad me interesaba DirectDraw, que es la parte para dibujar en 2D... ¡pero resulta que ha desaparecido! Ahora está todo integrado en Direct3D así que eso lo han complicado... para lo que quería hacer en ese momento lo hice con GDI+, mirando mucho en los foros porque yo sólo no lo habría hecho ni de coña, pero al menos hay más información de eso que de Direct3D (y más si lo que quieres es pintar unos simples cuadrados en el escritorio... jope, que no hace falta matar moscas a cañonazos...

Por cierto, he hecho lo del texto haciendo olas ;-) voy a ver si encuentro la entrada original y lo pongo allí, porque no es un desplazamiento izda-drcha.

Por cierto, no, el doble no, ¿pero te parece poco esto?

Código: Seleccionar todo

_GDIPlus_GraphicsDispose($graphics)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_GraphicsDispose($backbuffer)
_GDIPlus_FontFamilyDispose($family)
_GDIPlus_FontDispose($hfont)
_GDIPlus_StringFormatDispose($hformat)
_GDIPlus_BrushDispose($colorTexto)
_GDIPlus_Shutdown()
De todas maneras no veo tan crítico limpiar cosas al final del programa, donde se hace sólo una vez, pero por ejemplo si haces una función que dibuja una línea, tienes que estar constantemente creando y destruyendo colores, plumillas (pen), etc... ¡en cada llamada!
Un co*azo
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Jonny »

Hola

Que va, no digo eso, ni mucho menos.

Sí que pregunto muchas cosas, algunas con intención de implementar en códigos, otras por aquello de aprender (porque me parece que pueden servirme para cosas que me gustaría programar)...

Porque el principal problema que tengo desde que empecé con AutoIt, es la documentación, que a diferencia de otros lenguajes, es escasa y breve.

Estoy acostumbrado, a manuales de lenguajes como Php, C, donde te explican la sintaxis del lenguaje, y te dan algo de teoría (normalmente) sobre lo que te explican.

Si por ejemplo te explican a escribir un bucle for, te dicen cual es su sintaxis, y además te explican para que sirve, en que casos podría implementarse... etc.

En autoit, hasta ahora, tenía la ayuda del autoit 2, y traducida al estilo Google. He llegado a dominar bastantes cosas de este lenguaje, porque las conocía de antes, de Php o C, y tan solo he tenido que aprender la sintaxis, sinó ... lo veo bastante complicado. De hecho, he animado a varias personas que no han visto una sola línea de programación, a aprender autoit, y justo por lo escaso de la documentación no han llegado lejos...

Menos mal, que he descubierto que ya está la ayuda de la versión 3.3.6.0 de AutoIt traducida, y eso ayuda bastante, porque mi inglés es muy malo.

Además, se nota que tú y Chefito, no solo dominais muy bien AutoIt, sinó que habeis estudiado algo de informática, donde seguro habeis dado programación, y eso tiene que notarse jejeje.

Yo, en la mayoría de cosas de autoit, me defiendo. El problema es, a la hora de tocar cosas como apis, objetos de windows, etc, que no lo domino tanto. sí, en internet puede encontrarse información sobre todo esto, pero lo difícil, es encontrar buena documentación, porque en muchos sitios sí, pueden explicar por ejemplo la implementación de una función de user32.dll, pero si lo hacen dando por hecho que el que lee sabe qué es un handle, un tipo entero etc y da la casualidad que no lo sabe, se queda igual que sin haber leido nada.

No creas, que todas las aplicaciones que pienso en hacer, o me gustaría hacer, las acabo haciendo ¡ojalá tuviera tantísimo tiempo!, pero alguna haré. De hecho, en unos días subiré una, que instala automáticamente los drivers del pc, que ya puse un post por aquí para ello... Pues ¡verás el código!. Aunque, quizá es de poca utilidad, pero bueno, con este programa estoy aprendiendo cosas sobre controles, ventanas externas, y todo eso, que también es importante para hacer luego otras aplicaciones más útiles.

¡Voy a mirar el efecto de las olas!
Desde luego, ¡tú también eres un máquina!, aún llevando menos tiempo que yo por aquí.

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Ximorro »

Hombre AutoIt no es que tenga tan poca ayuda, la ayuda siempre es mejorable pero no está mal, el problema puede ser que no está completa en castellano (problema que Novi y su equipo están atacando con un esfuerzo encomiable).

Ciertamente en lenguajes más antiguos como C o más famosos como php hay mucha más documentación, pero tampoco creas que viene de los creadores, sino que se ha ido creando de gente que colabora en foros como este o gente que da clases y crea tutoriales y cosas así.

Tampoco estoy muy de acuerdo en que cuando te pongan un For te tengan que decir para qué sirve, la verdad es que sí te lo dicen, en la ayuda te explica muy bien cómo funciona el bucle, ¡pero no te va a decir en qué programas tienes que usarlo!

Eso son cosas de programación en general, y si ya las usas en C (aunque ahí la sintaxis es bastante diferente) ya te haces una idea de cuándo te es últil un For, un While, un IF, etc...

Sí, desde luego tengo formación académica, realmente no manejo tanto AutoIt, pero he manejado mucho otros (ya no, ahora programa en cosas muy raras y específicas y si me tuviera que meter con C++ seguro que flipaba). Está claro que la experiencia de programar en general te ayuda a programar en lenguajes específicos. Pero te puedo decir una cosa ¡¡AutoIt es un lenguaje muy simple y sencillo!!
Seguro que te has llevado las manos a la cabeza, pero dices que has programado en C... ¡sólo tienes que compararlos!, el bonito C, con sus punteros, su salida estándar, sus accesos fuera de array o string sin enterarte... ;-)

OTRA COSA es que AutoIt da un acceso directo a la funcionalidad interna de Windows, pero AutoIt lo que te da es una manera de acceder a funciones dentro de DLL (DLLCall y compañía), y eso es relativamente fácil de usar, ¡el problema es usar la DLL particular o la API general! (¡¡mira por ejemplo GDI+!!). La culpa no es de AutoIT, sino de esas APIs. Y un handle, ya que pones el ejemplo, es precisamente algo en principio ajeno a AutoIt, que usa tipos de datos muy sencillos, lo han tenido que poner precisamente para interactuar con estas dll que lo requieren.

No tiene sentido que AutoIT te esté explicando qué es un handle, eso tiene que hacerlo la documentación de la libreria ¡busca en la MSDN!, pero comprenderás que tampoco te lo pueden explicar en cada función que usa un handle, eso sería repetirlo miles de veces, en algún sitio se hablará de los tipos de datos y ahí lo explicarán. Para AutoIT es un número (más o menos) que es capaz de almacenar en sus variables para que puedas pasarlo de unas funciones a otras...

Yo por ejemplo manejo AutoIt bastante bien, por lo que comento que no me resulta complicado trabajar con lenguajes iterativos (empecé a programar en la vieja época del BASIC), pero por ejemplo como no conozco mucho las API (a diferencia del máquina de Chefito) muchas veces no se me ocurre como hacer ciertas cosas porque AutoIt no las ofrece directamente, pero sí te abre las puertas a usar esas dll del sistema. El problema no es el conocimiento de AutoIt, sino de la API de Windows...

Saludossssss
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Jonny »

Hola

jajajaja, no hombre, no digo que te digan en qué programas usar un for, y un while, pero que te expliquen un poco la teoría de ese tipo de bucle (la diferencia entre el que te estén explicando y el resto de bucles que contemple el lenguaje quizá sería demasiado) pero bueno, un ejemplillo de implementación (no en cuanto a sintaxis, que ya los hay, sinó escenarios de implementación (mostrar los números del 0 al 9), por ejemplo) no iría mal... Porque estoy deacuerdo con tigo, en que AutoIt, es un lenguaje sencillo, pero para quienes hemos tenido experiencia previa de programación en otros lenguajes, donde nos han explicado más o menos un poco de teoría sobre las instrucciones generales de la programación (condiciones, bucles, funciones, etc) para quién no haya programado nunca y se ponga con AutoIt, por su sencillez, se le puede hacer un mundo (sí, menos mal que ya tenemos más documentación en castellano).

A lo que me refería con que la ayuda de este lenguaje es muy breve es por ejemplo a la función AdlibRegister, cuya descripción se limita a:
Registra una función Adlib.
Si has estudiado informática, y más concretamente algo de programación, puedes haber estudiado que és una función Adlib, o teóricamente tienes más probabilidades de saberlo, igual que si lo has visto en algún manual de programación de otro lenguaje, pero ´sino, te quedas a cuadros. Por eso decía, lo que suele verse en manuales de C, php, etc, donde de haber visto una función equivalente, seguramente habría visto una explicación más o menos acertada de lo que es una función Adlib, y para qué puede usarse. Por cierto, totalmente deacuerdo, en que esa documentación a la que me refiero, no suele ser la original del lenguaje que sea. Quizá, no me expresé bien, y en realidad lo que pasa, es que AutoIt no está tan superestandarizado como C, PHP, VB, etc, y por eso escasea la documentación.

Para mí, el problema no es aprender AutoIt, sinó como dices, todo aquello que permite usar, que no es propio del lenguaje, como apis, etc, que entiendo que no explique en la documentación de AutoIt (sería interminable la ayuda), pero esque, buscar en la msdn, puede ser tan pesadilla como usar una api, sobre todo, porque abunda más la documentación en inglés que en castellano...
Por eso, cuando tengo que leer la ayuda de una función de AutoIt que sirve para interactuar con software ajeno a AutoIt, me pierdo bastante.
Con las apis, me pasa un poco lo mismo que atí, se que pueden hacerse cientos, miles de cosas con ellas, pero no se por donde empezar a usarlas.

Salu2!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Ximorro »

A ver, que tienes una buena parte de razón, pero creo que eres demasiado estricto.
¿Crees que alguien que no tiene ni idea de programación, alguien que no distingue un For de un While, lo va a tener más fácil programando en Java que en AutoIt, por ejemplo?
Ciertamente para Java hay mucha más documentación y tutoriales, pero te aseguro que como lenguaje AutoIt es 100 veces más sencillo.
¿cuántas líneas tiene el efecto de las ondas? menos de 50 si quitamos la cabecera, ¡adelante, hazlo en java! ;-)

Y bueno, la documentación como digo siempre es mejorable, pero mira por donde en el FOR sí ponen un ejemplo parecido al que dices, allí cuentan de 5 a 1 hacia atrás.
Un ejemplo simple, y sí, podría haber más, pero ya que estamos con java mírate los javadoc de Sun, ¡el 99'9% de las funciones no viene con ejemplos!

Y en lo de Adlib, bueno, sigue leyendo, que eso que has puesto es el resumen de la funcionalidad, luego te explica los parámetros y lo que devuelve (sólo con eso averiguas mogollón de cosas sobre la función, al ver qué le pasas y qué hace con ello). Y después hay unas notas donde precisamente te da ejemplos de uso. Lo tengo en inglés pero supongo que en castellano también lo habrán puesto.

Luego el ejemplo no es muy últil, la verdad, al menos en AdlibEnable que es lo que veo, no sé si habrán mejorado la de AdlibRegister.

Pero vaya, que tan tan malo no es.

Y aprender se aprende mucho analizando ejemplos, yo soy de los que se pegan mogollón y prefiero sacar las cosas por mí mismo, pero he aprendido muchísimo en el foro, no se trata de que te resuelvan una duda, se trata de ver cómo la han resuelto y aprender a hacerlo tú mismo. Así vas aprendiendo técnicas de programación en general, y cómo se hacen las cosas en AutoIt en particular.

Con las API... la MSDN ciertamente podría ser mejor, yo normalmente lo que me ocurre es que no sé que ciertas cosas existen, así que ni se me ocurre por dónde buscar. Eso también pasa con AutoIt, por ejemplo con las UDF que vienen (que son librerías añadidas, no es realmente el lenguaje, que como digo es muy simple, sino cosas hechas con ese lenguaje). En ese caso conviene pasarse por la ayuda para ver qué UDF hay, así ves por ejemplo que hay cosas para el clipboard, algunos controles gráficos, ftp, Explorer, SQLite... Quizás ahora no me haga falta, pero si en un futuro tengo que hacer algo con el portapapeles es bueno saber que ahí hay algo a mirar.

Y luego está GDI+, eso no lo maneja verdaderamente bien ni su padre, ja, ja,ja.

Deberíamos haber puesto estas cosas en el foro de chat, espero que no nos den un tirón de orejas... :smt003

Ciaoooo
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: desplazar texto de izquierda a derecha con text_effects.au3

Mensaje por Jonny »

Hola

Si tú también, tienes razón, en que AutoIt es muy sencillo y la documentación por supuesto, siempre podría ser peor. Por supuesto, alguien que no tenga ni idea de programación, aprendería antes a programar en autoit, aunque yo creo, que lo difícil de la programación, no es tanto la sintaxis (que es lo fácil de autoit) sinó, quizá un poco los conceptos, saber aplicar una u otra cosa, estructurar código....
Realmente, es verdad, que la ayuda en inglés es mucho más buena que la que yo tenía, y ahora traducida la de la penúltima versión, pues sinceramente, se ve todo de otra forma. Solo se me resisten algunas funciones como las adlib, que aunque he leído toda la ayuda sobre esas funciones ... me quedo igual y las funciones bit (esas porque son matemáticas de un nivel considerable) y siempre me he llevado muy mal con las matemáticas, jeje.

Es verdad, la mitad del hilo tendría que ir en Chat :P.

Salu2!
Responder