FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo
Posts: 22
Joined: Thu Nov 01, 2012 01:23 AM
CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo
Posted: Sat Nov 03, 2012 05:00 PM

Buenos dias listeros, un saludito,
Tenia algun tiempo de estar retirado de las canchas, pues regreso,

Un pregunta que viene dando vueltas haber si es posible,

Tengo un dlg con cuatro botones , se pueden mover a voluntad ! con el mouse lo botones y guardar su posicion en una variable, con esto deseo hacer un dlg con varios controles en este caso botones y con el mouse moverlos dentro del dlg y capturar las cordenadas en una variable y guardarlos, para luego cargar un dlg y crear los controles desde codigo y dales las cordenadas guardadas anterirmente.
Sera posible !!

Agradeceria desde ya ayuda que me pudieran guiar y dame un ejemplo simple..
Muchas gracias.

Oscar Chacon
Guapilescity, Costa Rica.

Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo
Posted: Sat Nov 03, 2012 09:59 PM

No sé que versión de FW manejas pero en samples tienes las fuentes de un ide y creo que ahí hay algo de lo que necestas.

Saludos

Posts: 22
Joined: Thu Nov 01, 2012 01:23 AM
Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo
Posted: Sun Nov 04, 2012 01:29 AM

Gracias por el tips,
No tengo mucha exeriencia, en el asunto pero desearia algo un poco menos complidado porque no se cuales seran las funciones, agradesco desde ya
cualquier ejmplo simple que puedan compartir.
Muchas Gracias desde ya.
Oscar Chacon
Busmatic.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo
Posted: Sun Nov 04, 2012 07:26 PM
Oscar,

Tienes un ejemplo en FWH/samples/design.prg. Te lo copio aqui:

design.prg:
Code (fw): Select all Collapse
// Dialogs designer

#include "FiveWin.ch"

static oDlg, lDesign := .T.

//----------------------------------------------------------------//

function Main()

   DEFINE DIALOG oDlg TITLE "Dialog designer" SIZE 500, 300 ;
      STYLE nOr( WS_THICKFRAME, WS_SYSMENU )

   oDlg:cVarName = "oDlg"

   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT  PlaceControl( oDlg ) ;
      ON PAINT If( lDesign, DrawGrid( oDlg:hWnd, hDC, cPS, 8, 8 ),) ;
      ON RIGHT CLICK EditDialog( nRow, nCol, oDlg )

return nil

//----------------------------------------------------------------//

function PlaceControl( oDlg )

   local oBtn1, oBtn2

   @ 232, 144 BUTTON oBtn1 PROMPT "&Ok" SIZE 80, 25 DESIGN OF oDlg PIXEL

   oBtn1:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oBtn1 ) }

   @ 232, 264 BUTTON oBtn2 PROMPT "&Cancel" SIZE 80, 25 DESIGN OF oDlg PIXEL

   oBtn2:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oBtn2 ) }
   
return nil   

//----------------------------------------------------------------//

function CreateSay( oDlg )

   local oSay

   @ 1, 2 SAY oSay PROMPT "Label:" OF oDlg SIZE 70, 20 DESIGN

   oSay:bGet = nil
   oSay:lWantClick = .T.
   BringWindowToTop( oSay:hWnd ) 
   oSay:SetFocus()
   
   oSay:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oSay ) }
   
return nil   

//----------------------------------------------------------------//

function EditControl( nRow, nCol, oControl )

   local oMenu
   
   MENU oMenu POPUP
      MENUITEM "Bring to front" ACTION BringWindowToTop( oControl:hWnd )
      
      SEPARATOR
      
      MENUITEM "Text" ACTION EditTitle( oControl )
      
      SEPARATOR
      
      MENUITEM "Position"
      MENU
         MENUITEM "nTop"    + Chr( 9 ) + LTrim( Str( oControl:nTop ) )
         MENUITEM "nLeft"   + Chr( 9 ) + LTrim( Str( oControl:nLeft ) )
         MENUITEM "Move up"   ACTION ( oControl:HideDots(), oControl:nTop--, oControl:ShowDots() )
         MENUITEM "Move down" ACTION ( oControl:HideDots(), oControl:nTop++, oControl:ShowDots() )
      ENDMENU
      
      MENUITEM "Size"
      MENU 
         MENUITEM "nWidth"  + Chr( 9 ) + LTrim( Str( oControl:nWidth ) )
         MENUITEM "nHeight" + Chr( 9 ) + LTrim( Str( oControl:nHeight ) )
      ENDMENU
   ENDMENU
   
   ACTIVATE POPUP oMenu WINDOW oControl AT nRow, nCol
   
