FMG Editor

Utilities like DBU, Make, IDE written in HMG/ used to create HMG based applications

Moderator: Rathinagiri

User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

FMG Editor

Post by Pablo César »

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:
Screen.PNG
Screen.PNG (81.75 KiB) Viewed 4963 times
Eso porque crié manualmente este efecto de borde:
Screen1.PNG
Screen1.PNG (26.76 KiB) Viewed 4963 times
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.
Screen2.PNG
Screen2.PNG (33.21 KiB) Viewed 4963 times
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
User avatar
srvet_claudio
Posts: 2193
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: FMG Editor

Post by srvet_claudio »

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) 
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

FMG Editor

Post by Pablo César »

Entendi. Mejoró en el posicionamiento con:

Code: Select all

Public hBitmap := BT_BitmapCaptureWindow ("Form_Main", (GetBorderHeight()/2)+1, (GetBorderWidth()/2)+1, NIL, 80)
Y removi el:

Code: Select all

SET WINDOW Form_Main TRANSPARENT TO 1
Despues de redibujar el border, funcionó perfecto !

Gracias Claudio ! :D

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
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. :(
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

FMG Editor

Post by Pablo César »

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.>
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

When one form could not be SetFocused

Post by Pablo César »

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.
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

When one form could not be SetFocused

Post by Pablo César »

Hé intentado con:

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
Pero no captura lo que quiero... :(

Lo capturado, lo grabé en archivo y me viene asi:
Attachments
DESKTOP.png
DESKTOP.png (29.52 KiB) Viewed 4802 times
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
User avatar
srvet_claudio
Posts: 2193
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: FMG Editor

Post by srvet_claudio »

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.
Perdoname Pablo pero no te entiendo.
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

FMG Editor

Post by Pablo César »

srvet_claudio wrote:Perdoname Pablo pero no te entiendo.
Claudio, talvez para que me entienda mejor, empezá a leer apartir de este mensaje (porque estaban en el otro tópico).

Traje para aqui los dos mensajes pertinentes a este tema que estaban en este tópico (para no mezclar asuntos).

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.
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: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.
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.

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
User avatar
Pablo César
Posts: 4059
Joined: Wed Sep 08, 2010 1:18 pm
Location: Curitiba - Brasil

FMG Editor

Post by Pablo César »

Buen dia Claudio,

En lugar de esto:
Image

Quisiera que me venga esto:
(esta imagen fué elaborada en el paint)
(esta imagen fué elaborada en el paint)
Screen.PNG (69.1 KiB) Viewed 4797 times
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
User avatar
mol
Posts: 3718
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

FMG Editor

Post by mol »

What about your work,Pablo?
Post Reply