Mover controles con el mouse en tiempo de ejecucion

Forum help and suggestions to improve this forum.

Moderator: Rathinagiri

Post Reply
Mario Mansilla
Posts: 269
Joined: Wed Aug 13, 2008 2:35 pm
Location: Córdoba - Argentina

Mover controles con el mouse en tiempo de ejecucion

Post by Mario Mansilla »

Hola amigos :
necesito incorporar la posibilidad de mover de lugar controles label que identifican mesas de un restaurant de acuerdo a la ubicacion en el salon , por ejemplo de la misma manera que funciona nuestro IDE .
Es posible realizar esto en harbour minigui ?

Saludos
Mario Rafael Mansilla

Hello friends :
I need to incorporate the possibility of moving label controls that identify tables in a restaurant according to the location in the room, for example in the same way that our IDE works.
Is it possible to do this in harbor minigui?

regards
Mario Rafael Mansilla
User avatar
danielmaximiliano
Posts: 2611
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: Mover controles con el mouse en tiempo de ejecucion

Post by danielmaximiliano »

Hola Mario. mi ejemplo que esta en minigui crea componentes dentro de un formulario con un control tab genera un Label y un textbox dentro, deberias averiguar la posicion del cursor para que ese control sea ubicado dentro del Form y en esa posicion crear o mover ese componente (en tu caso una mesa que se identifique con un text box, al tener el foco con un dobleclick(propiedad del componente abrir un nuevo formulario para ahi agregar la cosumision de esa mesa)

C:\MiniGUI\SAMPLES\BASIC\Tab_2
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
ASESORMIX
Posts: 190
Joined: Thu Oct 25, 2012 8:08 pm
Location: Bqto, Venezuela

Re: Mover controles con el mouse en tiempo de ejecucion

Post by ASESORMIX »

Revisa este ejemplo:
C:\hmg.3.4.4\SAMPLES\Miscellaneous\MoveResizeControl
Mario Mansilla
Posts: 269
Joined: Wed Aug 13, 2008 2:35 pm
Location: Córdoba - Argentina

Re: Mover controles con el mouse en tiempo de ejecucion

Post by Mario Mansilla »

Hola amigos :
excelente muchas gracias .
Saludos
Mario Mansilla

Hello friends :
                     excellent thank you very much .
regards
Mario Mansilla
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: Mover controles con el mouse en tiempo de ejecucion

Post by andyglezl »

Hola

No es lo mismo, pero igual la idea puede servir...
*---------------------------------------------------------------------
It is not the same, but the idea may still serve ...

mesas.png
mesas.png (32.64 KiB) Viewed 4015 times

Code: Select all

#include <hmg.ch>
FUNCTION Main() 
 	LOCAL nReng := 10  ;  nColu := 10  ;  nVeces := 1
	
	DEFINE WINDOW FormMain AT 0 , 0 WIDTH 1024 HEIGHT 570 MAIN BACKCOLOR BLUE TITLE " M E S A S "
	FOR i1 = 1 TO 10
		FOR i2 = 1 TO 10
			cCtrlPso := "LB_Descrip"+STRZERO( nVeces, 3 )
			// Capturar la Descripcion que se desee...
			@ nReng,nColu TEXTBOX &cCtrlPso. OF FormMain VALUE "Libre" WIDTH 80 HEIGHT 15 FONT "Consolas" SIZE 8 ON ENTER ( ActMesa( This.Name, This.Value ) )
			cCtrlPso := "LB_Mesas"+STRZERO( nVeces, 3 ) 
			@ nReng+16,nColu LABEL &cCtrlPso. OF FormMain VALUE "MESA "+STRZERO( nVeces, 3 ) WIDTH 80 HEIGHT 20 FONT "Consolas" SIZE 12 CENTERALIGN
			nColu += 100
			nVeces += 1
		NEXT
		nColu := 10
		nReng += 50
	NEXT
    END WINDOW
    CENTER WINDOW FormMain
    ACTIVATE WINDOW FormMain
RETURN
FUNCTION ActMesa( cNombre, cDesc ) 
	SetProperty( "FormMain", "LB_Descrip"+RIGHT( cNombre, 3 ), "BACKCOLOR", IF( UPPER( ALLTRIM( cDesc ) ) <> "LIBRE", YELLOW, WHITE ) )
RETURN

O de esta otra manera... (en base a un Mapa)
*--------------------------------------------
Or in this other way ... (based on a Map)

mesas2.png
mesas2.png (23.57 KiB) Viewed 3983 times

Code: Select all

#include <hmg.ch>
FUNCTION Main() 
 	LOCAL nReng := 10, nColu := 10, nVeces := 1, aMapa := ARRAY( 10 )
	
	aMapa[ 1]  := "1111111111" 
	aMapa[ 2]  := "1111111111" 
	aMapa[ 3]  := "1111000011" 
	aMapa[ 4]  := "1110000000" 
	aMapa[ 5]  := "1100000000" 
	aMapa[ 6]  := "1100000000" 
	aMapa[ 7]  := "1110000000" 
	aMapa[ 8]  := "1111000011" 
	aMapa[ 9]  := "1111111111" 
	aMapa[10]  := "1111111111" 
	
	DEFINE WINDOW FormMain AT 0 , 0 WIDTH 1024 HEIGHT 570 MAIN BACKCOLOR BLUE TITLE " M E S A S "
	FOR i1 = 1 TO 10
		FOR i2 = 1 TO 10
			IF SUBSTR( aMapa[ i1 ], i2, 1 ) = "1"  
				cCtrlPso := "LB_Descrip"+STRZERO( nVeces, 3 )
				// Capturar la Descripcion que se desee...
				@ nReng,nColu TEXTBOX &cCtrlPso. OF FormMain VALUE "Libre" WIDTH 80 HEIGHT 15 FONT "Consolas" SIZE 8 ON ENTER ( ActMesa( This.Name, This.Value ) )
				cCtrlPso := "LB_Mesas"+STRZERO( nVeces, 3 ) 
				@ nReng+16,nColu LABEL &cCtrlPso. OF FormMain VALUE "MESA "+STRZERO( nVeces, 3 ) WIDTH 80 HEIGHT 20 FONT "Consolas" SIZE 12 CENTERALIGN
				nColu += 100
				nVeces += 1
			ELSE
				nColu += 100
			ENDIF
		NEXT
		nColu := 10
		nReng += 50
	NEXT
	END WINDOW
    CENTER WINDOW FormMain
    ACTIVATE WINDOW FormMain
RETURN
FUNCTION ActMesa( cNombre, cDesc ) 
	SetProperty( "FormMain", "LB_Descrip"+RIGHT( cNombre, 3 ), "BACKCOLOR", IF( UPPER( ALLTRIM( cDesc ) ) <> "LIBRE", YELLOW, WHITE ) )
RETURN

Andrés González López
Desde Guadalajara, Jalisco. México.
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: Mover controles con el mouse en tiempo de ejecucion

Post by andyglezl »

Con Multiventanas ...
*---------------------------
With Multi-windows ...

mesas3.png
mesas3.png (843.71 KiB) Viewed 3234 times

Code: Select all

#include <hmg.ch>
FUNCTION Main() 
 	LOCAL nReng := 10, nColu := 10, nVeces := 1, aMapa := ARRAY( 10 )
	
	aMapa[ 1]  := "1111111111" 
	aMapa[ 2]  := "1111111111" 
	aMapa[ 3]  := "1111000011" 
	aMapa[ 4]  := "1110000000" 
	aMapa[ 5]  := "1100000000" 
	aMapa[ 6]  := "1100000000" 
	aMapa[ 7]  := "1110000000" 
	aMapa[ 8]  := "1111000011" 
	aMapa[ 9]  := "1111111111" 
	aMapa[10]  := "1111111111" 
	
	DEFINE WINDOW FormMain AT 0 , 0 WIDTH 1024 HEIGHT 570 MAIN BACKCOLOR BLUE TITLE " M E S A S "
		FOR i1 = 1 TO 10
			FOR i2 = 1 TO 10
				IF SUBSTR( aMapa[ i1 ], i2, 1 ) = "1"  
					cCtrlPso := "LB_Descrip"+STRZERO( nVeces, 3 )
					@ nReng,nColu TEXTBOX &cCtrlPso. OF FormMain VALUE "Libre" WIDTH 80 HEIGHT 15 FONT "Consolas" SIZE 8  ;
								  ON ENTER ( ActMesa( This.Name, This.Value ) )
					cCtrlPso := "LB_Mesas"+STRZERO( nVeces, 3 ) 
					@ nReng+16,nColu LABEL &cCtrlPso. OF FormMain VALUE "MESA "+STRZERO( nVeces, 3 ) WIDTH 80 HEIGHT 20 FONT "Consolas" SIZE 12 CENTERALIGN  ;
									 ACTION WinPtoVta( This.Value ) TOOLTIP ( "Point of Sale" )
					nVeces += 1
				ENDIF
				nColu += 100
			NEXT
			nColu := 10
			nReng += 50
		NEXT
	END WINDOW
    CENTER WINDOW FormMain
    ACTIVATE WINDOW FormMain
RETURN
*--------------------------------------------------------------
FUNCTION ActMesa( cNombre, cDesc ) 
	SetProperty( "FormMain", cNombre, "BACKCOLOR", IF( "LIBRE" <> UPPER( ALLTRIM( cDesc ) ), YELLOW, WHITE ) )
RETURN
*--------------------------------------------------------------
FUNCTION WinPtoVta( cValue )	// Define MultiWindow
	LOCAL ChildForm := STRTRAN( cValue, " ", "_" )
	LOCAL xCtrol := "LB_Descrip"+RIGHT( cValue, 3 )
	LOCAL aCtrol := GetProperty( "FormMain", xCtrol, "Value" )
	
	IF ! IsWindowDefined( &ChildForm )
		DEFINE WINDOW &ChildForm AT 0 , 0 WIDTH 550 HEIGHT 350 WINDOWTYPE CHILD NOSIZE NOMINIMIZE NOMAXIMIZE BACKCOLOR GRAY	// { 112 , 128 , 144 }
			ON KEY ESCAPE ACTION ( ThisWindow.Release )
			
			SetProperty( ChildForm, "Title", ChildForm + "  " + aCtrol )

			@ 010 , 010 TEXTBOX TBX01 OF &ChildForm VALUE aCtrol WIDTH 180 HEIGHT 15 FONT "Consolas" SIZE 8  ;
						ON CHANGE ( SetProperty( ChildForm, "Title", ChildForm + "  " + This.Value ), ;
									SetProperty( "FormMain", xCtrol, "Value", This.Value ), ;
									ActMesa( xCtrol, This.Value ) )
			
			// Aquí, tu proceso de Punto de Venta...
			// Here, your Point of Sale process ...
			
		END WINDOW
		CENTER WINDOW &ChildForm
		ACTIVATE WINDOW &ChildForm
	ELSE
		DoMethod( ChildForm, "SetFocus")
	ENDIF	
RETURN
Andrés González López
Desde Guadalajara, Jalisco. México.
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: Mover controles con el mouse en tiempo de ejecucion

Post by andyglezl »

Con el POS de Marek...
*----------------------------------
With Marek's POS ...

Mesas4.png
Mesas4.png (352.95 KiB) Viewed 3039 times

Code: Select all

#include <hmg.ch>
#include "hbclass.ch"

FUNCTION Main() 
 	LOCAL nReng := 10, nColu := 10, nVeces := 1, aMapa := ARRAY( 10 )
	
	aMapa[ 1]  := "1111111111" 
	aMapa[ 2]  := "1111111111" 
	aMapa[ 3]  := "1111000011" 
	aMapa[ 4]  := "1110000000" 
	aMapa[ 5]  := "1100000000" 
	aMapa[ 6]  := "1100000000" 
	aMapa[ 7]  := "1110000000" 
	aMapa[ 8]  := "1111000011" 
	aMapa[ 9]  := "1111111111" 
	aMapa[10]  := "1111111111" 


	
	// ************Touch system  MOL-Systemy Komputerowe mol@pro.onet.pl
	//*******************************************************************
	public nLiczbaWierszy	:= 5
	public nLiczbaKolumn	:= 5
	public aStosPlansz := {}
*	private cNazwaOkna := "Form_Main"
	private aPozycje := {}
	private aHeaders := {'Towar','Nazwa','Ilość'} 
	private aWidths := {55,95,55}
	private aJust	:= {0,0,1}
	private oMiniGrid
	aPlansza1 := {	{ 1,1,"Zestaw"+chr(10)+"Schab","T","000100"} ,;
					{ 1,2,"Zestaw"+chr(10)+"Mielony","T","000101"} ,;
					{ 1,3,"Zestaw"+chr(10)+"Kurczak","T","000111"} ,;
					{ 2,2,"Naleśniki","T","000102"} ,;
					{ 2,3,"Pierogi","T","000103"} ,;
					{ 3,1,"Surówki","P",2} ,;
					{ 3,2,"Napoje","P",3} }
	
	aPlansza2	:=	{	{ 1,1, "Kapusta"+chr(10)+"biała", "T", "000201"} ,;
					{ 1,2, "Kapusta"+chr(10)+"czerwona", "T", "000202"} ,;
					{ 1,3, "Kapusta"+chr(10)+"MIX", "T", "000203"} ,;
					{ 2,1, "Buraczki", "T", "000204"} ,;
					{ 2,2, "Marchewka", "T", "000205"} ,;
					{ 2,4, "Seler", "T", "000206"} }
					
	aPlansza3	:=	{	{ 1,1, "Cola 0,5l", "T", "000301"} ,;
					{ 1,2, "Pepsi 0,2l", "T", "000302"} ,;
					{ 1,3, "Jurajska 0,5l", "T", "000303"} ,;
					{ 2,1, "Tymbark"+chr(10)+"jabłko"+chr(10)+"mięta", "T", "000304"} ,;
					{ 2,3, "Kawa express", "T", "000305"} ,;
					{ 3,3, "Herbata", "T", "000306"} }
	// ************Touch system  MOL-Systemy Komputerowe mol@pro.onet.pl
	//*******************************************************************
	
	
	DEFINE WINDOW FormMain AT 0 , 0 WIDTH 1024 HEIGHT 570 MAIN BACKCOLOR BLUE TITLE " M E S A S "
		FOR i1 = 1 TO 10
			FOR i2 = 1 TO 10
				IF SUBSTR( aMapa[ i1 ], i2, 1 ) = "1"  
					cCtrlPso := "LB_Descrip"+STRZERO( nVeces, 3 )
					@ nReng,nColu TEXTBOX &cCtrlPso. OF FormMain VALUE "Libre" WIDTH 80 HEIGHT 15 FONT "Consolas" SIZE 8  ;
								  ON ENTER ( ActMesa( This.Name, This.Value ) ) // TOOLTIP ( This.Value )
					cCtrlPso := "LB_Mesas"+STRZERO( nVeces, 3 ) 
					@ nReng+16,nColu LABEL &cCtrlPso. OF FormMain VALUE "MESA "+STRZERO( nVeces, 3 ) WIDTH 80 HEIGHT 20 FONT "Consolas" SIZE 12 CENTERALIGN  ;
									 ACTION WinPtoVta( This.Value ) TOOLTIP ( "Point of Sale" )
					nVeces += 1
				ENDIF
				nColu += 100
			NEXT
			nColu := 10
			nReng += 50
		NEXT
	END WINDOW
    CENTER WINDOW FormMain
    ACTIVATE WINDOW FormMain
RETURN
*--------------------------------------------------------------
FUNCTION ActMesa( cNombre, cDesc ) 
	SetProperty( "FormMain", cNombre, "BACKCOLOR", IF( "LIBRE" <> UPPER( ALLTRIM( cDesc ) ), YELLOW, WHITE ) )
RETURN
*--------------------------------------------------------------
FUNCTION WinPtoVta( cValue )	// Define Window
	LOCAL ChildForm := STRTRAN( cValue, " ", "_" )
	LOCAL xCtrol := "LB_Descrip"+RIGHT( cValue, 3 )
	LOCAL aCtrol := GetProperty( "FormMain", xCtrol, "Value" )
	
	IF ! IsWindowDefined( &ChildForm )
		DEFINE WINDOW &ChildForm AT 0 , 0 WIDTH 1000 HEIGHT 590 WINDOWTYPE CHILD NOSIZE NOMINIMIZE NOMAXIMIZE BACKCOLOR GRAY	// { 112 , 128 , 144 }
			ON KEY ESCAPE ACTION ( ThisWindow.Release )
			
			SetProperty( ChildForm, "Title", ChildForm + "  " + aCtrol )

			@ 010 , 010 TEXTBOX TBX01 OF &ChildForm VALUE aCtrol WIDTH 180 HEIGHT 15 FONT "Consolas" SIZE 8  ;
						ON CHANGE ( SetProperty( ChildForm, "Title", ChildForm + "  " + This.Value ), ;
									SetProperty( "FormMain", xCtrol, "Value", This.Value ), ;
									ActMesa( xCtrol, This.Value ) )
			
			// Aquí, tu proceso de Punto de Venta...
			// Here, your Point of Sale process ...
			TouchSystemMol( ChildForm )
			
		END WINDOW
		CENTER WINDOW &ChildForm
		ACTIVATE WINDOW &ChildForm
	ELSE
		DoMethod( ChildForm, "SetFocus")
	ENDIF	
RETURN



*--------------------------------------------------------------
*--------------------------------------------------------------
*--------------------------------------------------------------
*--------------------------------------------------------------
*--------------------------------------------------------------
// ************Touch system  MOL-Systemy Komputerowe mol@pro.onet.pl
//*******************************************************************

#xcommand DEFAULT <v1> TO <x1> [, <vn> TO <xn> ]                        ;
          =>                                                            ;
          IF <v1> == NIL ; <v1> := <x1> ; END                           ;
          [; IF <vn> == NIL ; <vn> := <xn> ; END ]


*--------------------------------
CLASS MINIGRID
	DATA	cFormName
	DATA	nRow
	DATA	nCol
	DATA	nWidth
	DATA	nHeight
	DATA	nVWidth
	DATA	nVHeight
	DATA	aHeaders
	DATA	aWidths
	DATA	aJust
	DATA	nLiczbaWierszy INIT 0
	DATA	nWysokoscWiersza INIT 50
	DATA	nFontSize	INIT 12
	DATA	aRowBackColor INIT {255,224,224}
	
	METHOD New
	METHOD AddRow SETGET
	METHOD DeleteRow SETGET
	METHOD ChangeRow SETGET
ENDCLASS

*--------------------------------
METHOD New ( cFormName, nRow, nCol, nWidth, nHeight, nVWidth, nVHeight, aHeaders, aWidths, aJust) CLASS MINIGRID
	
	local i, x
	local cHeaderLabel
	
	::cFormName	:= cFormName
	::nRow			:= nRow
	::nCol			:= nCol
	::nWidth		:= nWidth
	::nHeight		:= nHeight
	::nVWidth		:= nVWidth
	::nVHeight		:= nVHeight
	::aHeaders		:= aHeaders
	::aWidths		:= aWidths
	::aJust			:= aJust	
	
	
	define window &cFormName  ;
			row nRow ;
			col nCol ;
			width nWidth ;
			height nHeight ;
			VirtualWidth nVWidth ;
			VirtualHeight nVHeight ;
			WindowType PANEL
			
		x:= 0
		for i := 1 to len(aHeaders)
			cHeaderLabel := "Head_"+strzero(i,3)
			if aJust[i] == 1
				DEFINE LABEL &cHeaderLabel
					PARENT &cFormName
					ROW 0
					COL 0+x
					width aWidths[i]
					height 19
					VALUE aHeaders[i]
					fontNAME "ARIAL"
					FONTSIZE 9
					FONTCOLOR BLACK
					alignment RIGHT
					backcolor {196,196,196} 
				END LABEL
			elseif aJust[i] == 2
				DEFINE LABEL &cHeaderLabel
					PARENT &cFormName
					ROW 0
					COL 0+x
					width aWidths[i]
					height 19
					VALUE aHeaders[i]
					fontNAME "ARIAL" 
					FONTSIZE 9	
					FONTCOLOR BLACK
					alignment CENTER
					backcolor {196,196,196} 
				END LABEL
			else 
				DEFINE LABEL &cHeaderLabel	
				PARENT &cFormName
					ROW 0 
					COL 0+x	
					width aWidths[i] 
					height 19
					VALUE aHeaders[i]
					fontNAME "ARIAL" 
					FONTSIZE 9	
					FONTCOLOR BLACK
					alignment LEFT
					backcolor {196,196,196} 
				END LABEL
			endif
			
			SET CONTROL &cHeaderLabel OF &cFormName STATICEDGE
			 
			x+= aWidths[i]
		next i
			
	end window
 return Self
*--------------------------------
METHOD AddRow (aWiersz) CLASS MINIGRID

	local k
	local x
	local cLabelName
	local cVal
	local cType
	
	local bAkcja
	
	::nLiczbaWierszy++

	x := 0
	
	bAkcja := "PoprawPozycjeMiniGrid("+str(::nLiczbaWierszy)+")"
	
	for k:=1 to len(::aHeaders)
		cLabelName := "Wiersz_"+strzero(::nLiczbaWierszy,3)+"_"+strzero(k,3)
		if ::aJust[k] == 1
			DEFINE LABEL &cLabelName 
				parent &(::cFormName)
				fontNAME "ARIAL" 
				FONTSIZE ::nFontSize	
				FONTCOLOR BLACK
				alignment RIGHT
				backcolor ::aRowBackColor
				ACTION &bAkcja
			END LABEL
		elseif ::aJust[k] == 2
			DEFINE LABEL &cLabelName 
				parent &(::cFormName)
				fontNAME "ARIAL" 
				FONTSIZE ::nFontSize
				FONTCOLOR BLACK
				alignment CENTER
				backcolor ::aRowBackColor
				ACTION &bAkcja
			END LABEL
		else
			DEFINE LABEL &cLabelName 
				parent &(::cFormName)
				fontNAME "ARIAL" 
				FONTSIZE ::nFontSize
				FONTCOLOR BLACK
				alignment LEFT
				backcolor::aRowBackColor
				ACTION &bAkcja
			END LABEL
		endif
		
		SetProperty(::cFormName, cLabelName,"ROW", 20 + (::nLiczbaWierszy-1)* ::nWysokoscWiersza)
		SetProperty(::cFormName, cLabelName,"COL",0+x)
		SetProperty(::cFormName, cLabelName,"width", ::aWidths[k])
		SetProperty(::cFormName, cLabelName,"height", ::nWysokoscWiersza)
		
		cType	:= valtype(aWiersz[k])
		
		if cType== "N"
			cVal	:= alltrim(str(aWiersz[k]))
		elseif cType == "D"
			cVal	:= dtoc(aWiersz[k])
		elseif cType == "L"
			cVal	:= if(aWiersz[k],"T","N")
		else
			cVal := aWiersz[k]
		endif
		
		SetProperty(::cFormName, cLabelName,"VALUE", cVal)

		SET CONTROL &cLabelName OF MiniGrid STATICEDGE
		x+= aWidths[k]
				
	next k
	
return
*--------------------------------
METHOD ChangeRow (nPozycja) CLASS MINIGRID

	local k
	local cLabelName
	
	for k:=1 to len(::aHeaders)
		cLabelName := "Wiersz_"+strzero(nPozycja,3)+"_"+strzero(k,3)
		cType	:= valtype(aPozycje[nPozycja,k])
	
		if cType== "N"
			cVal	:= alltrim(str(aPozycje[nPozycja,k]))
		elseif cType == "D"
			cVal	:= dtoc(aPozycje[nPozycja,k])
		elseif cType == "L"
			cVal	:= if(aPozycje[nPozycja,k],"T","N")
		else
			cVal := aPozycje[nPozycja,k]
		endif
		SetProperty(::cFormName,cLabelName,"Value",cVal)
	next k
 return
*--------------------------------
METHOD DeleteRow (nPozycja) CLASS MINIGRID
	local i
	local k
	local cLabelName1
	local cLabelName2
	local cVal
	
	// move rows
	for i:=nPozycja+1 to ::nLiczbaWierszy
		for k:=1 to len(::aHeaders)
			cLabelName1 := "Wiersz_"+strzero(i,3)+"_"+strzero(k,3)
			cLabelName2 := "Wiersz_"+strzero(i-1,3)+"_"+strzero(k,3)
			cVal := GetProperty(::cFormName,cLabelName1,"Value")
			SetProperty(::cFormName,cLabelName2,"Value",cVal)
		next k
	next i
	
	// release last row
	for k:=1 to len(::aHeaders)
		cLabelName1 := "Wiersz_"+strzero(::nLiczbaWierszy,3)+"_"+strzero(k,3)
		DoMethod(::cFormName,cLabelName1,"Release")
	next k
	::nLiczbaWierszy--
return
*--------------------------------------------------------------
*--------------------------------------------------------------
*--------------------------------------------------------------
*--------------------------------------------------------------
*--------------------------------------------------------------
Function TouchSystemMol( cFormName )

	local nWiersz := 30
	local nKolumna := 250
	local nSzerokosc := 120
	local nWysokosc := 70
	local nPrzerwa  := 20
	local nRozmiarCzcionki	:= 14
	local cNazwaCzcionki := "ARIAL"

*	public nLiczbaWierszy	:= 5
*	public nLiczbaKolumn	:= 5
*	public aStosPlansz := {}
	
*	private cNazwaOkna := "Form_Main"
	private cNazwaOkna := cFormName
*	private aPozycje := {}
*	private aHeaders := {'Towar','Nazwa','Ilość'} 
*	private aWidths := {55,95,55}
*	private aJust	:= {0,0,1}
*	private oMiniGrid
	
	
	// define different sale charts
	// array contains coordinates of buttons, name of goodies or sale chart name
	// T - for goods for sale
	// P - for sale chart
	
*	aPlansza1 := {	{ 1,1,"Zestaw"+chr(10)+"Schab","T","000100"} ,;
*					{ 1,2,"Zestaw"+chr(10)+"Mielony","T","000101"} ,;
*					{ 1,3,"Zestaw"+chr(10)+"Kurczak","T","000111"} ,;
*					{ 2,2,"Naleśniki","T","000102"} ,;
*					{ 2,3,"Pierogi","T","000103"} ,;
*					{ 3,1,"Surówki","P",2} ,;
*					{ 3,2,"Napoje","P",3} }
*	
*	aPlansza2	:=	{	{ 1,1, "Kapusta"+chr(10)+"biała", "T", "000201"} ,;
*					{ 1,2, "Kapusta"+chr(10)+"czerwona", "T", "000202"} ,;
*					{ 1,3, "Kapusta"+chr(10)+"MIX", "T", "000203"} ,;
*					{ 2,1, "Buraczki", "T", "000204"} ,;
*					{ 2,2, "Marchewka", "T", "000205"} ,;
*					{ 2,4, "Seler", "T", "000206"} }
*					
*	aPlansza3	:=	{	{ 1,1, "Cola 0,5l", "T", "000301"} ,;
*					{ 1,2, "Pepsi 0,2l", "T", "000302"} ,;
*					{ 1,3, "Jurajska 0,5l", "T", "000303"} ,;
*					{ 2,1, "Tymbark"+chr(10)+"jabłko"+chr(10)+"mięta", "T", "000304"} ,;
*					{ 2,3, "Kawa express", "T", "000305"} ,;
*					{ 3,3, "Herbata", "T", "000306"} }
					
	
*	DEFINE WINDOW &cNazwaOkna ;
*		AT 0,0 ;
*		WIDTH 1000 HEIGHT 590 ;
*		TITLE 'System sprzedaży dotykowej' ;
*		NOMINIMIZE ;
*        NOMAXIMIZE ;
*		backcolor {225,255,200};
*        NOSIZE ;
*        NOSYSMENU ;
*		MAIN 
		
	/*
		define grid G_Pozycje 
			row 10
			col 10
			WIDTH 230 
			HEIGHT 100 
			HEADERS {'Towar','Nazwa','Ilość'} 
			WIDTHS {60,100, 60}
			fontname "ARIAL"
			fontsize 8
			ITEMS NIL
			OnQueryData OdswiezPozycje()
			ONDBLCLICK  PoprawPozycje(this.Value)
			VIRTUAL .t.
		end grid
	*/	
		oMiniGrid := MiniGrid():New( SUBSTR( cFormName, 6, 3 ), 30, 10, 230, 500, 250, 5000, aHeaders, aWidths, aJust)
		
		
		for w := 1 to nLiczbaWierszy
			for  k:= 1 to nLiczbaKolumn
				cNazwaPrzycisku := "Przycisk_"+str(w,1)+str(k,1)
				bBlock := "WykonajAkcjePrzycisku(" + str(w,1) + "," +str(k,1) + ")"
						
				@ nWiersz + (w-1)*(nWysokosc+nPrzerwa), nKolumna + (k-1)*(nSzerokosc +nPrzerwa) LABEL &cNazwaPrzycisku ;
					width nSzerokosc height nWysokosc ;
					VALUE cNazwaPrzycisku;
					font cNazwaCzcionki size nRozmiarCzcionki centeralign FONTCOLOR WHITE;
					action &bBlock ;
					backcolor BLUE 
					
			next k
		next w
		
*		SET CONTROL Przycisk_11 OF &cNazwaOkna STATICEDGE
*		SET CONTROL Przycisk_12 OF &cNazwaOkna CLIENTEDGE
*		SET CONTROL Przycisk_13 OF &cNazwaOkna NOTEDGE
		
		@ nWiersz + nLiczbaWierszy*(nWysokosc+nPrzerwa), nKolumna+ (nLiczbaKolumn-1)*(nSzerokosc +nPrzerwa) LABEL L_Powrot ;
			width nSzerokosc height nWysokosc ;
			VALUE chr(10)+"Powrót";
			font cNazwaCzcionki size nRozmiarCzcionki centeralign FONTCOLOR WHITE;
			action ZamknijPlanszeSprzedazy() ;
			backcolor RED
*	END WINDOW
		
		
*	CENTER WINDOW &cNazwaOkna
	
	ZdefiniujPlanszeSprzedazy(aPlansza1)
	
	
*	ON KEY ALT+Q OF &cNazwaOkna ACTION DoMethod(cNazwaOkna , "Release")
*	ON KEY ESCAPE OF &cNazwaOkna ACTION DoMethod(cNazwaOkna , "Release")
*	ACTIVATE WINDOW &cNazwaOkna

Return 
*-----------------------------
function WykonajAkcjePrzycisku
	param w,k
	
	local i, j
	local aPlansza
	
	if (i:= len(aStosPlansz)) == 0
		MsgStop("Jesteś na najwyższym poziomie")
		return .f.
	endif
	
	
	aPlansza := aStosPlansz[i]
	
	j := ascan(aPlansza, {|a| a[1] == w .and. a[2] == k})
	if j>0
		cAkcja := aPlansza[j,4]
		if cAkcja =="T"
			cTowar := aPlansza[j,5]
			cNazwa := aPlansza[j,3]
			DodajPozycjeSprzedazy({cTowar, cNazwa, 1, 0})
			
			
		elseif cAkcja == "P"
			//definiujemy planszę sprzedaży
			nNrPlanszy := aPlansza[j,5]
			cNazwaPlanszy := "aPlansza"+alltrim(str(nNrPlanszy))
			ZdefiniujPlanszeSprzedazy(&cNazwaPlanszy)
		endif
	endif
	
 return
*-----------------------------------------------------------------------------*
function ZdefiniujPlanszeSprzedazy
	param aPlansza
	
	local i
	local cNazwaPrzycisku
	local cNapis
	local aBackColor
	
	aAdd(aStosPlansz, aclone(aPlansza))
	
	UkryjPrzyciski()
	for i := 1 to len(aPlansza)
		w := aPlansza[i,1]
		k := aPlansza[i,2]
		cNazwaPrzycisku := "Przycisk_"+str(w,1)+str(k,1)
		cNapis := aPlansza[i,3]
		SetProperty(cNazwaOkna, cNazwaPrzycisku,"VISIBLE",.t.)
		SetProperty(cNazwaOkna, cNazwaPrzycisku,"VALUE", cNapis)
		// change color of button for another sale chart
		aBackColor := if(aPlansza[i,4]=="T", {0,0,128}, {0,128,0})
		SetProperty(cNazwaOkna, cNazwaPrzycisku,"BackColor",aBackColor)
	next i
	
return

*-----------------------------------------------------------------------------*
function UkryjPrzyciski
	local w, k
	local cNazwaPrzycisku
// ukrywamy wszystkie przyciski
	for w:=1 to nLiczbaWierszy
		for k:=1 to nLiczbaKolumn
			cNazwaPrzycisku := "Przycisk_"+str(w,1)+str(k,1)
			SetProperty(cNazwaOkna, cNazwaPrzycisku,"VISIBLE",.f.)
		next k
	next w
 return
*-----------------------------------------------------------------------------*
function ZamknijPlanszeSprzedazy
	
	local i
	if (i:=len(aStosPlansz))>1
		UkryjPrzyciski()
		ZdefiniujPlanszeSprzedazy(aStosPlansz[i-1])
		aSize(aStosPlansz, i-1)
	else
		if MsgYesNo("Zamknąć planszę sprzedaży?")
			DoMethod(cNazwaOkna,"RELEASE")
		endif
	endif
 return
*-----------------------------------------------------------------------------*
function OdswiezPozycje
	local nRow, nCol
	
	nRow := This.QueryRowIndex
	nCol := This.QueryColIndex
	
	if nRow>0 .and. nCol >0
		if nRow > len(aPozycje)
			This.QueryData := ""
		else
			This.QueryData := aPozycje[nRow,nCol]
		endif
	endif
	
return
*-----------------------------------------------------------------------------*
function DodajPozycjeSprzedazy
	param aWiersz
	
	local cTowar := aWiersz[1]
	local i
	i := aScan(aPozycje, {|a| a[1] == cTowar} )
	if i>0
		aPozycje[i,3] += 1
		oMiniGrid:ChangeRow(i)
	else
		aAdd(aPozycje, aclone(aWiersz))
		oMiniGrid:AddRow(aWiersz)
	endif
	
	//SetProperty(cNazwaOkna, "G_Pozycje","ItemCount",0)
	//SetProperty(cNazwaOkna, "G_Pozycje","ItemCount",len(aPozycje))
			
return
*--------------------
function PoprawPozycje
	param nPozycja
	
	local aKolorTla := {225,255,255}
	local aNazwyPrzyciskow	:= {{"7","8","9"}	,{"4","5","6"},{"1","2","3"},{"0",".","*"},{"CE","C","ENTER"}}
		
	local nWiersz := 40
	local nKolumna := 200
	local nSzerokosc := 55
	local nWysokosc := 50
	local nPrzerwa  := 10
	local nRozmiarCzcionki	:= 14
	local cNazwaCzcionki := "ARIAL"
	local nLiczbaWierszy := 5
	local nLiczbaKolumn := 3
	
	private cBiezacaKontrolka := ""
	private cBiezacyTekst := ""
	private cIloscTekst := ""
	private cCenaTekst := ""
	private nRet := .f.
	
	if nPozycja<1
		return .f.
	endif
	
	DEFINE WINDOW OknoPoprawPozycje ;
		AT 0,0 ;
		WIDTH nKolumna + 40 + nLiczbaKolumn*(nSzerokosc+nPrzerwa) HEIGHT nWiersz + 40 + nLiczbaWierszy*(nWysokosc+nPrzerwa) ;
        TITLE STRTRAN(aPozycje[nPozycja,2],CHR(10)," " ) ;
		MODAL ;
		backcolor aKolorTla;
		NOSIZE NOSYSMENU
		
	
	@ 10,10 LABEL L_Towar ;
		width 300 height 18;
		VALUE STRTRAN(aPozycje[nPozycja,2],CHR(10)," " ) ;
		font "ARIAL" size 12 CENTERALIGN FONTCOLOR YELLOW backcolor RED
		
		

	@ 40, 10 LABEL L_Ilosc ;
		width 78 height 18 ;
		Value "Ilość" ;
		backcolor aKolorTla;
		font "ARIAL" size 12 rightalign 
	
	@ 40, 90 TEXTBOX T_ILOSC ;
		width 80 height 24 ;
		Value aPozycje[nPozycja,3] ;
		font "ARIAL" size 12;
		NUMERIC INPUTMASK "99.9" ;
		ON GOTFOCUS {|| cBiezacaKontrolka := this.name, CBiezacyTekst := "cIloscTekst"} ;
		rightalign
	
	@ 70, 10 LABEL L_Cena ;
		width 78 height 18 ;
		Value "Cena" ;
		backcolor aKolorTla;
		font "ARIAL" size 12 rightalign 
	
	@ 70, 90 TEXTBOX T_CENA ;
		width 80 height 24 ;
		Value aPozycje[nPozycja,4] ;
		font "ARIAL" size 12;
		NUMERIC INPUTMASK "9999.99" ;
		ON GOTFOCUS {||cBiezacaKontrolka := this.name, CBiezacyTekst := "cCenaTekst"} ;
		rightalign
	
	@ 120, 90 LABEL L_OK ;
		width 80 height 50 ;
		Value "OK" ;
		backcolor GREEN;
		font "ARIAL" size 14 FONTCOLOR WHITE;
		CENTERALIGN ;
		ACTION ZapiszPoprawePozycji()
		
	@ 190, 90 LABEL L_UsunPozycje ;
		width 80 height 50 ;
		Value "Usuń pozycję" ;
		backcolor BLACK;
		font "ARIAL" size 14 FONTCOLOR ORANGE;
		CENTERALIGN ;
		ACTION UsunPozycje()
		

		
		aNazwyPrzyciskow	:= {{"7","8","9"}	,{"4","5","6"},{"1","2","3"},{"0",".","Enter"},{"CE","C","Anuluj"}}
		aWartosciPrzyciskow := {{"7","8","9"}	,{"4","5","6"},{"1","2","3"},{"0",".","ENTER"},{"CE","C","ANULUJ"}}
		aKoloryPrzyciskow	:= {	{BLUE,BLUE,BLUE},;
									{BLUE,BLUE,BLUE},;
									{BLUE,BLUE,BLUE},;
									{BLUE,BLUE,GREEN},;
									{RED,RED,RED}}
									
		for w := 1 to len(aNazwyPrzyciskow)
			for  k:= 1 to len(aNazwyPrzyciskow[1])
				cNazwaPrzycisku := "Przycisk_"+str(w,1)+str(k,1)
				if !empty(aNazwyPrzyciskow[w,k])
					bBlock := "WykonajAkcjePrzyciskuKlawiaturowego(" + str(w,1) + "," +str(k,1) + ")"
					@ nWiersz + (w-1)*(nWysokosc+nPrzerwa), nKolumna + (k-1)*(nSzerokosc +nPrzerwa) LABEL &cNazwaPrzycisku ;
						width nSzerokosc height nWysokosc ;
						VALUE chr(10) + aNazwyPrzyciskow[w,k];
						font cNazwaCzcionki size nRozmiarCzcionki centeralign FONTCOLOR WHITE;
						action &bBlock ;
						backcolor aKoloryPrzyciskow[w,k]
				endif
			next k
		next w

	END WINDOW
	
	OknoPoprawPozycje.L_Towar.Width := OknoPoprawPozycje.Width - 20
	
	CENTER WINDOW OknoPoprawPozycje
	
	ON KEY ESCAPE OF OknoPoprawPozycje ACTION OknoPoprawPozycje.Release
	ACTIVATE WINDOW OknoPoprawPozycje
 RETURN nRet
 *---------------------
function WykonajAkcjePrzyciskuKlawiaturowego
	param w,k
	
	local cWartosc := ""
	
	cWartosc := &cBiezacyTekst
	
	do case
		case aWartosciPrzyciskow[w,k] == "C"
			cWartosc := ""
			
		case aWartosciPrzyciskow[w,k] == "CE"
			if len(cWartosc)>0
				cWartosc := left(cWartosc,len(cWartosc)-1)
			endif

		case aWartosciPrzyciskow[w,k] == "ENTER"
			if cBiezacaKontrolka == "T_ILOSC"
				DoMethod(thisWindow.Name, "T_CENA", "SETFOCUS")	
				return
			else
				// zamykamy okienko
				ZapiszPoprawePozycji()
				return
			endif
			
		case aWartosciPrzyciskow[w,k] == "ANULUJ"
			OknoPoprawPozycje.Release
			return
			
		otherwise
			cWartosc += aWartosciPrzyciskow[w,k]
			
	end case
	
	hPole := GetControlHandle (cBiezacaKontrolka,thisWindow.Name)	
	SetWindowText(hPole, cWartosc)
	SetProperty(thisWindow.Name,cBiezacaKontrolka,"Value",val(cWartosc))
	SetProperty(thisWindow.Name,cBiezacaKontrolka,"CaretPos",len(cWartosc))
	&cBiezacyTekst := cWartosc
 return
*-------------------
function ZapiszPoprawePozycji

	aPozycje[nPozycja, 3] := OknoPoprawPozycje.T_Ilosc.Value
	aPozycje[nPozycja, 4] := OknoPoprawPozycje.T_Cena.Value
	OknoPoprawPozycje.Release
	nRet := .t.
 return
*---------------------
function UsunPozycje
	if MsgYesNo("Potwierdź usunięcie pozycji")
		aDel(aPozycje, nPozycja)
		aSize(aPozycje, len(aPozycje)-1)
		
		oMiniGrid:DeleteRow(nPozycja)
		
		//SetProperty(cNazwaOkna, "G_Pozycje","ItemCount",len(aPozycje))
		
		OknoPoprawPozycje.Release
	endif
return
*----------------------
function PoprawPozycjeMiniGrid
	param nPozycja
	
	local k
	local cLabelName
	
	if PoprawPozycje(nPozycja)
		oMiniGrid:ChangeRow(nPozycja)
	endif
 return
Andrés González López
Desde Guadalajara, Jalisco. México.
User avatar
mol
Posts: 3718
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

Re: Mover controles con el mouse en tiempo de ejecucion

Post by mol »

Is it really based on my code? Hahaha!
I'm happy it was useful!
Post Reply