Page 1 of 2

Labels and OnMouseHover

Posted: Mon Jun 20, 2016 8:19 am
by mol
Hi guys!
I was interested if there is a method to create use interface similar to webpage, where label color is changed on mouse hover.
I want to share small sample which realize this idea.
Thanks to Andyglez for his tip

Code: Select all

// OnMouseHover demo
// 2016.06.20 Marek Olszewski

#include "hmg.ch"

Function Main

	private aLabelColors := { => }
	
	aLabelColors [ "KAFEL1" ] := {100,100,100}
	aLabelColors [ "KAFEL2" ] := {100,200,0}
	aLabelColors [ "KAFEL3" ] := {0,200,200}
	
	// turn off case sensitive hash keys matching
	hb_HCaseMatch(aLabelColors, .F.)
	
	DEFINE WINDOW Form_Main ;
		AT 0,0 ;
		WIDTH 640 HEIGHT 600 ;
		TITLE 'Main Window' ;
		MAIN 

		@ 60,10 LABEL KAFEL1 ;
			WIDTH 200 HEIGHT 200 ;
			VALUE "OPTION 1";
			BACKCOLOR aLabelColors [ "KAFEL1" ];
			CENTERALIGN
			
		@ 60,220 LABEL KAFEL2 ;
			WIDTH 200 HEIGHT 200 ;
			VALUE "OPTION 2";
			BACKCOLOR aLabelColors [ "KAFEL2" ];
			CENTERALIGN
			
		@ 270,220 LABEL KAFEL3 ;
			WIDTH 200 HEIGHT 200 ;
			VALUE "OPTION 3";
			BACKCOLOR aLabelColors [ "KAFEL3" ];
			CENTERALIGN

		@ 270,10 LABEL KAFEL4 ;
			WIDTH 200 HEIGHT 200 ;
			VALUE "STATIC OPTION NOT COLORIZED";
			BACKCOLOR {255,255,255};
			CENTERALIGN

	END WINDOW

	CENTER WINDOW Form_Main

	CREATE EVENT PROCNAME OnMouseHover( EventWPARAM(), "FORM_MAIN" )  HWND Form_Main.Handle
	
	ACTIVATE WINDOW Form_Main

Return 
*---------------------
function OnMouseHover
	param hWnd, cFormName
	
	LOCAL cControl := ""
	LOCAL cForm := ""
	static cPrevious := ""
	
	GetControlNameByHandle( hWnd, @cControl, @cForm )
		
	if empty(cControl)
		if !empty(cPrevious)
			// set oryginal color to previous control
			SetProperty(cFormName, cPrevious, "BackColor",aLabelColors [ cPrevious ])
			//to prevent flickering
			cPrevious := ""
			return
		endif
	endif
	
	// to avoid errors - eliminate changes for absent controls in aLabelColors array
	if HB_HPOS( aLabelColors,  cControl) == 0
		return
	endif

	
	if !empty(cPrevious)
		// to avoid flickering
		if !(cControl == cPrevious)
			SetProperty(cFormName, cPrevious, "BackColor",aLabelColors [ cPrevious ])
		endif
	endif

	SetProperty(cForm, cControl, "BackColor",{255,255,0})
	cPrevious := cControl
return
I was proposed additional feature for LABEL control to Claudio for vertical center align.
In connection with this, It's possible to create interface similar to Windows 10 or www page.
Image

Nice testing!

Re: Labels and OnMouseHover

Posted: Mon Jun 20, 2016 9:24 am
by mustafa
Hola amigo Mol:
Felicidades por su aportación
Una pregunta en mi PC Windows 10 Home 64 bits
al compilar me salen la letras en la cabecera
del recuadro.
Como hago para bajarlas más al centro del recuadro.
saludos
*-------------------------------------------------------*
Hello friend Mol:
Congratulations on your contribution
A question on my PC Windows 10 Home 64-bit
when compiling I get the letters in the head
of the box.
As I do to lower them closer to the center of the box.
regards
Mustafa

Re: Labels and OnMouseHover

Posted: Mon Jun 20, 2016 9:35 am
by mol
Positioning in the middle of label needs modification of hmg h_label.prg and c_label.c library files.
I've duplicated _definelabel funcction to MOL_DefineLabel - sources in attachment.

Re: Labels and OnMouseHover

Posted: Mon Jun 20, 2016 9:46 am
by mustafa
OK, thanks

Regards

Re: Labels and OnMouseHover

Posted: Mon Jun 20, 2016 9:53 am
by mol

Code: Select all

MOL_DefineLabel("KAFEL3","Form_Main", 220, 270, "My option nr 3", 200, 200,;
						"ARIAL",14, .t., .F., .T.,;
						.f., .f., .f., aLabelColors [ "KAFEL3" ], {64,64,64},;
						NIL,"kafel 3",NIL, .f., .f.,;
						.f., .f., .f. , .F. , .t. ,;
						.f.,.F.,.T.)
Last parameter causes center vertical alignment.
It's important - label defined with center vertical alignment does not supports word wrapping.

Re: Labels and OnMouseHover

Posted: Mon Jun 20, 2016 11:17 am
by serge_girard
Thanks Marek !

Serge

Re: Labels and OnMouseHover

Posted: Mon Jun 20, 2016 11:52 am
by Rathinagiri
Nice addition. I think we can include this in the next version.

Re: Labels and OnMouseHover

Posted: Mon Jun 20, 2016 12:29 pm
by bpd2000
Rathinagiri wrote:Nice addition. I think we can include this in the next version.
+1

Re: Labels and OnMouseHover

Posted: Mon Jun 20, 2016 6:01 pm
by danielmaximiliano
Gracias por compartir Mol !!!!

Re: Labels and OnMouseHover

Posted: Sun Nov 20, 2016 2:55 pm
by trmpluym
Rathinagiri wrote:Nice addition. I think we can include this in the next version.
Would be nice !