In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Funciones y Métodos

Foro público de Xailer en español
Responder
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Funciones y Métodos

Mensaje por ddupre »

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#ffffff" text="#000000">
<tt>Hola foro:<br>
Les planteo la siguiente duda de ignorante que soy.<br>
<br>
Necesito programar algunas rutinas dentro de un form, que harÃn
algunas tareas dependiendo de los valores que seleccione el
usuario en unos pocos controles (radiomenu, combobox, etc)<br>
Comencà escribiendo funciones al estilo Clipper pero no encuentro
como referirme a los controles, intentà poner algo asà dentro de
la funciÃn: <br>
<font color="#3333ff"> ÂÂÂÂÂÂ ÂÂÂÂÂ if ::oRadioMenu1:nIndex == 1Â
<------------------------------------------------<br >
ÂÂÂÂÂÂ ÂÂÂÂÂÂ ÂÂ nMesAct += (saldovta->pesosvtas -
saldovta->pesosdevo)<br>
ÂÂÂÂÂÂ ÂÂÂÂÂ else<br>
ÂÂÂÂÂÂ ÂÂÂÂÂÂ ÂÂ nMesAct += (saldovta->undvdas -
saldovta->dtas)<br>
ÂÂÂÂÂÂ ÂÂÂÂÂ endif<br>
</font>pero el compilado me responde: Warning W0001 Ambiguous
referece: 'SELF'<br>
<br>
Si pongo esto<br>
</tt><font color="#3333ff"><tt> ÂÂÂÂÂÂ ÂÂÂÂÂ if :oRadioMenu1:nIndex ==
1 <--------------------------------------------------<br >
ÂÂÂÂÂÂ ÂÂÂÂÂÂ ÂÂ nMesAct += (saldovta->pesosvtas -
saldovta->pesosdevo)<br>
ÂÂÂÂÂÂ ÂÂÂÂÂ else<br>
ÂÂÂÂÂÂ ÂÂÂÂÂÂ ÂÂ nMesAct += (saldovta->undvdas -
saldovta->dtas)<br>
ÂÂÂÂÂÂ ÂÂÂÂÂ endif<br>
</tt></font><br>
<tt>el compilador me responde:</tt><tt> Form1.prg(135) Error E0054Â
WITH Message [ORADIOMENU1] with no WITH OBJECT in sight.<br>
<br>
ÂCual es la forma correcta de hacerlo?<br>
<br>
<br>
Luego cambià la definiciÃn de las funciones por mÃtodos y no supe
como hacer que un mÃtodo se ejecute, intente poner una linea de la
misma forma que se llama a una funciÃn (simplemente con su nombre
y los parÃntesis() ), pero al compilar me salta el error de que no
se pueden resolver las "funciones" : <br>
Unresolved external '_HB_FUN_FUNC1000' Referenced from
C:WUTILESHLREPORTOBJFORM1.DBJ<br>
<br>
ÂComo se hace para que un mÃtodo creado por uno mismo se ejecute?<br>
<br>
<br>
Muchas gracias por cualquier ayuda.<br>
<br>
Un saludo<br>
Daniel.<br>
<br>
<br>
</tt>
</body>
</html>
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Funciones y Métodos

Mensaje por Carlos Ortiz »

This is a multi-part message in MIME format.
------=_NextPart_000_001E_01CBAD47.FAF514C0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_001F_01CBAD47.FAF514C0"
------=_NextPart_001_001F_01CBAD47.FAF514C0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Estimado Daniel,=20
va un ejemplo muy sencillo usando una clase y accediendo a sus metodos, =
espero sirva para aclarar el tema.
Atte. Carlos Ortiz.
------=_NextPart_001_001F_01CBAD47.FAF514C0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3Dcontent-type content=3D"text/html; =
charset=3DISO-8859-1">
<META content=3D"MSHTML 6.00.2900.5512" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY text=3D#000000 bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Estimado Daniel, </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>va un ejemplo muy sencillo usando una =
clase y=20
accediendo a sus metodos, esperoÂsirva para aclarar el =
tema.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>Â</DIV>
<DIV><FONT face=3DArial size=3D2>Atte. Carlos=20
Ortiz.</FONT><TT></DIV></TT></BODY></HTML>
------=_NextPart_001_001F_01CBAD47.FAF514C0--
------=_NextPart_000_001E_01CBAD47.FAF514C0
Content-Type: application/x-zip-compressed;
name="UsoClass.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="UsoClass.zip"
UEsDBBQAAgAIAHIFJj5inu/+ywAAACgBAAATAAAAU291cmNlL1Vzb0NsYXNz LnByZ12OvYrCQBDH
+0DeYYhNYmESiysWLOQOOw/xA65dJoMZWHfDZBe55/YFzK4KYjPFb/5f9TzP YA47cf+E3ik4je7b
6HFMeMPYk7zRxSDn9PmhEYUH5JtVsL11wTjoCMh60Z0GDWY6g2HUUZIs6+Cd qEcuYa8VNF9109bL
pm0jrfMsz2Zs0YQpqfjTbEgW2BeRTwORuiAEW822rCIDgPWQOjw7q/DI3hCo FRSvuUUSHTdOLm1Z
qV+6lu8WqNShd9eY9pG1D8+OPfkg0/47UEsDBBQAAgAIACsPJj7nyPkRUAEA AHUCAAASAAAAU291
cmNlL0NhbGN1bG8ucHJnrVA9a8MwEN0N/g+HuzSFRnGGDoYMwR/UkDjBcUo7 CvnqCFTJlexCf3e3
TpVlJ7RQOlUgkN67d3fvkRvfgxvYa/WOrFMRHI2KBTXGwRlnJ9QWjalgvVDz VjeOSNAwzVvGP2Tk
gHXfKT0+M2QnGsHijixCslyE4YAS3/O9Ky6Z6GuE4JFygXrOTsGAx5v14QDV NASycre1P/XSKomy
GyoAYJtW97vkvMkWzZp117OJ3Je7fVpWT8AeqFDaInmRVxDsNRpuuwBzMqoD SxECY1Vrb43Pg3Gg
Arg0HZWMUw2CArMp4NA+LRK34PAm5PZfj+/9akuVtOZqBj+DcU7zDEYWVhA6 ZHRUIjW8kWpYvdWq
5VjT2rq7WAGDzacEm+9rj/CGsqFneRRNsUUrCKbuuU1fd2gCV5RuDun3ycu/ pDGVHbfTL+IiyTPf
K9PqWBZQcPEFUEsDBBQAAgAIAOQQJj4SP3L1zQEAACMFAAAQAAAAU291cmNl L0Zvcm0xLnByZ72U
zW6cMBDH70i8wyi9LJESlCtSD1tCVKTlQyyp2uOsmSRuvUyKzTbbt+2xb1Eb yIakaatKTX0AMx7P
jH//MeGx78ExlB3vSRiO4FJzrFBrZw59z/deyVaoviE4eo9SUXcqbo6cPQxP /unwvXi1XK+hvuBu
ewYXVZGNc5cMAOIiK4s8yWvgChvJGbX92dOVpJHmHSruni68MW2MSvQKf1pa 4YbUGClL6rfFOcQd
oSGXexFM2cuqKJOq/gA8hmFI87SGPF3BL0cYQrH5SIbhFjuEW26oA9lqg62Q 2NkYe0AhyJkRFGvY
fjfcsJ5yTtW4OtJWGolKfqUF8JpatyWYO83OFyspPj1y870kPx/oPhZ0IH16 d7V9IUH/dACYKz4d
2kIrLShtyRi5ww5IQUOb/nqE+Lkn0PIatTWCoE4goAIeMd9rMwSKooNU0Wuo p/kiiHL6sgieVSud
tGFQCMLeAprtuw96aLHIPm01NvhDqkhM3ed7VVJfVjnkUr0o3N8I/xzeWanT OyO9FGZhFx6uVdSm
NsRdMFBZuhZlh3lsT0f+wGcPNyjsNw/KtCRIS+Oc1Teg9uD3N/Dmiti/kWuA 3WB3GQ6JeWP6Hf8P
0D8AUEsDBBQAAgAIAOQQJj4U63RFswEAAEgEAAAQAAAAU291cmNlL0Zvcm0x LnhmbZWT30+DMBDH
35fsf7jwxBJiBmOIJD5sCBlmbGagPtfRabOuLFCi0fi/2xY3qjHqeOr94O7T 713TKJ8tryCsMOI4
LqudCbQ1YADhfJJlkEu33e/1ewCQxIe4MsUXBBnm07JhRW3C2B1b4NhDC0a+ Y4Ht+jD4khhSghnP
yCs2YXTuihTb01PWOX7hEFyCoboaXaSMS6YiuTyYg6DFMMFIM8gQqyHDFdkY FvgWCAB3ONQLL1nC
CCeIitbH+p1La/RZt/03WlwlsTplzR5XgS7UWXwmO6jofZLPYDm9jsJcsq5Q QcoUs8ZWxEdTYC/w
sylQ6Uaj0xS0PSGgwL8Q2ni6eijheFfLcm9gJLt9WXFci9saIWKcFKgQFrwf 07/f4mfOqCD8DtGy
UpgpqrfS8w9KX+C5cnye5LW1LHqDKjHiw7SESMfQqSM8/zJCNqHkke1wW4Kj MFrk0aoLp+hljtkj
f5Jh/0QhppyFiK4biloppg3nJfuHEHJWUgjP+aZDt8mHwt2OLZl4B+utimqd ldM4kXyOHjBt10wd
/2Z2xnJmQmJnLJ/oj8xqKX5HWUX57Wqh+vR7H1BLAwQUAAIACADyECY+BxGM 9aoCAACpBQAADAAA
AFVzb0NsYXNzLnhwamWUW2/aMBTH3yPlO+x9GiKhl3VSHlouaqZSELCLBDw4 jglefZvttNBvu2+y
49hAsj3F5/c/xz43WM8Xs6/j4WobR6ujIhk5kDgaEYM1VZZKkX0zcsiQMXE0 q62q7Rn0Gteh5Ioy
orPDI9KFrHUcTREVU1nWjGQTqXnSU7oCWjNLFSO5MBYJTEzWW/Xi6Od8igTd EWO9nWN4M47mSCNO
LNEGjNl4mvUmIH4H2+WU9PpxtCCMIEMyOD7UlJXu4LJB4pjdG0ON/UDFDhL4 YylGTlPHBa32Fm5c
aVSSKdIv7noI4kRYd1zP5qt89ryEbtzXVnIEoVPCX5EeEcwgp6YlTaIjUtRV Dg94c1krpYkxT1SQ
55oXROfN4yFi0nJZ7qW2uLaWisorP5AWAqwn8kpYlkCzpCazpv8uK2c9DIcA nIHUBBruA4fgIBmB
bgfgXCGFF++7HuULmO1skY9dSUsYDyYjqjN/gm4LzOqyQeHo+mrOfqczzKD4 5QB84mh8UFCBM0df
No9E65IYtDkgtwfpZok4jNlsLouznuRPTQLJZXmanUizIWK4ZtKbg/a+rJ/y h8V9yDzJPq79/Vv/
6TFauPgzlvjg2eDCjM/E86vs05n/ZtQSj68vGGx+BM0LN/89CbOLo1uH937V t9oG589t+so9vHNX
n2Bl36jwPOm3vStb1TQISVtgSFSBp23OEdYyCINONmUZ8FUbl8VO2NCc5Lqd Eyi4PCk3/8TslA3K
bTvG0MMlplP2vgAtCJ3SIS9Uhimk/baCMBmkQejUjmGhFarCjNK0q3EuQyvT TgOUCrRTv8KaKHl6
v9OAffFOTzGd+t+BBe4GXmC8xf03yFW6/U8/B6ZM+bKRZYHPVdy1FW4or07S oH+66O2MkoAodz+o
M04Dho2Bf5Mwhr9QSwECFAAUAAIACAByBSY+Yp7v/ssAAAAoAQAAEwAAAAAA AAAAACAAtIEAAAAA
U291cmNlL1Vzb0NsYXNzLnByZ1BLAQIUABQAAgAIACsPJj7nyPkRUAEAAHUC AAASAAAAAAAAAAAA
IAC0gfwAAABTb3VyY2UvQ2FsY3Vsby5wcmdQSwECFAAUAAIACADkECY+Ej9y 9c0BAAAjBQAAEAAA
AAAAAAAAACAAtIF8AgAAU291cmNlL0Zvcm0xLnByZ1BLAQIUABQAAgAIAOQQ Jj4U63RFswEAAEgE
AAAQAAAAAAAAAAAAIAC0gXcEAABTb3VyY2UvRm9ybTEueGZtUEsBAhQAFAAC AAgA8hAmPgcRjPWq
AgAAqQUAAAwAAAAAAAAAAAAgALSBWAYAAFVzb0NsYXNzLnhwalBLBQYAAAAA BQAFADcBAAAsCQAA
AAA=
------=_NextPart_000_001E_01CBAD47.FAF514C0--

Attached files UsoClass.zip (2.6 KB)Â
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Funciones y Métodos

Mensaje por ddupre »

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
<tt>Carlos,<br>
Muchas gracias por tu ayuda.<br>
Este ejemplo me ha enseÃado mucho y dentro de mi ignorancia en
clases pude comprender los pasos a seguir para hacer lo que
quiero. Pido que me corrijas si me equivoco<br>
<br>
1) En el form definir una propiedad para poder instanciar un
objeto.<br>
2) Luego en el inicio del formulario instanciar la clase y guardar
su valor en dicha propiedad<br>
3) Crear un nuevo .prg en donde se define la nueva clase heredando
de alguna otra, donde declaro los mÃtodos y propiedades que
necesito.<br>
4) Escribo la lÃgica de los mÃtodos declarados segÃn mis
necesidades.<br>
5) Luego en el form accedo a el/los mÃtodos dentro de algÃn evento
del mismo o de alguno de sus controles.<br>
<br>
Si esto lo hago con funciones seria:<br>
<br>
1) Declarar la funciÃn escribiendo la lÃgica que necesito
utilizando las variables en las que el usuario carga sus valores.<br>
2) Donde necesito que esa funciÃn se ejecute poner una linea con
su nombre terminado con ().<br>
<br>
A simple vista parece mas sencillo lo segundo y seguramente para
muchas situaciones asà lo sea.<br>
</tt><br>
<tt>ÂHay alguna forma de poder utilizar los controles de un form
dentro de una funciÃn?</tt><br>
<br>
<tt><br>
Muchas gracias<br>
Daniel</tt><br>
<br>
<br>
<br>
El 06/01/11 03:18, Carlos Ortiz escribiÃ:
<blockquote cite="mid:[email=4d2551b1@svctag-j7w3v3j.]4d2551b1@svctag-j7w3v3j.[/email]" type="cite">
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
<meta content="MSHTML 6.00.2900.5512" name="GENERATOR">
<style></style>
<div><font face="Arial" size="2">Estimado Daniel, </font></div>
<div><font face="Arial" size="2">va un ejemplo muy sencillo usando
una clase y accediendo a sus metodos, esperoÂsirva para
aclarar el tema.</font></div>
<div>Â</div>
<div><font face="Arial" size="2">Atte. Carlos Ortiz.</font></div>
</blockquote>
</body>
</html>
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Funciones y Métodos

Mensaje por Carlos Ortiz »

Quizás usando objetos en algo tan básico puede parecer mas código o mas
complejo, pero esta metodología de programar o pensar orientado a objetos
(uso de clases y métodos) es mas potente que la programación basada en
funciones y podés ordenar mejor el código.
Con las clases podes encapsular el comportamiento de tu sistema en objetos,
además tenés herencia y otras cosas más que vienen bárbaro para programar.
Para más tarde te paso el ejmplo a funciones, un saludo.
Atte. Carlos Ortiz.
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Funciones y Métodos

Mensaje por ddupre »

Carlos:
Muchas gracias por tu ayuda y seguramente que programar oop es mejor, lo
que me pasa es que es la primera vez que me enfrento a una situación
donde el uso de funciones me complicó un poco.
Te agradeceré mucho el nuevo ejemplo.
Un Saludo
Daniel.
El 06/01/11 11:55, Carlos Ortiz escribió:
> Quizás usando objetos en algo tan básico puede parecer mas código o mas
> complejo, pero esta metodologí­a de programar o pensar orientado a objetos
> (uso de clases y métodos) es mas potente que la programación basada en
> funciones y podés ordenar mejor el código.
>
> Con las clases podes encapsular el comportamiento de tu sistema en objetos,
> además tenés herencia y otras cosas más que vienen bárbaro para programar.
>
> Para más tarde te paso el ejmplo a funciones, un saludo.
>
> Atte. Carlos Ortiz.
>
>
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

Funciones y Métodos

Mensaje por Martin Del Angel »

On 1/5/2011 6:22 PM, Daniel Du Pré wrote:
> Hola foro:
> Les planteo la siguiente duda de ignorante que soy.
>
> Necesito programar algunas rutinas dentro de un form, que harán algunas
> tareas dependiendo de los valores que seleccione el usuario en unos
> pocos controles (radiomenu, combobox, etc)
> Comencé escribiendo funciones al estilo Clipper pero no encuentro como
> referirme a los controles, intenté poner algo así­ dentro de la función:
> if ::oRadioMenu1:nIndex == 1
> <------------------------------------------------
> nMesAct += (saldovta->pesosvtas - saldovta->pesosdevo)
> else
> nMesAct += (saldovta->undvdas - saldovta->dtas)
> endif
> pero el compilado me responde: Warning W0001 Ambiguous referece: 'SELF'
>
> Si pongo esto
> if :oRadioMenu1:nIndex == 1
> <--------------------------------------------------
> nMesAct += (saldovta->pesosvtas - saldovta->pesosdevo)
> else
> nMesAct += (saldovta->undvdas - saldovta->dtas)
> endif
>
> el compilador me responde:Form1.prg(135) Error E0054 WITH Message
> [ORADIOMENU1] with no WITH OBJECT in sight.
>
> ¿Cual es la forma correcta de hacerlo?
>
>
> Luego cambié la definición de las funciones por métodos y no supe como
> hacer que un método se ejecute, intente poner una linea de la misma
> forma que se llama a una función (simplemente con su nombre y los
> paréntesis() ), pero al compilar me salta el error de que no se pueden
> resolver las "funciones" :
> Unresolved external '_HB_FUN_FUNC1000' Referenced from
> C:WUTILESHLREPORTOBJFORM1.DBJ
>
> ¿Como se hace para que un método creado por uno mismo se ejecute?
>
>
> Muchas gracias por cualquier ayuda.
>
> Un saludo
> Daniel.
>
>
Hola Daniel:
Para Poder acceder a objetos de la clase usando funciones, tienes que
que hacer esto:
Cuando llames la Funcion, por ejemplo:
IF EnviaMail(Self)
msginfo()
else
msgstop()
endif
FUNCTION EnviaMail(Self)
local nCual
if ::oRadioMenu1:nIndex == 1 <=====Miembro de la Clase
nCual:=1
else
nCual:=2
endif
return .t.
Si no envias como parametro Self , cualquier referencia que hagas a un
miembro de la clase dentro de la función, tendras el error.
Warning W0001 Ambiguous referece: 'SELF'
Debe de funcionar sin problema alguno.
Saludos...
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Funciones y Métodos

Mensaje por ddupre »

Martin:
Lo probare y te cuento.
Muchas gracias
Un Saludo
El 06/01/11 13:38, Martin Del Angel escribió:
> On 1/5/2011 6:22 PM, Daniel Du Pré wrote:
>> Hola foro:
>> Les planteo la siguiente duda de ignorante que soy.
>>
>> Necesito programar algunas rutinas dentro de un form, que harán algunas
>> tareas dependiendo de los valores que seleccione el usuario en unos
>> pocos controles (radiomenu, combobox, etc)
>> Comencé escribiendo funciones al estilo Clipper pero no encuentro como
>> referirme a los controles, intenté poner algo así­ dentro de la función:
>> if ::oRadioMenu1:nIndex == 1
>> <------------------------------------------------
>> nMesAct += (saldovta->pesosvtas - saldovta->pesosdevo)
>> else
>> nMesAct += (saldovta->undvdas - saldovta->dtas)
>> endif
>> pero el compilado me responde: Warning W0001 Ambiguous referece: 'SELF'
>>
>> Si pongo esto
>> if :oRadioMenu1:nIndex == 1
>> <--------------------------------------------------
>> nMesAct += (saldovta->pesosvtas - saldovta->pesosdevo)
>> else
>> nMesAct += (saldovta->undvdas - saldovta->dtas)
>> endif
>>
>> el compilador me responde:Form1.prg(135) Error E0054 WITH Message
>> [ORADIOMENU1] with no WITH OBJECT in sight.
>>
>> ¿Cual es la forma correcta de hacerlo?
>>
>>
>> Luego cambié la definición de las funciones por métodos y no supe como
>> hacer que un método se ejecute, intente poner una linea de la misma
>> forma que se llama a una función (simplemente con su nombre y los
>> paréntesis() ), pero al compilar me salta el error de que no se pueden
>> resolver las "funciones" :
>> Unresolved external '_HB_FUN_FUNC1000' Referenced from
>> C:WUTILESHLREPORTOBJFORM1.DBJ
>>
>> ¿Como se hace para que un método creado por uno mismo se ejecute?
>>
>>
>> Muchas gracias por cualquier ayuda.
>>
>> Un saludo
>> Daniel.
>>
>>
>
> Hola Daniel:
>
> Para Poder acceder a objetos de la clase usando funciones, tienes que
> que hacer esto:
>
> Cuando llames la Funcion, por ejemplo:
>
> IF EnviaMail(Self)
> msginfo()
> else
> msgstop()
> endif
>
>
> FUNCTION EnviaMail(Self)
> local nCual
> if ::oRadioMenu1:nIndex == 1 <=====Miembro de la Clase
> nCual:=1
> else
> nCual:=2
> endif
>
> return .t.
>
> Si no envias como parametro Self , cualquier referencia que hagas a un
> miembro de la clase dentro de la función, tendras el error.
> Warning W0001 Ambiguous referece: 'SELF'
>
>
> Debe de funcionar sin problema alguno.
>
>
>
>
>
> Saludos...
>
>
ddupre
Mensajes: 329
Registrado: Lun Nov 12, 2007 3:53 pm

Funciones y Métodos

Mensaje por ddupre »

Martin:
Funciono perfecto
Mil gracias
Saludos
El 06/01/11 13:38, Martin Del Angel escribió:
> On 1/5/2011 6:22 PM, Daniel Du Pré wrote:
>> Hola foro:
>> Les planteo la siguiente duda de ignorante que soy.
>>
>> Necesito programar algunas rutinas dentro de un form, que harán algunas
>> tareas dependiendo de los valores que seleccione el usuario en unos
>> pocos controles (radiomenu, combobox, etc)
>> Comencé escribiendo funciones al estilo Clipper pero no encuentro como
>> referirme a los controles, intenté poner algo así­ dentro de la función:
>> if ::oRadioMenu1:nIndex == 1
>> <------------------------------------------------
>> nMesAct += (saldovta->pesosvtas - saldovta->pesosdevo)
>> else
>> nMesAct += (saldovta->undvdas - saldovta->dtas)
>> endif
>> pero el compilado me responde: Warning W0001 Ambiguous referece: 'SELF'
>>
>> Si pongo esto
>> if :oRadioMenu1:nIndex == 1
>> <--------------------------------------------------
>> nMesAct += (saldovta->pesosvtas - saldovta->pesosdevo)
>> else
>> nMesAct += (saldovta->undvdas - saldovta->dtas)
>> endif
>>
>> el compilador me responde:Form1.prg(135) Error E0054 WITH Message
>> [ORADIOMENU1] with no WITH OBJECT in sight.
>>
>> ¿Cual es la forma correcta de hacerlo?
>>
>>
>> Luego cambié la definición de las funciones por métodos y no supe como
>> hacer que un método se ejecute, intente poner una linea de la misma
>> forma que se llama a una función (simplemente con su nombre y los
>> paréntesis() ), pero al compilar me salta el error de que no se pueden
>> resolver las "funciones" :
>> Unresolved external '_HB_FUN_FUNC1000' Referenced from
>> C:WUTILESHLREPORTOBJFORM1.DBJ
>>
>> ¿Como se hace para que un método creado por uno mismo se ejecute?
>>
>>
>> Muchas gracias por cualquier ayuda.
>>
>> Un saludo
>> Daniel.
>>
>>
>
> Hola Daniel:
>
> Para Poder acceder a objetos de la clase usando funciones, tienes que
> que hacer esto:
>
> Cuando llames la Funcion, por ejemplo:
>
> IF EnviaMail(Self)
> msginfo()
> else
> msgstop()
> endif
>
>
> FUNCTION EnviaMail(Self)
> local nCual
> if ::oRadioMenu1:nIndex == 1 <=====Miembro de la Clase
> nCual:=1
> else
> nCual:=2
> endif
>
> return .t.
>
> Si no envias como parametro Self , cualquier referencia que hagas a un
> miembro de la clase dentro de la función, tendras el error.
> Warning W0001 Ambiguous referece: 'SELF'
>
>
> Debe de funcionar sin problema alguno.
>
>
>
>
>
> Saludos...
>
>
Responder