FMG Editor
Moderator: Rathinagiri
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
FMG Editor
Hola Claudio, gracias por tu ejemplo, creo que esta cuestion de mostrar con el BT_BitmapCaptureWindow vá a ser la salida para este caso del Coords.
Estoy todavia ajustandolo pero me encuentro con un detalle en la nueva funcion Paint_Coords():
If _IsWindowDefined ("Form_Coords") .and. hb_IsNumeric (GetFormHandle ("Form_Coords"))
hDC := BT_CreateDC ("Form_Coords", BT_HDC_INVALIDCLIENTAREA, @BTstruct)
BT_DrawBitmap (hDC, (0-nBorderWidth), (0-nBorderWidth), NIL, NIL, BT_COPY, hBitmap)
BT_DeleteDC (BTstruct)
Endif
Este BT_HDC_INVALIDCLIENTAREA puede ser ajustado ? Por lo que entiendo este toma el area donde irá inserido la figura. Resulta que por artificio de implantar ListBox en algo que se asemeja un ToolBar, me está comiendo un pedacito de la pantalla. No es nada tan grave, pero me gustaria que empezara apartir de: Eso porque crié manualmente este efecto de borde: Pero si esto exige mucha implementacion, buscaria de pintarlo nuevamente. Solo no sé si vá a hacerlo encima de la imagen capturada.
Está quedando bien con este nuevo enfoque, solo estoy renegando con algunos métodos que no puedo hacer que me funcionen:
1. SetFocus para que retorne cuando LOSTFOCUS.
2. Otro ejemplo es:
Si defino una funcion para el evento GOTFOCUS del window, este no me funciona cuando la ventana es MODAL y clico en otra ventana. Sabemos que esto es para comportarse asi, pero me gustaria que de alguna forma, algun otro evento se pudiera clicar fuera del form Zoom y que accionase una funcion. Seria para poder capturar en el clipboard el color que fué capturado. Esto ya lo hago pero en ventana no MODAL, pero si deja de ser MODAL, esta pierde foco y yo no quisiera esto. Quiero que el usuário pueda salir con ESC, porque la ventana del Zoom seria para tomar el color y quedarse a espera de otras capturas.
Voy a disponibilizar el código para que pueda ser testeado y ver lo que me recomendás. De lo contrário, dejaré esa ventana de ser MODAL y haré que en el evento LOSTFOCUS salga del Zoom, que lo encierre. Lo estraño que si intento abrir por segunda vez, me dá el mensaje de error diciendo que la ventana Form_Zoom ya está "already defined"...
ChangeLog:
It was added Coords and Get_Color with zoom.
Selectable compenets like MonthClaendar, Tab, Slider, RadioGroup, Browse and Grid now are selectables by ONGOFOCUS event.
<Attached files was removed. Please see last message with updated files.>
Estoy todavia ajustandolo pero me encuentro con un detalle en la nueva funcion Paint_Coords():
If _IsWindowDefined ("Form_Coords") .and. hb_IsNumeric (GetFormHandle ("Form_Coords"))
hDC := BT_CreateDC ("Form_Coords", BT_HDC_INVALIDCLIENTAREA, @BTstruct)
BT_DrawBitmap (hDC, (0-nBorderWidth), (0-nBorderWidth), NIL, NIL, BT_COPY, hBitmap)
BT_DeleteDC (BTstruct)
Endif
Este BT_HDC_INVALIDCLIENTAREA puede ser ajustado ? Por lo que entiendo este toma el area donde irá inserido la figura. Resulta que por artificio de implantar ListBox en algo que se asemeja un ToolBar, me está comiendo un pedacito de la pantalla. No es nada tan grave, pero me gustaria que empezara apartir de: Eso porque crié manualmente este efecto de borde: Pero si esto exige mucha implementacion, buscaria de pintarlo nuevamente. Solo no sé si vá a hacerlo encima de la imagen capturada.
Está quedando bien con este nuevo enfoque, solo estoy renegando con algunos métodos que no puedo hacer que me funcionen:
1. SetFocus para que retorne cuando LOSTFOCUS.
2. Otro ejemplo es:
Si defino una funcion para el evento GOTFOCUS del window, este no me funciona cuando la ventana es MODAL y clico en otra ventana. Sabemos que esto es para comportarse asi, pero me gustaria que de alguna forma, algun otro evento se pudiera clicar fuera del form Zoom y que accionase una funcion. Seria para poder capturar en el clipboard el color que fué capturado. Esto ya lo hago pero en ventana no MODAL, pero si deja de ser MODAL, esta pierde foco y yo no quisiera esto. Quiero que el usuário pueda salir con ESC, porque la ventana del Zoom seria para tomar el color y quedarse a espera de otras capturas.
Voy a disponibilizar el código para que pueda ser testeado y ver lo que me recomendás. De lo contrário, dejaré esa ventana de ser MODAL y haré que en el evento LOSTFOCUS salga del Zoom, que lo encierre. Lo estraño que si intento abrir por segunda vez, me dá el mensaje de error diciendo que la ventana Form_Zoom ya está "already defined"...
ChangeLog:
It was added Coords and Get_Color with zoom.
Selectable compenets like MonthClaendar, Tab, Slider, RadioGroup, Browse and Grid now are selectables by ONGOFOCUS event.
<Attached files was removed. Please see last message with updated files.>
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- srvet_claudio
- Posts: 2193
- Joined: Thu Feb 25, 2010 8:43 pm
- Location: Uruguay
- Contact:
Re: FMG Editor
Pablo proba con esto:
Code: Select all
Public hBitmap := BT_BitmapCaptureWindow ("Form_Main", GetBorderHeight()/2-1, GetBorderWidth()/2-1, NIL, 80)
Code: Select all
BT_DrawBitmap (hDC, 0, 0, NIL, NIL, BT_COPY, hBitmap)
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
FMG Editor
Entendi. Mejoró en el posicionamiento con:
Y removi el:
Despues de redibujar el border, funcionó perfecto !
Gracias Claudio !
Sobre el LostFocus, quisiera ejecutar algo (Zoom_Paste()) y retornar al foco del Form_Zoom. Pero parece algo imposible. Ya tenté vários comandos y lo único que más o menos llega a hacer lo que quiero:Removí el MODAL en la ventana Form_Zoom. E esta funcion la llamo en el ON LOSTFOCUS. Es ridiculo, porque preciso minimizar/restaurar, posicionar en el X y simular un click de mouse para que cierre la ventana. Porque si lo hago atravéz del Release, la definicion del form aun queda vigente mismo cerrado.
Code: Select all
Public hBitmap := BT_BitmapCaptureWindow ("Form_Main", (GetBorderHeight()/2)+1, (GetBorderWidth()/2)+1, NIL, 80)
Code: Select all
SET WINDOW Form_Main TRANSPARENT TO 1
Gracias Claudio !
Sobre el LostFocus, quisiera ejecutar algo (Zoom_Paste()) y retornar al foco del Form_Zoom. Pero parece algo imposible. Ya tenté vários comandos y lo único que más o menos llega a hacer lo que quiero:
Code: Select all
Function Zoom_Paste()
Local cZoomColor := "{"+GetProperty("Form_Zoom","Label_2","Value")+"}"
Local hwnd := GetFormHandle("Form_Zoom")
Local aPos := GetCursorPos()
SetClipboard( cZoomColor )
_SetItem ( 'StatusBar' , "Form_Main" , 3 , cZoomColor )
Minimize( hwnd )
Restore( hwnd )
SetCursorPos( Form_Zoom.Width-(GetBorderWidth()+13), Form_Zoom.Row+(GetTitleHeight()-13) )
PressMouse(.t.)
SetCursorPos( aPos[2], aPos[1] )
// SetForegroundWindow( hwnd ) +/-
// SetFocus( hwnd )
// ShowWindow( hwnd )
// DoMethod("Form_Zoom","Label_1","SetFocus")
// BringWindowToTop( hwnd )
Return Nil
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
FMG Editor
Hola Claudio,
Disculpame por molestarte con esto. Es que me rebenté todo, buscando una solución para el caso que ejemplifico aqui.
La dificultad que yo tenia para retornar a la ventana Form_Zoom, ya la resolví, implentando su retorno en la funcion My_Trigger(). Funciona bien. Pero cuando tengo ningun fmg cargado, yo quisiera que se comporte de forma similar que el Coords. Es decir, que el fondo de la venta Main, quede transparente (pero solo la parte griz) y pueda capturar los colores del fondo que es exibido en bitmap através de tu funcion BT_BitmapCapture... pero no estoy consiguiendo.
Adjunto la ultima version para que puedas revisar que es lo que estoy haciendo errado en PickupColor() cuando lo llamo sin haber cargado cualquier fmg.
<Attached files was removed. Please see last message with updated files.>
Disculpame por molestarte con esto. Es que me rebenté todo, buscando una solución para el caso que ejemplifico aqui.
La dificultad que yo tenia para retornar a la ventana Form_Zoom, ya la resolví, implentando su retorno en la funcion My_Trigger(). Funciona bien. Pero cuando tengo ningun fmg cargado, yo quisiera que se comporte de forma similar que el Coords. Es decir, que el fondo de la venta Main, quede transparente (pero solo la parte griz) y pueda capturar los colores del fondo que es exibido en bitmap através de tu funcion BT_BitmapCapture... pero no estoy consiguiendo.
Adjunto la ultima version para que puedas revisar que es lo que estoy haciendo errado en PickupColor() cuando lo llamo sin haber cargado cualquier fmg.
<Attached files was removed. Please see last message with updated files.>
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
When one form could not be SetFocused
Lamentablemente no consegui adaptarlo cuando FMG_Editor está sin fmg cargado. Para la otra opcion, es decir, cuando tiene algun fmg cargado, funciona perfectamente el KillFocus.
Creo que tendré que hacerlo atravez de BT_BitmapCapture como lo hicimos con Coords.
Creo que tendré que hacerlo atravez de BT_BitmapCapture como lo hicimos con Coords.
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
When one form could not be SetFocused
Hé intentado con:
Pero no captura lo que quiero...
Lo capturado, lo grabé en archivo y me viene asi:
Code: Select all
...
If Empty(cLastActiveForm)
SET WINDOW Form_Main TRANSPARENT TO COLOR {171,171,171}
// SET WINDOW Form_Main TRANSPARENT TO 1 // I wish to show Form_Main
Public hBitmap := BT_BitmapCaptureDesktop ( nChildTop, 0, nWidth, nChildHeight)
BT_BitmapSaveFile (hBitmap, "DESKTOP.bmp")
Endif
DEFINE WINDOW Form_Zoom At nChildTop, 00 Width nW Height nH...
---
Function Zoom_Paint (nT,nR,nW,nH)
Local hDC, BTstruct
If Empty(cLastActiveForm)
hDC := BT_CreateDC ("Form_Main", BT_HDC_INVALIDCLIENTAREA, @BTstruct)
// hDC := BT_CreateDC (hBitmap, BT_HDC_BITMAP, @BTstruct)
BT_DrawBitmap (hDC, 0, 0, NIL, NIL, BT_COPY, hBitmap)
// BT_DrawBitmap (hDC, nR, 00, nW, nH, BT_COPY, hBitmap)
BT_DeleteDC (BTstruct)
Endif
Lo capturado, lo grabé en archivo y me viene asi:
- Attachments
-
- DESKTOP.png (29.52 KiB) Viewed 4909 times
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- srvet_claudio
- Posts: 2193
- Joined: Thu Feb 25, 2010 8:43 pm
- Location: Uruguay
- Contact:
Re: FMG Editor
Perdoname Pablo pero no te entiendo.Pablo César wrote:Hola Claudio,
Disculpame por molestarte con esto. Es que me rebenté todo, buscando una solución para el caso que ejemplifico aqui.
La dificultad que yo tenia para retornar a la ventana Form_Zoom, ya la resolví, implentando su retorno en la funcion My_Trigger(). Funciona bien. Pero cuando tengo ningun fmg cargado, yo quisiera que se comporte de forma similar que el Coords. Es decir, que el fondo de la venta Main, quede transparente (pero solo la parte griz) y pueda capturar los colores del fondo que es exibido en bitmap através de tu funcion BT_BitmapCapture... pero no estoy consiguiendo.
Adjunto la ultima version para que puedas revisar que es lo que estoy haciendo errado en PickupColor() cuando lo llamo sin haber cargado cualquier fmg.
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
FMG Editor
Claudio, talvez para que me entienda mejor, empezá a leer apartir de este mensaje (porque estaban en el otro tópico).srvet_claudio wrote:Perdoname Pablo pero no te entiendo.
Traje para aqui los dos mensajes pertinentes a este tema que estaban en este tópico (para no mezclar asuntos).
Este asunto, está resolvido, con la funcion KillFocus que hiciste, pero me resolvió el problema solo en partes, es decir en la situacion en que el aplicativo FMG_editor carga algun archivo fmg.Pablo César wrote:Disculpame por molestarte con esto. Es que me rebenté todo, buscando una solución para el caso que ejemplifico aqui.
La dificultad que yo tenia para retornar a la ventana Form_Zoom, ya la resolví, implentando su retorno en la funcion My_Trigger(). Funciona bien.
Ahora me falta resolver cuando el aplicativo no haya cargado ningun archivo fmg. Asi como fué con Coords, te acordás ? Que pusimos la pantalla capturada y resolvió ? Bueno quiero hacer lo mismo para la funcion PickupColor() y este no tenga cargado cualquier fmg.Pablo César wrote:Pero cuando tengo ningun fmg cargado, yo quisiera que se comporte de forma similar que el Coords. Es decir, que el fondo de la venta Main, quede transparente (pero solo la parte griz) y pueda capturar los colores del fondo que es exibido en bitmap através de tu funcion BT_BitmapCapture... pero no estoy consiguiendo.
El KillFocus me resolvió para el caso cuando tengo cargado algun archivo fmg en el aplicativo FMG_Editor. Pero no me funcionó para el caso cuando tengo la pantalla transparente y hace foco de ventana externas al aplicativo.
En la funcion KillFocus() consigo identificar cuando hace foco en otra ventana que no sea del sistema atravez de:
If "(HOTKEY)" $ GetWindowInfoByHandle (hWndGotFocus)
Pero no logro retornar hacer foco. Creo que la salida debe ser atravez de BT_BitmapCapture asi como hace +/- el Coords.
Te adjunto de nuevo, lo ultimo que hice en mis intentos para cargar el fondo en forma de imagen capturada.
<Attached files was removed. Please see last message with updated files.>
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
FMG Editor
Buen dia Claudio,
En lugar de esto:
Quisiera que me venga esto: Y que tambien no permita hacer foco en la ventana del Notepad++ y ni de la IDe (por ejemplo).
Sé que andás ocupado, respondeme cuando puedas. No consigo capturar de forma adecuada.
En lugar de esto:
Quisiera que me venga esto: Y que tambien no permita hacer foco en la ventana del Notepad++ y ni de la IDe (por ejemplo).
Sé que andás ocupado, respondeme cuando puedas. No consigo capturar de forma adecuada.
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein