video — u_pbt_video #
← Referencia de componentes · Índice de la guía
Reproductor de vídeo: un archivo del equipo — servido en flujo por la DLL, una película larga empieza enseguida — o una URL, con la barra de transporte del componente, que sigue el tema: reproducción, búsqueda, tiempo, silencio, volumen. Subtítulos WebVTT, cartel antes de la reproducción, bucle, velocidad, encuadre, captura del fotograma actual en PNG o JPEG. Todo lo que el usuario hace en la barra, su aplicación lo sabe.
▶ Verlo en vivo — Aplicación de demostración, mosaico Video player: la película, el código que la controla y esta página, lado a lado (conexión a Internet necesaria para la película de ejemplo).
De un vistazo #
| Userobject | u_pbt_video |
| Clase de items | — (componente sin items) |
| Sirve para | Una película de formación en la aplicación, el vídeo de un producto, la reproducción de una grabación, un bucle de presentación en un stand |
| Principio | Un <video> del motor WebView2: todos los formatos que decodifica (mp4, webm, m4v, mov, mkv). La barra es del componente; sus gestos pasan por los mismos verbos que sus llamadas, por tanto los mismos eventos |
| Dependencia | El runtime WebView2, ya requerido por la biblioteca — nada más |
Inicio rápido #
// A film of the workstation, streamed by the DLL : starts at once
uo_video.is_poster = "img\packimages.dll:PNG/COVER" // shown until the film starts
uo_video.is_subtitles = "films\training.vtt"
uo_video.of_play(/*source*/ "films\training.mp4")
// A URL plays the same way
uo_video.of_play(/*source*/ "https://www.w3schools.com/html/mov_bbb.mp4")
// The user pauses from the bar, or your code does : either way ue_paused fires
uo_video.of_pause()
uo_video.of_seek(/*ms*/ 90000) // to 1:30, in milliseconds
Todo lo que se ajusta es una propiedad (is_source, ii_volume, ib_loop…), leída en directo del componente; todo lo que se hace es un método (of_play, of_pause, of_stop, of_seek, of_capture); todo lo que ocurre es un evento (ue_started, ue_ended, ue_progress…). Un archivo ausente no es una excepción: ue_failed lo dice, y el mensaje se muestra sobre la imagen.
Propiedades #
| Propiedad | Tipo | Predeterminado | Función |
|---|---|---|---|
is_source | string | "" | La película: un archivo del equipo (cualquier ruta, en flujo) o una URL https. Una dirección http:// se rechaza (ue_failed, REASON_INSECURE): el motor la promueve a https y falla — descargue antes la película (restclient, of_download). Formatos: mp4, webm, m4v, mov (una película de iPhone o de cámara en H.264), mkv y los formatos de audio; avi, wmv y flv se rechazan por su nombre (REASON_FORMAT). Fijarla detiene lo que sonaba; ib_autoplay decide si la nueva arranca sola. Una película de cualquier tamaño, también en una aplicación de 32 bits: la DLL la sirve por tramos, nunca el archivo entero de una vez; una película que el motor no puede decodificar la señala ue_failed. Una NUEVA película deja atrás lo que pertenecía a la anterior: su segmento, sus subtítulos, marcadores y capítulos (fijados antes de cualquier película, esperan a la primera); una película de la lista conserva sus propios subtítulos |
ib_autoplay | boolean | false | Arranca la película en cuanto se fija is_source; si no, espera a of_play, la barra o el teclado, y muestra is_poster |
ib_muted | boolean | false | Silencia el sonido, volumen conservado; el botón de la barra y la tecla M también lo fijan |
ii_volume | integer | 100 | Volumen en porcentaje, 0 a 100; también el control de la barra y las flechas arriba/abajo |
ib_loop | boolean | false | Repite la película en bucle hasta of_stop; una película en bucle nunca lanza ue_ended |
ii_rate | integer | 100 | Velocidad en porcentaje, 25 a 400: 50 = mitad, 200 = doble, el sonido sigue |
is_stretch | string | "uniform" | Encuadre: STRETCH_NONE, STRETCH_FILL, STRETCH_UNIFORM, STRETCH_UNIFORMTOFILL — los cuatro modos de una imagen |
ib_controls | boolean | true | La barra de transporte del componente, con el tema. false la oculta: su ventana controla la película |
is_poster | string | "" | El cartel mostrado antes de la película: archivo, URL o pack.dll:NOMBRE, como el origen de una imagen. Un prefijo mono:/tint:/white:/black: recolorea una imagen monocroma al tema |
is_subtitles | string | "" | Un archivo de subtítulos, local o URL https: WebVTT (.vtt) o SubRip (.srt, convertido — UTF-8, UTF-16 o la página de códigos ANSI del equipo). Una URL la DESCARGA el componente: su servidor debe permitir CORS (GitHub, un CDN lo hacen); un rechazo, o una URL http://, lo dice ue_subtitles_failed y la película sigue. Una pista; of_add_subtitles apila varias. Pertenece a la película: un nuevo is_source lo quita |
is_subtitle_lang | string | "" | La pista de subtítulos mostrada (un idioma de of_add_subtitles); vacío = ninguna |
ii_fps | integer | 25 | Imágenes por segundo de la película, para of_step_frames |
ib_remember_position | boolean | false | Recuerda dónde se dejó cada película y reanuda ahí en el siguiente of_play de la misma fuente |
is_theme_style | string | "" | Estilo visual del componente (constantes THEME_STYLE_*); vacío = el de la aplicación, seguido en cada cambio |
is_theme_mode | string | "" | Variante clara u oscura (constantes THEME_MODE_*); vacío = la de la aplicación, seguida en cada cambio |
il_theme_accent | long | -1 | Color de acento de este componente (-1 = acento de la aplicación, o el del tema) |
is_tooltip | string | "" | Tooltip simple mostrado al pasar el ratón por el componente |
is_super_tooltip_title | string | "" | Título del tooltip enriquecido (prevalece sobre is_tooltip) |
is_super_tooltip_text | string | "" | Texto del tooltip enriquecido (se acepta el marcado enriquecido) |
is_super_tooltip_image | string | "" | Imagen del tooltip enriquecido |
ib_enabled | boolean | true | false: imagen atenuada, barra y teclado inertes — salvo Escape en pantalla completa: siempre se puede salir; su código sigue mandando |
ib_scrub_preview | boolean | true | Una burbuja de tiempo sigue el cursor sobre la barra (true, por defecto), con el capítulo si los hay. false la oculta |
ib_pause_when_hidden | boolean | true | Pone la película en pausa cuando el componente está OCULTO (otra página de un tab o de un dock PBToolboxAI, PBT_SetVisible): ue_paused sigue, y la película espera of_play, nunca se reanuda sola. false la deja reproducirse (un muro de pantallas). Un Tab NATIVO de PowerBuilder no avisa al componente: llame a of_pause en su SelectionChanged |
Un clic en la imagen pausa, un segundo reanuda. Teclado, cuando la película tiene el foco: Espacio o K reproducir/pausa, ←/→ cinco segundos, ↑/↓ volumen, M silencio, Inicio/Fin.
Métodos #
| Método | Función | |
|---|---|---|
of_play ( ) → long | Reproduce is_source desde donde está: desde el principio la primera vez, desde la pausa después (ue_resumed). Devuelve 0 una vez enviado, -2 si el componente no está creado | |
of_play (string as_source) → long | Fija is_source y la reproduce: la misma llamada que la del reproductor de sonido. Devuelve 0 una vez enviado, -1 sin componente | |
of_pause ( ) → long | Suspende la película donde está; of_play la retoma. Devuelve 0 una vez enviado, -1 sin componente | |
of_stop ( ) | Detiene la película y vuelve a su inicio; sigue ue_stopped | |
of_seek (long al_ms) → long | Se sitúa en una posición de la película, en milisegundos, en reproducción o no; un archivo local busca enseguida. ue_seeked sigue, como con la barra. Devuelve 0 una vez enviado, -2 si el componente no está creado | |
of_is_playing ( ) → boolean | Verdadero mientras una película está en curso — pausa incluida, no ha terminado | |
of_is_paused ( ) → boolean | Verdadero mientras la película está suspendida — por of_pause, la barra o el teclado | |
of_is_buffering ( ) → boolean | Verdadero mientras la película SE REPRODUCE pero espera sus datos — el tiempo que anunció ue_buffering. Leído del componente, nunca de una copia | |
of_duration ( ) → long | Devuelve el número de milisegundos que dura la película, 0 mientras se desconoce | |
of_position ( ) → long | Devuelve el número de milisegundos reproducidos desde el inicio; ue_progress también lo trae cada segundo | |
of_capture (string as_path) → long | Guarda la imagen mostrada ahora, al tamaño de la película: of_capture(as_path, 0). La EXTENSIÓN elige el formato: .jpg o .jpeg escribe un JPEG, todo lo demás un PNG; espera la primera imagen decodificada (10 s como máximo), así que puede seguir directamente a of_play. Devuelve 0 una vez escrita, -4 sin película, con una película que no pudo cargarse, sin imagen a tiempo, cuando una película de otro sitio rechaza sus píxeles o cuando el archivo no se puede escribir, -5 con una ruta vacía o que depende de la carpeta actual (\x, C:x), -2 si el componente no está creado; tras un retorno negativo, of_get_last_error dice por qué. Una ruta relativa se escribe en la carpeta en la que arrancó la aplicación (la carpeta actual al cargar la biblioteca, la misma en el IDE y compilada) | |
of_capture (string as_path, long al_max_width) → long | La misma captura, REDUCIDA a al_max_width píxeles de ancho (alto en proporción): la miniatura de una película 4K no es una imagen 4K. 0 conserva el tamaño de la película. Mismos retornos que of_capture(as_path) | |
of_fullscreen (boolean ab_on) → long | La película en TODO el monitor (la DLL mueve el control a una ventana propia; su ventana no se toca), o de vuelta. Por encima de todo mientras es la ventana activa: Alt+Tab hacia otra aplicación pone esa aplicación delante, y volver a la suya pone de nuevo la película por encima de todo. Doble clic, el botón de la barra, Escape, Alt+F4. Escape sale incluso cuando ib_enabled es falso. Estos gestos y esta llamada lanzan ue_fullscreen_changed (of_is_fullscreen lo lee). Devuelve 0, -2 si el componente no está creado | |
of_is_fullscreen ( ) → boolean | Verdadero mientras la película cubre el monitor | |
of_add_marker (long al_ms, string as_label) → long | Un MARCADOR en la barra: una marca clicable, y ue_marker_reached cuando la película la pasa. Devuelve 0, -5 con una posición negativa, -2 si el componente no está creado | |
of_clear_markers ( ) → long | Quita todos los marcadores. Devuelve 0, -2 si el componente no está creado | |
of_marker_count ( ) → long | Devuelve el número de marcadores | |
of_play_range (long al_from_ms, long al_to_ms) → long | Reproduce UN segmento: al final, ue_ended, o con ib_loop el segmento vuelve a empezar. Devuelve 0, -5 con límites sin sentido, -2 si el componente no está creado | |
of_clear_range ( ) → long | Libera la película de su segmento. Devuelve 0, -2 si el componente no está creado | |
of_step_frames (long al_frames) → long | Avanza o retrocede al_frames imágenes (ii_fps) y pausa; teclas . y , sobre la imagen. ue_seeked sigue, como con las teclas. Devuelve 0, -2 si el componente no está creado | |
of_add_source (string as_source) → long | Añade una película a la LISTA DE REPRODUCCIÓN: la primera pasa a ser is_source (sobre una película fijada antes, salvo que SE ESTÉ REPRODUCIENDO: la lista la sigue entonces al terminar), las siguientes se encadenan solas (ue_source_changed por cada película que sigue, y por la primera cuando esta llamada la carga). Devuelve 0, -5 con una fuente vacía, -2 si el componente no está creado | |
of_add_source (string as_source, string as_subtitles) → long | Añade una película CON su archivo de subtítulos (.vtt o .srt, convertido por la DLL): el subtítulo pertenece a esa película y se muestra solo cuando se reproduce. La forma simple y sin ambigüedad de subtitular una lista. Devuelve 0, -5 con una fuente vacía | |
of_clear_playlist ( ) → long | Vacía la lista; la película en curso continúa. Devuelve 0, -2 si el componente no está creado | |
of_next ( ) / of_previous ( ) → long | La película siguiente o anterior de la lista; of_playlist_index dice dónde está, y ue_source_changed sigue. Devuelve 0, -2 si el componente no está creado | |
of_playlist_count ( ) → long | Devuelve el número de películas de la lista | |
of_playlist_index ( ) → long | Devuelve el índice (desde 1) de la película de la lista en curso, 0 fuera de la lista | |
of_add_subtitles (string as_lang, string as_source) → long | Una pista de subtítulos por idioma: .vtt, o .srt convertido, del equipo o de una URL https (descargada: CORS necesario, ver ue_subtitles_failed). El botón CC de la barra las recorre. Devuelve 0, -5 con una fuente vacía, un idioma ya puesto en la película (of_remove_subtitles antes) o que contiene / o ` | , -2` si el componente no está creado |
of_remove_subtitles (string as_lang) → long | Quita la pista de un idioma de la película en pantalla (y de la película de la lista que se reproduce: no vuelve con of_previous). La pista de is_subtitles se llama default. Devuelve 0, -5 para un idioma que la película no lleva, -2 si el componente no está creado | |
of_subtitle_count ( ) → long | Devuelve el número de pistas de subtítulos | |
of_remembered_position ( ) → long | Devuelve el número de milisegundos donde se dejó is_source (ib_remember_position), 0 si no | |
of_has_output ( ) → boolean | Verdadero si el equipo tiene salida de audio | |
of_add_chapter (long al_ms, string as_title) → long | Un CAPÍTULO (índice): ue_chapter_changed cuando la reproducción entra. of_go_chapter salta (1-based), of_next_chapter / of_previous_chapter los recorren (cada salto lanza ue_seeked y ue_chapter_changed), of_chapter_count / of_chapter_index / of_chapters los leen, of_clear_chapters los vacía. Devuelve 0, -5 si negativo | |
of_clear_chapters ( ) → long | Quita todos los capítulos; la barra y la burbuja de previsualización los olvidan. Devuelve 0, -2 si no está creado | |
of_go_chapter (long al_index) → long | Salta al capítulo al_index (1-based, en el orden de of_add_chapter); of_chapter_index lo lee enseguida, y ue_seeked y luego ue_chapter_changed siguen, como con un clic en la barra. Devuelve 0, -5 para un número menor que 1 o mayor que of_chapter_count(), -2 si el componente no está creado | |
of_next_chapter ( ) → long | Salta al capítulo que sigue a la posición actual; of_chapter_index lo lee enseguida, y ue_seeked y luego ue_chapter_changed siguen. Desde el último capítulo nada se mueve. Devuelve 0, -2 si no está creado | |
of_previous_chapter ( ) → long | Salta al capítulo anterior al que está la reproducción; of_chapter_index lo lee enseguida, y ue_seeked y luego ue_chapter_changed siguen. Desde el primer capítulo nada se mueve. Devuelve 0, -2 si no está creado | |
of_chapter_count ( ) → long | Devuelve el número de capítulos de la película (of_add_chapter), 0 sin ninguno | |
of_chapter_index ( ) → long | Devuelve el número (1-based) del capítulo donde está la reproducción, 0 antes del primero o sin capítulos. Leído en vivo | |
of_chapters (ref long al_ms[], ref string as_titles[]) → long | Rellena los capítulos en orden — la posición de cada uno en ms en al_ms, su título en as_titles — para construir un menú propio; un título puede contener cualquier carácter. Devuelve el número, 0 sin capítulos | |
of_picture_in_picture (boolean ab_on) → long | La película en una ventana flotante propia (true) o de vuelta (false); ue_pip_changed sigue, como cuando el usuario cierra la ventanita. of_is_pip dice si flota, of_pip_available si el equipo lo permite. Devuelve 0, -2 si no está creado | |
of_is_pip ( ) → boolean | Verdadero mientras la película flota en su ventana Picture-in-Picture; falso de nuevo cuando el usuario la cierra | |
of_pip_available ( ) → boolean | Verdadero si el motor y el equipo permiten el Picture-in-Picture: pregúntelo antes de ofrecer el botón |
Eventos #
| Evento | Cuándo |
|---|---|
ue_started (long al_duration_ms) | La película empieza de verdad; la longitud cuando el archivo la indica, 0 si no |
ue_ended (boolean ab_truncated) | La película terminó por sí misma; ab_truncated verdadero cuando el límite demo la cortó |
ue_failed (string as_message, string as_reason) | La película no pudo reproducirse. as_reason lo dice en una palabra que su código comprueba: REASON_INSECURE (una fuente http://), REASON_FORMAT (avi, wmv, flv, o un formato que el motor declara ilegible), REASON_UNSUPPORTED (archivo ausente o contenedor no decodificable), REASON_DECODE, REASON_NETWORK, REASON_NO_SOURCE, REASON_FAILED; as_message es el texto mostrado sobre la imagen |
ue_stopped ( ) | of_stop cortó una película en curso |
ue_paused ( ) / ue_resumed ( ) | La película se suspende, luego se reanuda — por su código, la barra o el teclado indistintamente; también cuando el componente se oculta (ib_pause_when_hidden) |
ue_progress (long al_position_ms, long al_duration_ms) | Una vez por segundo durante la reproducción: lo que una barra de progreso suya necesita, sin timer |
ue_seeked (long al_position_ms) | La posición se movió: el usuario (barra, flechas, marcador) o su código — of_seek, of_step_frames y las funciones de capítulo también lo lanzan, como el gesto |
ue_volume_changed (long al_percent) | El usuario giró el volumen; nunca ii_volume |
ue_rate_changed (long al_percent) | El usuario eligió una velocidad en la barra; nunca ii_rate |
ue_subtitles_changed (string as_lang) | El usuario recorrió los subtítulos (CC); vacío = ninguno |
ue_muted_changed (boolean ab_on) | El usuario silenció (true) o devolvió (false) el sonido — el altavoz de la barra, la tecla M; nunca ib_muted |
ue_fullscreen_changed (boolean ab_on) | La película pasó a pantalla completa, o volvió: doble clic, el botón, Escape, Alt+F4, o of_fullscreen. of_reset nunca lo lanza |
ue_marker_reached (long al_ms, string as_label) | La película pasa un marcador |
ue_source_changed (long al_index, string as_source) | La lista de reproducción pasa a otra película: sola, al terminar la anterior, o por of_next, of_previous y el primer of_add_source |
ue_chapter_changed (long al_index, string as_title) | La reproducción entra en otro capítulo (of_add_chapter): su número (1-based, 0 antes del primero) y su título; también cuando el usuario o su código (of_go_chapter, of_next_chapter, of_previous_chapter) salta ahí |
ue_pip_changed (boolean ab_on) | La película entró (true) en la ventana Picture-in-Picture o salió de ella (false): el usuario la cerró, el motor puso ahí la película por sí solo, o of_picture_in_picture lo pidió (of_is_pip lo lee) |
ue_subtitles_failed (string as_lang, string as_reason) | Un archivo de subtítulos no pudo cargarse: una URL https cuyo servidor rechaza CORS o responde un error (REASON_NETWORK, REASON_NOT_FOUND), una URL http:// (REASON_INSECURE). La pista se quita, la película sigue |
ue_buffering (boolean ab_on) | La película SE REPRODUCE pero debe esperar sus datos más de un cuarto de segundo (true) — una red lenta, un salto lejos en una película de una URL: un anillo con el acento del tema gira sobre la imagen — luego la espera termina (false): la película sigue, o se ha pausado, detenido, sustituido, o ha fallado. of_reset nunca lo lanza |
Pantalla completa, marcadores, segmento, imagen por imagen #
- Pantalla completa.
of_fullscreen(true), un doble clic en la imagen o el último botón de la barra. La DLL mueve el control a una ventana propia que cubre el monitor; su ventana PowerBuilder no se toca, y Escape (o Alt+F4) devuelve la película. Solo queda por encima de todo mientras es la ventana activa: Alt+Tab hacia otra aplicación pone esa aplicación delante, y volver a la suya pone de nuevo la película por encima de todo. Escape sale incluso cuandoib_enabledes falso.ue_fullscreen_changeddice cada cambio, en ambos sentidos: estos gestos del usuario comoof_fullscreen. - Marcadores.
of_add_marker(ms, etiqueta)pone una marca en la barra: el usuario la ve, la sobrevuela (la etiqueta), la clica (la película salta ahí,ue_seeked), yue_marker_reachedllega cuando la película la pasa. Capítulos de una formación, puntos a controlar, defectos detectados. - Segmento.
of_play_range(desde, hasta)reproduce solo un extracto; conib_looplo repite hastaof_clear_range. - Imagen por imagen.
of_step_frames(±n)avanza o retrocede n imágenes aii_fpspor segundo y pausa; las teclas . y , hacen lo mismo. El motor no dice la cadencia de una película: dígala usted. - La barra habla. Cada gesto tiene su evento:
ue_seeked,ue_volume_changed,ue_rate_changed(el botón de velocidad, 0,5× a 2×),ue_subtitles_changed(el botón CC),ue_muted_changed(el altavoz, la tecla M). Un desplazamiento pedido por su código lanza el mismo que el gesto:of_seek,of_step_framesy las funciones de capítulo lanzanue_seeked. Un VALOR fijado por su código queda mudo, comoSetItem:ii_volume,ii_rate,is_subtitle_lang,ib_muted.
// Chapters on the bar, then one extract in a loop
uo_video.of_add_marker(/*ms*/ 2000, /*label*/ "Intro")
uo_video.of_add_marker(/*ms*/ 5000, /*label*/ "The bunny")
uo_video.ib_loop = true
uo_video.of_play_range(/*from_ms*/ 2000, /*to_ms*/ 8000)
// Surveillance : back one picture at a time
uo_video.ii_fps = 30
uo_video.of_step_frames(/*frames*/ -1)
Lista de reproducción, subtítulos, reanudación, formatos #
- Lista de reproducción.
of_add_sourceapila películas; la primera pasa a seris_source, las siguientes se encadenan solas al final de cada una,ue_source_changednombra cada paso.of_nextyof_previousa mano, con el mismo evento:of_playlist_indexdice dónde está la lista. - Lo que pertenece a una película. Su segmento, sus subtítulos, marcadores y capítulos: un nuevo
is_sourcelos deja atrás (fijados antes de cualquier película, esperan a la primera). La lista de reproducción conserva los suyos: el subtítulo dado aof_add_source(película, subtítulo)vuelve con su película. - Varias pistas de subtítulos.
of_add_subtitles(idioma, archivo)por idioma,of_remove_subtitles(idioma)para quitar una;is_subtitle_langelige, el botón CC de la barra las recorre. Un.srtse convierte a WebVTT al servirlo: nada que convertir por su parte. Un subtítulo dado por una URLhttpslo descarga el componente: su servidor debe permitir CORS, si noue_subtitles_failedlo dice y la película sigue sin él. - Reanudación.
ib_remember_position = true: donde se deja una película (pausa, parada) lo guarda el motor en este equipo, por usuario, y el siguienteof_playde la misma fuente reanuda ahí. Una película vista hasta el final vuelve a empezar. - Formatos. Lo que WebView2 decodifica: mp4 (H.264, AAC), webm (VP8, VP9, AV1), mov (el H.264 de un iPhone o de una cámara), mkv (una grabación OBS), y los formatos de audio (mp3, wav, ogg, opus, flac, aac, m4a). No el H.265/HEVC sin la extensión de Windows (un
.movHEVC termina enue_failed, que nombra la extensión), ni AVI, WMV, FLV: el componente los rechaza por su nombre (REASON_FORMAT) en lugar de una pantalla negra. Ni HLS ni DASH: una cámara IP pasa por un flujo mp4 o webm. Solohttps: una direcciónhttp://de intranet se rechaza (REASON_INSECURE) — descargue antes la película (restclient,of_download) o sírvala desde un recurso compartido\\servidor\…. - Varias pistas de audio. Chromium las esconde tras un flag: no expuestas.
// A playlist, each film WITH its subtitles, the position remembered
uo_video.ib_remember_position = true
uo_video.of_add_source(/*source*/ "intro.mp4", /*subtitles*/ "intro.en.vtt")
uo_video.of_add_source(/*source*/ "lesson-1.mp4", /*subtitles*/ "lesson-1.en.srt") // .srt : converted by the DLL
uo_video.of_play()
// A second language for the film on screen : it stays with that film
uo_video.of_add_subtitles(/*lang*/ "fr", /*source*/ "intro.fr.vtt")
uo_video.is_subtitle_lang = "fr"
Ejemplos #
Un bucle de presentación silencioso, sin barra #
// A silent showcase film, in a loop, without its bar
uo_video.ib_controls = false
uo_video.ib_muted = true
uo_video.ib_loop = true
uo_video.is_stretch = u_pbt_video.STRETCH_UNIFORMTOFILL
uo_video.of_play(/*source*/ "films\showcase.mp4")
Sus propios botones y una barra de progreso #
// cb_play.clicked
if uo_video.of_is_paused() or not uo_video.of_is_playing() then uo_video.of_play() else uo_video.of_pause()
// uo_video.ue_progress : once a second, no timer needed
hpb_progress.Position = al_position_ms * 100 / Max(al_duration_ms, 1)
Una miniatura de la película para un informe #
// Stop the film on the picture to keep
uo_video.of_play(/*source*/ "films\training.mp4")
uo_video.of_pause()
uo_video.of_seek(/*ms*/ 15000) // the frame at 0:15
// of_capture waits for the picture itself (10 s at most) : no timer to write.
// A .jpg path writes a JPEG ; 320 : a thumbnail 320 pixels wide.
// A relative path goes to the folder the application started in.
if uo_video.of_capture(/*path*/ "C:\Reports\training.jpg", /*max_width*/ 320) < 0 then MessageBox("Capture", uo_video.of_get_last_error())
Buenas prácticas #
- Un archivo del equipo antes que una URL siempre que pueda: servido en flujo por la DLL, arranca enseguida, busca sin recargar, y
of_capturepuede leer sus píxeles — lo que una película de otro sitio rechaza. - Programe
ue_faileden toda película cuya ruta dependa de los datos: es su única red, y el mensaje ya está en pantalla. - Fije
ib_autoplaysolo para un bucle de presentación: una película que arranca sola con sonido sorprende al usuario; en otros casos bastan el cartel y el botón de reproducción. ue_progresssustituye a un timer: una vez por segundo, posición y longitud, solo durante la reproducción.
Heredado de la base común #
Estos miembros existen en todos los componentes visuales — no son propios de este. Se detallan una sola vez, en los capítulos transversales; esta tabla solo dice dónde leerlos.
| Miembros | Función | Detallado en |
|---|---|---|
of_reset | Poner el componente a cero | 3.6 Poner un componente a cero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Atajos de teclado del componente | 3.5 Los atajos de teclado |
of_is_created · of_is_ready · of_get_last_error | Si ha nacido, si está listo, qué ha fallado | 3.7 Diagnóstico |
of_save_as_png · of_save_as_jpg | Exportar el render como imagen | 3.8 Exportar la representación como imagen |
of_set_redraw | Agrupar los cambios en un solo repintado | 3.10 Buenas prácticas |
of_preload_icons | Iconos mostrados sin retardo | Visualización instantánea: of_icon |
of_set_translation | Traducir una etiqueta del componente | 5.2 Adaptar una etiqueta: of_set_translation |
of_focus_webview | Dar el foco al componente | 6.4 Teclado y foco |
of_print · of_print_to_pdf | Imprimir, o escribir un PDF | 6.9 Imprimir |
of_set_property · of_get_property · of_component_name | Controlar una propiedad por su nombre | 3.1 El motor de propiedades |