Pregunta de concepto

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

Pregunta de concepto

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Rafael Clemente
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Post 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
User avatar
Rafael Clemente
Posts: 365
Joined: Sat Oct 08, 2005 7:59 pm
Location: Barcelona, Spain

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Rafael,

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

Antonio Linares
www.fivetechsoft.com
Post Reply