return nil   
   
//----------------------------------------------------------------//

function CreateGet( oDlg )

   local oGet, cVar := Space( 20 )

   @ 1, 2 GET oGet VAR cVar OF oDlg SIZE 136, 24 DESIGN

   BringWindowToTop( oGet:hWnd ) 
   oGet:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oGet ) }
   oGet:SetFocus()
   
return nil   

//----------------------------------------------------------------//

function CreateButton( oDlg )

   local oBtn

   @ 1, 2 BUTTON oBtn PROMPT "Button" OF oDlg SIZE 80, 25 DESIGN

   BringWindowToTop( oBtn:hWnd ) 
   oBtn:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oBtn ) }
   oBtn:SetFocus()
   
return nil   

//----------------------------------------------------------------//

function CreateCheckBox( oDlg )

   local oChk, lValue := .F.

   @ 1, 2 CHECKBOX oChk VAR lValue PROMPT "&Checkbox" OF oDlg ;
      SIZE 100, 15 DESIGN

   BringWindowToTop( oChk:hWnd ) 
   oChk:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oChk ) }
   oChk:SetFocus()
   
return nil   

//----------------------------------------------------------------//

function CreateListBox( oDlg )

   local oLbx, cItem

   @ 1, 2 LISTBOX oLbx VAR cItem ITEMS { "One", "Two", "three" } OF oDlg SIZE 120, 120 DESIGN

   BringWindowToTop( oLbx:hWnd ) 
   oLbx:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oLbx ) }
   oLbx:SetFocus()
   
return nil   

//----------------------------------------------------------------//

function CreateComboBox( oDlg )

   local oCbx, cItem

   @ 1, 2 COMBOBOX oCbx VAR cItem ITEMS { "One", "Two", "three" } OF oDlg SIZE 120, 120 DESIGN

   BringWindowToTop( oCbx:hWnd ) 
   oCbx:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oCbx ) }
   oCbx:SetFocus()
   
return nil   

//----------------------------------------------------------------//

function CreateGroup( oDlg )

   local oGrp

   @ 1, 2 GROUP oGrp PROMPT "Group" OF oDlg SIZE 120, 120 DESIGN

   oGrp:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oGrp ) }
   oGrp:SetFocus()
   
return nil   

//----------------------------------------------------------------//

function CreateRadio( oDlg )

   local oRad, oRadMenu := TRadMenu():New()

   @ 1, 2 RADIOITEM oRad PROMPT "&Radio1" OF oDlg ;
      SIZE 60, 15 DESIGN RADIOMENU oRadMenu

   BringWindowToTop( oRad:hWnd ) 
   oRad:bRClicked = { | nRow, nCol | EditControl( nRow, nCol, oRad ) }
   oRad:SetFocus()
   
return nil   

//----------------------------------------------------------------//

static function EditDialog( nRow, nCol, oDlg )

   local oMenu
   
   MENU oMenu POPUP
      MENUITEM "Title..." ACTION EditTitle( oDlg )
      
      SEPARATOR
      
      MENUITEM "Add control"
      MENU 
         MENUITEM "Say"      ACTION CreateSay( oDlg )
         MENUITEM "Get"      ACTION CreateGet( oDlg )
         MENUITEM "Button"   ACTION CreateButton( oDlg )
         MENUITEM "CheckBox" ACTION CreateCheckBox( oDlg )
         MENUITEM "Radio"    ACTION CreateRadio( oDlg )
         MENUITEM "ListBox"  ACTION CreateListBox( oDlg )
         MENUITEM "ComboBox" ACTION CreateComboBox( oDlg )
         MENUITEM "GroupBox" ACTION CreateGroup( oDlg )
      ENDMENU
      SEPARATOR
      MENUITEM "PRG code..." ACTION MemoEdit( oDlg:cGenPrg(), "PRG code" )
      MENUITEM "RC code..." ACTION MemoEdit( oDlg:SaveToRC(), "RC code" )
      SEPARATOR
      MENUITEM "Position"
      MENU
         MENUITEM "nTop"  + Chr( 9 ) + LTrim( Str( WndTop( oDlg:hWnd ) ) )
         MENUITEM "nLeft" + Chr( 9 ) + LTrim( Str( WndLeft( oDlg:hWnd ) ) )
      ENDMENU
      MENUITEM "Size"
      MENU
         MENUITEM "nWidth"  + Chr( 9 ) + LTrim( Str( oDlg:nWidth ) )
         MENUITEM "nHeight" + Chr( 9 ) + LTrim( Str( oDlg:nHeight ) )
      ENDMENU  
      SEPARATOR
      if oDlg:aControls[ 1 ]:lDrag
         MENUITEM "&Test mode" ;
            ACTION ( AEval( oDlg:aControls, { | o | o:lDrag := .F. } ),;
                     If( Len( oDlg:aControls ) > 0, oDlg:aControls[ 1 ]:HideDots(),),;
                     lDesign := .F., oDlg:Refresh() ) 
      else               
         MENUITEM "&Design mode" ;
            ACTION ( AEval( oDlg:aControls, { | o | o:lDrag := .T. } ),;
                     If( Len( oDlg:aControls ) > 0, oDlg:aControls[ 1 ]:ShowDots(),),;
                     lDesign := .T., oDlg:Refresh() ) 
      endif               
   ENDMENU
   
   ACTIVATE POPUP oMenu WINDOW oDlg AT nRow, nCol // SAVE
   
return nil   

//----------------------------------------------------------------//

static function EditTitle( oWnd )

   local oDlg, oGet, cOldTitle := PadR( oWnd:cCaption, 100 )
   
   DEFINE DIALOG oDlg TITLE "Dialog title" SIZE 600, 110
   
   oWnd:cCaption = PadR( oWnd:cCaption, 100 )
   
   @ 1, 1 GET oGet VAR oWnd:cCaption OF oDlg SIZE 285, 12 ;
      ON CHANGE oWnd:SetText( AllTrim( oGet:GetText() ) ) 
   
   @ 2, 18 BUTTON "&Ok" OF oDlg ACTION oDlg:End()

   @ 2, 25 BUTTON "&Cancel" OF oDlg ACTION ( oWnd:SetText( cOldTitle ), oDlg:End() )
   
   ACTIVATE DIALOG oDlg CENTERED
   
return nil  

//----------------------------------------------------------------//
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 22
Joined: Thu Nov 01, 2012 01:23 AM
Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo
Posted: Mon Nov 05, 2012 03:27 AM

Exelente ,
Como siempre muchas gracias por la ayuda,

Oscar Chacon

Posts: 22
Joined: Thu Nov 01, 2012 01:23 AM
Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo
Posted: Tue Nov 27, 2012 04:56 AM

Estimados,

Gracias como siempre ayuda invaluable.

Con respecto a el mismo topico, mi pregunta es la siguinte

Ya tengo los controles y sus cordenadas pero se podra hacer lo siguiente,

Con el click derecho mueves el control y lo posiciconas dentro de la dlg donde yo quiero , perfecto , deseo ejecutar una accion cuando sueltas el control que tenias precionado, como podria hacerlo ?

Muchas Gracias y desde ya..

GuapilesCity

Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo
Posted: Wed Nov 28, 2012 12:16 PM

Antonio, is there an error because I create a get with size 12 and then the source became 8
@ 1, 2 GET oGet VAR cVar OF oDlg SIZE 130, 12 DESIGN

Prg source

@ 16, 56 GET oGet SIZE 128, 8 PIXEL OF oDlg

Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 22
Joined: Thu Nov 01, 2012 01:23 AM
Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo
Posted: Sat Dec 01, 2012 04:03 AM

Agradezco desde ya la ayuda

BUENAS , por aqui de nuevo

Todo muy bien hasta que llegamos a la parte donde mueves el control creado , con el mouse.
El ultimo control creado mantiene sus coordenadas en el dialog pero pulsas cualquier otro control ya creado estos toman las cordenadas de ultimo control que creaste,

Sera posible si le damos un doble click encima de cada control creado podamos actulizar las cordendas propias de cada uno !

Estoy tratando de hacer en un dlg los diferentes arqueotipos de los asientos en un autobus , como hay tanta cantidad estilos y modelos de autobuses hay que crearlos por eso es importante poder esta moviendo los controles que en este caso serias botones para dar forma un arqueotipo .

Gracias cualquier ayuda agradeceria.

Guapilescity
Oscar Chacon

Continue the discussion