CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo

CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo

Postby guapilescity » Sat Nov 03, 2012 5: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.
guapilescity
 
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo

Postby horacio » Sat Nov 03, 2012 9: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
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo

Postby guapilescity » Sun Nov 04, 2012 1: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.
guapilescity
 
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo

Postby Antonio Linares » Sun Nov 04, 2012 7:26 pm

Oscar,

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

design.prg:
Code: Select all  Expand view
// 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41351
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo

Postby guapilescity » Mon Nov 05, 2012 3:27 am

Exelente ,
Como siempre muchas gracias por la ayuda,

Oscar Chacon
guapilescity
 
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo

Postby guapilescity » Tue Nov 27, 2012 4: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
guapilescity
 
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo

Postby Silvio.Falconi » 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 November 2023 - January 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
User avatar
Silvio.Falconi
 
Posts: 6824
Joined: Thu Oct 18, 2012 7:17 pm

Re: CAPTURAR CORDENADAS Y MOVER UN BOTTON DENTRO DE UN Dialogo

Postby guapilescity » Sat Dec 01, 2012 4: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
guapilescity
 
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 11 guests