Page 1 of 1

Pregunta de concepto

Posted: Sat Feb 10, 2007 7:32 pm
by Rafael Clemente
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

 ? oDlg:oFldr:nHeight 
La pregunta es cómo he de definir MiDialogo:
Así?:

Code: Select all

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

RETURN oDlg
o he de definirlo así:

Code: Select all

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

Posted: Sun Feb 11, 2007 11:36 am
by Antonio Linares
Rafael,

Code: Select all

#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

Posted: Sun Feb 11, 2007 7:44 pm
by Rafael Clemente
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

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

Posted: Sun Feb 11, 2007 7:49 pm
by Rafael Clemente
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

Posted: Sun Feb 11, 2007 8:31 pm
by Antonio Linares
Rafael,

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