FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour MASTER ANTONIO
Posts: 330
Joined: Fri May 25, 2007 09:06 PM
MASTER ANTONIO
Posted: Thu Feb 07, 2013 02:00 AM

en la clase TWindow

en metodo NEW, se encuentra esta linea.

#ifdef CLIPPER
if oIcon != nil
::SendMsg( WM_SETICON, 0, oIcon:hIcon )
endif
#endif

a que se refiere el Ifdef --- y porque

Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: MASTER ANTONIO
Posted: Thu Feb 07, 2013 02:15 AM

mantonio_08,

la sentencia:

ifdef

endif

Se usa para que cuando generes un Ejecutable o Libreria se tomen los codigos que corresponda a Clipper, xHarbour, Harbour, xBase segun el caso, determinas que se incluye cuando compiles con las herramientas mencionadas.

William, Morales

Saludos



m茅xico.sureste
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: MASTER ANTONIO
Posted: Thu Feb 07, 2013 02:21 AM
se refiere a la compilaci贸n condicional
Code (fw): Select all Collapse
#ifdef CONSTANTE
//si CONSTANTE es verdadero lo contenido ac谩 se compilara y formara parte del fuente
#else
//si CONSTANTE es false lo contenido ac谩 se compilara y formara parte del fuente
#endif


se usa
__CLIPPER__ para incluir codigo para clipper ( esta constante esta definida en alguna parte en clipper)
#define __CLIPPER__
__HARBOUR__ para incluir codigo para harbour
#define __HARBOUR__
__XHARBOUR__ para incluid codigo para xharbour
#define __XHARBOUR__
__XPP__ para incluid codigo para alaska xbase
#define __XPP__

este es un ejemplo propio de compilaci贸n condicional, lo uso para que cuando estoy desarrollando no tener que introducir los datos de usuario, sino que solamente doy enter y entro a la app.
Code (fw): Select all Collapse
#define FALSE 聽 聽 .f.
#define __ADMIN__
#define __PRUEBA__

FUNCTION PermitirAcceso()
聽 聽LOCAL lAcceso := FALSE

聽 聽PRIVATE oDlg
聽 聽PRIVATE oApodo, oContrasena
聽 聽PRIVATE cApodo, cContrasena

聽 聽nIntentos := 0

聽 聽#ifdef __PRUEBA__
聽 聽#ifdef __ADMIN__
聽 聽cApodo 聽 聽 聽:= PadR( LOGIN_USERDEV, 10 )
聽 聽cContrasena := PadR( LOGIN_PASSDEV, 10 )
聽 聽#else
聽 聽cApodo 聽 聽 聽:= PadR( "CIVS", 10 )
聽 聽cContrasena := PadR( "lodr", 10 )
聽 聽#endif
聽 聽#else
聽 聽cApodo 聽 聽 聽:= Space( 10 )
聽 聽cContrasena := Space( 10 )
聽 聽#endif

聽 聽CIUD->( OrdSetFocus( "NUM_CIUD" ) )
聽 聽USUA->( OrdSetFocus( "APODO" 聽 聽) )

聽 聽SELECT "USUA"
聽 聽SET RELATION TO NUM_CIUD INTO CIUD
聽 聽DBGoTop()

聽 聽DEFINE DIALOG oDlg NAME "DLG_ACCESO" ICON GetIcon() FONT oFontD

聽 聽REDEFINE BITMAP ;
聽 聽 聽 ID 301 OF oDlg ;
聽 聽 聽 NAME "BM_ACCESO"

聽 聽REDEFINE GET oApodo VAR cApodo ;
聽 聽 聽 ID 101 OF oDlg ;
聽 聽 聽 PICTURE "@!" ;
聽 聽 聽 UPDATE

聽 聽REDEFINE GET oContrasena VAR cContrasena ;
聽 聽 聽 ID 102 OF oDlg ;
聽 聽 聽 PICTURE "@" ;
聽 聽 聽 UPDATE

聽 聽REDEFINE BUTTON ;
聽 聽 聽 ID 201 OF oDlg ;
聽 聽 聽 ACTION IIf( lAcceso := PermitirAcceso_Validar(), oDlg:end(), NIL )

