FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Pregunta de concepto
Posts: 365
Joined: Sat Oct 08, 2005 07:59 PM
Pregunta de concepto
Posted: Sat Feb 10, 2007 07: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í:
 ? oDlg:oFldr:nHeight

La pregunta es cómo he de definir MiDialogo:
Así?:
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
RETURN oDlg


o he de definirlo así:

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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Pregunta de concepto
Posted: Sun Feb 11, 2007 11:36 AM
Rafael,
#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
Posts: 365
Joined: Sat Oct 08, 2005 07:59 PM
Pregunta de concepto
Posted: Sun Feb 11, 2007 07: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:
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
Posts: 365
Joined: Sat Oct 08, 2005 07:59 PM
Pregunta de concepto
Posted: Sun Feb 11, 2007 07: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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Pregunta de concepto
Posted: Sun Feb 11, 2007 08:31 PM

Rafael,

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

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion