PDA

Ver la Versión Completa : [Sintaxis] Activar pantalla de busqueda de Windows


Roger
19 de febrero de 2015, 19:44
Amigos del foro
en un form tengo un cmimagen necesito cuando de click se abra la ventana de windows de busqueda de una imagen y que seleccione y se incruste en este evento.

lo tengo hecho con cmfile y un cmlist pero no le gusta a mi cliente.
http://s2.subirimagenes.com/fotos/previo/thump_9286582zz.jpg

similar al de la imagen

Josber
19 de febrero de 2015, 20:40
Pues así mismo:


ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WTEX PIC X(255) VALUE SPACES.
01 ReturnValue PIC S9(9) COMP-5.
PROCEDURE DIVISION.
INVOKE POW-SELF "GetFileName"
USING WTEX
"Seleccione Imágen ..."
"Imágen JPG|*.jpg|Imágen BMP|*.bmp"
POW-CDOPEN
RETURNING ReturnValue
END-INVOKE.

IF ReturnValue = POW-TRUE
MOVE WTEX TO "ImageName" OF IMAGEN
MOVE POW-FALSE TO "Resource" OF IMAGEN
INVOKE IMAGEN "Refresh"
END-IF.



A mi me funciona perfectamente ...

Un saludo

Roger
19 de febrero de 2015, 21:10
Gracias JOSBER
Eso es lo que necesitaba una ayuda como puedo enviar solo el nombre del archivo en una variable porque la variable WTEX esta toda la ruta ejem "d:\sis-vet\fotos\cardiologia.jpg" a parte necesito solo el nombre del archivo "cardiologia.jpg"
para grabar en otra carpeta con un nombre diferente.
lo vuelvo a grabar con
CALL "CBL_COPY_FILE" USING RUTA1 NUEVO RETURNING STATUS-CODE.
a foto lo púeden seleccionar de diferentes carpetas y las rutas no tendran la misma forma. existe otra forma de grabar?? SIN TENER QUE USAR EL WINUSER.dll

Josber
20 de febrero de 2015, 08:11
Pues creo que no puede ser el nombre solo y la librería, la necesitas, porque es a la que "llama" el GetFileName, en cuanto a lo otro, con una simple rutina puedes hacerlo


ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WTEX.
03 WT PIC X OCCURS 255.
01 I PIC 999 VALUE 255.
01 I1 PIC 999 VALUE 0.
01 ReturnValue PIC S9(9) COMP-5.
PROCEDURE DIVISION.

INITIALIZE WTEX.

INVOKE POW-SELF "GetFileName"
USING WTEX
"Seleccione Imágen ..."
"Imágen JPG|*.jpg|Imágen BMP|*.bmp"
POW-CDOPEN
RETURNING ReturnValue
END-INVOKE.

IF ReturnValue = POW-TRUE
MOVE WTEX TO "ImageName" OF IMAGEN
MOVE POW-FALSE TO "Resource" OF IMAGEN
INVOKE IMAGEN "Refresh"
END-IF.

PERFORM VARYING I FROM 255 BY -1
UNTIL WT (I) = "\" OR I = 0
CONTINUE
END-PERFORM.

COMPUE I1 = FUNCTION STORED-CHAR-LENGTH (WTEX).

MOVE WTEX (I:I1) TO ...



Un saludo

Roger
20 de febrero de 2015, 17:18
se agradece lista la rutina.

Josber

*
INVOKE POW-SELF "GetFileName"
USING WTEX
"Seleccione Imágen ..."
"Imágen JPG|*.jpg|Imágen BMP|*.bmp"
POW-CDOPEN
RETURNING ReturnValue
En estos codigo se selecciona 2 tipos de imagen jpg y bmp pero en el buscador sale separado por tipo de imagen ¿Se puede hacer que los 2 tipos se muestre junto tanto .bmp como jpg?

Kuk
25 de febrero de 2015, 20:34
Josber

*
INVOKE POW-SELF "GetFileName"
USING WTEX
"Seleccione Imágen ..."
"Imágen JPG|*.jpg|Imágen BMP|*.bmp"
POW-CDOPEN
RETURNING ReturnValue
En estos codigo se selecciona 2 tipos de imagen jpg y bmp pero en el buscador sale separado por tipo de imagen ¿Se puede hacer que los 2 tipos se muestre junto tanto .bmp como jpg?

Roger, no entiendo que quieres decir. En este OpenDialog se te van a mostrar todos los archivos con extension *.jpg y *.bmp, los dos! No entiendo esto de "por separado"...

Roger
26 de febrero de 2015, 05:37
Kuk
En el OpenDialog te muestra primero todos los archivo con terminacion .jpg y abajo hay una pestaña
donde puedes seleccionar .jpg o .bmp

Necesito que ambos se muestren un primer plano

ejemplo 000101.jpg 000102.jpg 102545.bmp 1036555.jpg 104658.bmp ......

sin necesidad de selecionar .jpg o .bmp
http://sia1.subirimagenes.net/img/2015/02/26/150226054320122702.jpg

Josber
26 de febrero de 2015, 06:22
Creo que no puede ser Roger.

Un saludo.-

Kuk
26 de febrero de 2015, 09:11
Debe ser una movida de Windows 8 porque yo lo he hecho y creo recordar que mostraba todos (vamos tal y como lo quieres tu) en Windows XP y en Windows 7 creo que tambien. Miraré esta tarde en casa a ver...

Josber
26 de febrero de 2015, 19:00
Roger, a ver si es ésto lo que necesitas:


INVOKE POW-SELF "GetFileName"
USING WSFILE
"Por favor, Indique el nombre de la Imágen"
"(Archivo Imágen)|*.bmp;*.jpg;*.png;*.tif"
POW-CDOPEN
RETURNING RETORNO
END-INVOKE.


Con ésto no te muestra un desplegable con los tipos de extensión, pero si te muestra todos los archivos que coinciden con la extensiones definidas.

Un saludo.-

Kuk
26 de febrero de 2015, 19:27
Josber, exacto! Es eso, hay que ponerlos todos juntos!!!

Hrmcobol
6 de agosto de 2015, 14:46
Hola Amigos !!, Siguiendo con este tema del GetFileName, hay alguna manera de poder dirigir el comando, para que abra una carpeta en particular?

Saludos

Kuk
6 de agosto de 2015, 18:24
Hrmcobol, creo que si le mueves la ruta antes a la variable donde te la devuelve, (si existe dicha ruta), se abre en ella.

Hrmcobol
6 de agosto de 2015, 19:20
Yo también creía eso, pero no es así, o yo estoy haciendo al mal, siempre trae el ultimo path visitado, esto quiere decir que se debe poder cambiarlo. Seguiré investigando y te cuento.

Saludos

lumalma
22 de septiembre de 2016, 11:09
Hola

Retomo este antiguo tema.

Cambio la carpeta actual mediante cbl_change_dir2 desde un form. Pero al hacer GetFileName en otro form no me lleva a la carpeta a la que he cambiado.
Alguien ha conseguido algun avance?

Gracias y saludos

Kuk
22 de septiembre de 2016, 11:28
lumalma, dónde estás haciendo exactamente el cambio? En teoría, si es en un Form padre, cambiará también para los Form hijo pero no lo contrario.

Es decir, si haces el cambio en el MainForm, cambiaría para todos los hijos. Pero si lo haces en un Form hijo, creo que el MainForm quedará donde estaba.

lumalma
22 de septiembre de 2016, 11:58
Hola Kuk

El cambio de carpeta lo hago en un proyecto externo en el que tengo todas las llamadas a rutinas "cbl_....". Pero no cambia.
Pero si guardo un fichero en una carpeta en otro form, esa carpeta se queda como la actual.
Espero haberme explicado mejor que antes.

Gracias y saludos

Kuk
22 de septiembre de 2016, 13:24
lumalma, yo nunca he usado la rutina CBL para cambio de directorio actual. En general, no cambio nunca el directorio porque puede llevar a consecuencias graves. Siempre trabajo con directorios absolutos, es decir, indicando explícitamente la ruta exacta de cada fichero.

Si miras el PowerCOBOLReference.pdf, verás lo que se dice de la rutina de dialogo de ficheros "GetFileName" (página 294) :


Folder Group
Whether the current folder is changed when the user changes folders.
POW-CDCHANGEDIR: (The default) Changes the current folder.
POW-CDNOCHANGEDIR: Does not change the current folder.


O sea que para que NO cambia de directorio, hay que indicarlo expresamente con POW-CDNOCHANGEDIR. En caso contrario, el directorio cambia (opción por defecto: POW-CDCHANGEDIR)

Si se trata de un proyecto externo, por narices debe ser una DLL por lo tanto con Form(s) hijo. Si es un ejecutable, peor aún, se trata de otro Thread (flujo) de ejecución.

La filosofía del asunto es, que yo sepa, la que he descrito en mi post anterior. Yo creo que es por eso que no te funciona.

Haz pruebas con ello en el MainForm y fíjate si el Form hijo sigue en el mismo directorio o no. Y haz lo contrario, cambiando el directorio en el Form hijo y comprueba dónde apunta el MainForm.

lumalma
22 de septiembre de 2016, 16:23
Hola Kuk

Gracias por tus respuestas Kuk

Ya habia leido todo lo referente al metodo GetFileName.
Mi problema es que quiero guardar un archivo con unos datos y quiero que por defecto al hacer GetFileName me lleve a una carpeta concreta para indicar el nombre del archivo. Y no se me ocurre otra forma.

Saludos

Kuk
22 de septiembre de 2016, 17:40
lumalma, acabo de probarlo. Efectivamente no funciona con GetFileName, pero funciona con GetFolderName.

Puedes crear tu propio dialogo "Guardar Archivo" con CmFolder y CmFile. O usa el GetFolderName.

También se puede cambiar la CurrentPath vía WinAPI, si te interesa.