聽 聽REDEFINE BUTTON ;
聽 聽 聽 ID 202 OF oDlg ;
聽 聽 聽 ACTION oDlg:end() ;
聽 聽 聽 CANCEL

聽 聽ACTIVATE DIALOG oDlg ON INIT DisableX( oDlg )

聽 聽LimpiarAreas()

RETURN lAcceso


inculso en [x]harbour existe #undef que sirve para borra una declaraci贸n de constante anteriormente definida
Code (fw): Select all Collapse
#undef __MYCONSTANTE__ //prueba comentanto y compilando, y luego des-comentando y compilando
..
#ifdef __MYCONSTANTE__
procedure Proc01()
聽 聽?procname()
return
#else
procedure Proc02()
聽 聽?procname()
return
#endif


al compilar el procedimiento, seg煤n comentando o des-comentando la linea ( #undef __MYCONSTANTE__ )
veras que los procedimientos Proc01 o Proc02 Aparecen y desaparecen, esto es que son incluido en tiempo de compilaci贸n.
salu2
carlos vargas
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 330
Joined: Fri May 25, 2007 09:06 PM
Re: MASTER ANTONIO
Posted: Sat Feb 09, 2013 01:49 AM

MUCHAS GRACIAS MUY CLARA LA EXPLICACION

AHORA LA PREGUNTA DEL MILLON
en la clase twindow en el metodo new hay esta linea::

#ifdef CLIPPER
if oIcon != nil
::SendMsg( WM_SETICON, 0, oIcon:hIcon )
endif
#endif

esto quiere decir que ::SendMsg( WM_SETICON, 0, oIcon:hIcon ) solo se ejecutara si oIcon no es un nil..
lo que no entiendo es pq solo en CLIPPER.. ??? alguien me lo explica.. y no me digan para mantener la compatibilidad con versiones anteriores...
porque esta linea me ha dado unos dolores de cabeza::

no deja mostrar en forma correcta los iconos en las ventanas emergentes.. o sea las que no son MDICHILDS pero son parte de un ventana padre.

Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: MASTER ANTONIO
Posted: Sat Feb 09, 2013 02:25 AM
Hola

mantonio_08 wrote:esto quiere decir que ::SendMsg( WM_SETICON, 0, oIcon:hIcon ) solo se ejecutara si oIcon no es un nil..


No, se ejecuta el codigo
Code (fw): Select all Collapse
if oIcon != nil
::SendMsg( WM_SETICON, 0, oIcon:hIcon )
endif


si la constantes __CLIPPER__ esta definida

mantonio_08 wrote:y no me digan para mantener la compatibilidad con versiones anteriores...

es para mantener compatibilidad con distintos compiladores

ahora, tienes un problema que piensas puede ser esa linea, publica el codigo que estas haciendo y lo que quieres hacer
Posts: 330
Joined: Fri May 25, 2007 09:06 PM
Re: MASTER ANTONIO
Posted: Tue Feb 12, 2013 02:03 AM

aca el codigo:: tengo un clase TMain, en la cual defino un window padre asi::

//-------------------
METHOD WindowMain() CLASS TMain
Local This:=Self
Local oMenu
//
MENU oMenu
ENDMENU
//

SETBALLOON(.T.)

DEFINE WINDOW ::oWnd MDI MENU oMenu;
TITLE ::cTitulo PIXEL FROM 0, 0 TO Getsysmetrics(17), Getsysmetrics(16) BRUSH ::oBrushoWnd;
MENUINFO 0 ICON ::oIconoWnd

aca el ICON de la ventana se pinta OK..

luego en otra clase llamo a la ventana hija, pero flotante asi::

METHOD New(oWnd, oRbarMain) CLASS MantencionClientes

LOCAL This:=Self
LOCAL oDlg
LOCAL oIcon
LOCAL lValid:=.F.

::oWnd := oWnd
::oRbarMain:= oRbarMain
::Title:= ::oWnd:oMsgBar:cMsg

If( !::oIconoWnd = NIL, ::oIconoWnd:End(),)
DEFINE ICON ::oIconoWnd RESOURCE "oWnd"

DEFINE WINDOW ::oWndHija FROM 12,1 TO (Getsysmetrics(17)/16)-1, (Getsysmetrics(16)/8)-1;
VSCROLL OF ::oWnd ;
TITLE ::Title; // MDICHILD ;
ICON ::oIconoWnd ;
BORDER NONE

aqui el ICON no se pinta como debe pone uno standar de window.
OJO:: que no uso para la ventana hija, MDICHILD notece que esta comentado //

DANIEL
si comento esta linea de TWindow asi, funciona

//#ifdef CLIPPER
if oIcon != nil
::SendMsg( WM_SETICON, 0, oIcon:hIcon )
endif
//#endif

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: MASTER ANTONIO
Posted: Tue Feb 12, 2013 10:26 AM
Si vas a crear una ventana hija de una MDI, pero que no sea MDICHILD, tienes que cambiar a quien le pertenece:

DEFINE WINDOW ::oWndHija FROM 12,1 TO (Getsysmetrics(17)/16)-1, (Getsysmetrics(16)/8)-1;
VSCROLL OF ::oWndClient ;
TITLE ::Title; // MDICHILD ;
ICON ::oIconoWnd ;
BORDER NONE

Ya que la ventana MDI contiene una ventana invisible (oWndClient) que controla a todas las ventanas hijas.

Tu ejemplo modificado asi, funciona correctamente con FWH 13.01 en Windows 8 (sin tener que hacer la modificaci贸n que indicas en la Clase TWindow)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 330
Joined: Fri May 25, 2007 09:06 PM
Re: MASTER ANTONIO
Posted: Thu Feb 14, 2013 03:07 AM

MASTER ANTONIO

HICE EL CAMBIO COMO INDICASTE Y NO FUNCIONA... que podra ser..

Posts: 1303
Joined: Tue Jul 21, 2009 08:12 AM
Re: MASTER ANTONIO
Posted: Thu Feb 14, 2013 03:29 PM

Hola compa帽ero,

Si nos pones un ejemplo autocontenido nos ser谩 m谩s f谩cil poder ayudarte.

Un saludo

Muchas gracias. Many thanks.



Un saludo, Best regards,



Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producci贸n]



Implementando MSVC 2010, FWH64 y ADO.



Abandonando uso xHarbour y SQLRDD.
Posts: 330
Joined: Fri May 25, 2007 09:06 PM
Re: MASTER ANTONIO
Posted: Sun Feb 24, 2013 01:24 AM

MASTER ANTONIO::

asi me funciona,,

DEFINE WINDOW ::oWndHija FROM 12,1 TO (Getsysmetrics(17)/16)-1, (Getsysmetrics(16)/8)-1;
VSCROLL OF ::oWnd;
TITLE ::Title; // MDICHILD ;
BORDER NONE NOMAXIMIZE

      ::oWndHija:SetIcon( ::oIconoWnd )

GRACIAS..

Ahora pq. no funciona de las otras tantas maneras que probe NOSE..

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: MASTER ANTONIO
Posted: Sun Feb 24, 2013 03:32 AM

En la ventana principal usas la clausula MDI ?

Porque tienes comentado // MDICHILD al crear la hija ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 330
Joined: Fri May 25, 2007 09:06 PM
Re: MASTER ANTONIO
Posted: Sun Feb 24, 2013 04:54 PM

MASTER ANTONIO,

si, al crear la ventana padre uso MDI.. asi

DEFINE WINDOW ::oWnd MDI MENU oMenu;
TITLE ::cTitulo PIXEL FROM 0, 0 TO Getsysmetrics(17), Getsysmetrics(16) BRUSH ::oBrushoWnd;
MENUINFO 0 ICON ::oIconoWnd

afecta eso en algo lo que estoy haciendo..

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: MASTER ANTONIO
Posted: Sun Feb 24, 2013 08:51 PM

Si usas MDI en la principal, entonces en las hijas tienes que usar MDICHILD

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion