Power Builder - Traer como pantalla principal un componente de Windows

 
Vista:

Traer como pantalla principal un componente de Windows

Publicado por Aaron Pacheco (3 intervenciones) el 01/03/2013 17:20:58
Hola

Desarrolle una ventana en PowerBuilder que se encarga de enviar correos electronicos, en la parte del MENSAJE le agregue una funcion para que revise la ortografia, todas estas actividades me las realiza sin problemas pero al momento de mandar a llamar el componente de Windows (Corrector Ortografico) me lo abre pero como si estuviera atras de la aplicacion u oculta, tengo que dar ALT+TAB para pasarme el corrector ortografico y es muy incomodo hacer esta acción. Existe una forma que pueda traer esa ventana (corrector ortografico) al frente como ventana prncipal?????

Espero puedan darme un Tip!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jose Ribera

Traer como pantalla principal un componente de Windows

Publicado por Jose Ribera (9 intervenciones) el 02/03/2013 16:49:53
HOLA

HAS PROBADO CON LA INSTRUCCION SETPOSITION



w_WINDOWS.SetPosition(TopMost!)

UN SALUDO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Traer como pantalla principal un componente de Windows

Publicado por Aarón Pacheco (3 intervenciones) el 04/03/2013 16:34:11
Que tal José! muchas gracias por tu comentario, ya me habian comentado de esa instrucción pero no se deja... surfeando en la WEB encontre la Funcion: FindWindow, creo que es la mas indicada pero aún no logro echarla a volar, no sé, si el nombre de las ventanas ponerlas en ingles o español, es decir, la pantalla propia de Windows como es el Bloc de Notas o en mi caso mas en particular: corrector ortográfico de windows. Pongo el ejemplo:


Declarar: Global External Functions.
PUBLIC FUNCTION unsignedlong FindWindow (string classname, string windowname) LIBRARY "user32.dll" &
ALIAS FOR "FindWindowA"



Script PowerBuilder

ulong hWnd
string ls_title
string ls_class


ls_class = "Bloc de notas"
ls_title = "Sin título - Bloc de notas"

hWnd = FindWindow(ls_class, ls_title)


IF hWnd = 0 THEN
MessageBox("Aviso","0")
ELSE
IF hWnd = 1 THEN
MessageBox("Aviso","1")
END IF
END IF



Seguimos en busca... si le encuentro aviso!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose ribera

Traer como pantalla principal un componente de Windows

Publicado por Jose ribera (9 intervenciones) el 04/03/2013 17:48:04
Segun he podido ver de la funcion que pones esta te da si esta abierta y su handle despues de esto debes llamar a otra funcion que es la que te la posiciona

PUBLIC FUNCTION unsignedlong FindWindow (long classname, string windowname) LIBRARY “user32.dll” ALIAS FOR FindWindowW

PUBLIC FUNCTION int SetForegroundWindow (unsignedlong hwnd) LIBRARY “user32.dll” ALIAS FOR SetForegroundWindowW

/// Then add code like the following to your application’s Open event:

unsignedlong hwnd
hwnd = FindWindow( 0, “Main Window”)

// open the previous instance window and halt
SetForegroundWindow( hwnd )


saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Traer como pantalla principal un componente de Windows

Publicado por Aarón Pacheco (3 intervenciones) el 05/03/2013 00:31:51
José, revisando varias formas por fin encontre la solución a mi problema.

1. Se deben declarar 3 variables global external. Se encargaran de localizar y posteriormente traer a primer plano.

2. Posteriormente el script en PowerBuilder.

Les pongo tal cual el código como esta funcionando y espero sea de ayuda!! Gracias José Ribera!!
----------------------------

Global External Functions:

FUNCTION ULong FindWindowA(ULong classname, String windowname) LIBRARY "user32.dll"
FUNCTION boolean PostMessageA(ulong hwndle,UINT wmsg,ulong wParam,ulong lParam) Library "User32.dll"
FUNCTION Boolean SetWindowPos(long hwnd, long hmode, integer ix, integer iy, integer cx, integer cy, ulong flags) library "user32.dll"



Script PB:


Ulong lul_handle, lul_class
String ls_name

UInt lui_quit = 18


CONSTANT ulong HWND_TOPMOST = -1
CONSTANT ulong SWP_NOSIZE = 1
CONSTANT ulong SWP_NOMOVE = 2
CONSTANT ulong SWP_SHOWWINDOW = 64

long ll_hWnd

SetNull(lul_class)

ls_name = "Ortografía: Español (México)" //AQUI PUEDEN PONER CUALQUIER VENTANA DE WINDOWS, ASEGUREN QUE EL NOMBRE SEA CORRECTO!!

lul_handle = FindWindowA(lul_class, ls_name)

IF lul_handle > 0 THEN

ll_hWnd = lul_handle
SetWindowPos(ll_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE + SWP_SHOWWINDOW)


//PostMessageA(lul_handle, lui_quit, 0, 0);
//return
Else
MessageBox("Aviso", "La aplicación no está en ejecución.")
END IF

-----

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar