Pregunta de concepto

Pregunta de concepto

Postby Rafael Clemente » Sat Feb 10, 2007 7:32 pm

Es una pregunta de principiante pero es que ha estado haciendo pruebas toda la tarde y ya me da vueltas la cabeza. Se trata de:

Quisiera crear una clase que se comporte como un diálogo con algún control -por ejemplo, un folder- dentro.

La invocaré así: oDlg := MiDialogo():New(oParent)
y pretendo -por eemplo- poder saber la altura del folder así:
Code: Select all  Expand view  RUN
? oDlg:oFldr:nHeight

La pregunta es cómo he de definir MiDialogo:
Así?:
Code: Select all  Expand view  RUN
CLASS MiDialogo From TDialog
....
ENDCLASS

METHOD New(oParent) CLASS MiDialogo
Local oDlg
DEFINE DIALOGO oDlg RESOURCE "MI_RECURSO_DLG" Of oParent
REDEFINE FOLDER oFldr ID 1000 OF oDlg
RETURN Self

o bien
Code: Select all  Expand view  RUN
RETURN oDlg


o he de definirlo así:

Code: Select all  Expand view  RUN
oDlg := Super():New(...,oParent,..)

o bien así:  oDlg := TDialog():New(..., oParent,...)
o simplemente:  Super():New(..., oParent,...)
...
Return oDlg    ¿O es RETURN Self?


Supongo que esto de la herencia es un tema que tengo muy confuso. Por favor: Alguien podría ponerme un ejemplo de seis líneas que mostrase la forma correcta de hacerlo?

Gracias
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Antonio Linares » Sun Feb 11, 2007 11:36 am

Rafael,
Code: Select all  Expand view  RUN
#include "FiveWin.ch"

function Main()

   local oDlg := MiDialogo():New()
   
   oDlg:Activate()
   
return nil   

CLASS MiDialogo From TDialog

   DATA oFldr
   
   METHOD New( oParent )

ENDCLASS

METHOD New( oParent ) CLASS MiDialogo

   Super:New( ,,,,, "MI_RECURSO_DLG",,,,,,, oParent )

   REDEFINE FOLDER ::oFldr ID 1000 OF Self ...
   
RETURN Self
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42150
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Rafael Clemente » Sun Feb 11, 2007 7:44 pm

Antonio:

Muchas gracias por el ejemplo que es justamente lo que yo necesitaba. Sin embargo, me queda una duda: Si definimos MyDialog() como una herencia de TDialog, ya es en sí un diálogo. A qué viene, pues, redefinirlo otra vez en New()? No estaremos creando así un diálogo dentro de otro diálogo?

Ultimamente estoy haciendo pruebas con esto, que parece que funciona:
Code: Select all  Expand view  RUN
CLASS MiDialogo From TDialog
   DATA oFldr
   METHOD New( oParent )
ENDCLASS

METHOD New( oParent ) CLASS MiDialogo
   // Super:New( ,,,,, "MI_RECURSO_DLG",,,,,,, oParent ) <-  NO LO REDEFINO!!!
   Super():New()
   ::cResname := "MI_RECURSO_DLG"
   ::oWnd:= oParent
   REDEFINE FOLDER ::oFldr ID 1000 OF Self ...
RETURN Self

Es correcto o estoy haciendo algo mal?
Gracias otra vez y perdona lo teórico de la pregunta pero quizá sirva también para aclararle las ideas a alguien más en el foro
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Rafael Clemente » Sun Feb 11, 2007 7:49 pm

Antonio:
Perodona otra vez. Acabo de darme cuenta que mi ejemplo es lo mismo que el tuyo pero escrito de otra forma. Ignora mi mensaje, por favor.
Gracias
Rafael
User avatar
Rafael Clemente
 
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Postby Antonio Linares » Sun Feb 11, 2007 8:31 pm

Rafael,

Si, es lo mismo, pero escrito distinto :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42150
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 60 guests