Hola mis cuates,
Estoy haciendo un especie de MSGGet pero que el dialogo se ajuste al tamaño del texto (cuando es extenso). Lo normal seria sencillamente hacer esto:
Sin embargo todo me aparece desproporcionado. El boton aparece gigante, las lineas no caben en el dialogo a lo ancho y a lo alto ocupa mucho mas espacio del que deberia al grado de que la respuesta a capturar no aparece.
Que estoy haciendo mal?
Estoy haciendo un especie de MSGGet pero que el dialogo se ajuste al tamaño del texto (cuando es extenso). Lo normal seria sencillamente hacer esto:
FUNCTION Pregunta(Preg,Resp,Titu,cHelpID) //Pregunta que hara,Respuesta por defecto,Titulo del dialogo,Codigo para enlazarse a la ayuda
LOCAL oDlg,oBtnXDef,oFnt
LOCAL Lineas,AnchoMax:=0,Alto,AltoDlg,oPreg,oResp,I,X
DEFINE FONT oFnt NAME "ARIAL" SIZE 0,15 //Define la letra a usar
Lineas:=MLCOUNT(Preg,120)+1 //No de renglones que tiene la pregunta considerando esos caracteres por renglon
DEFINE DIALOG oDlg FROM 5, 5 TO 15, 40 TITLE Titu FONT oFnt
FOR I:=1 TO Lineas ; AnchoMax:=MAX(oDlg:GetWidth(MEMOLINE(Preg,120,I),oFnt),AnchoMax) ; NEXT //Calcula el ancho maximo
Alto:=oDlg:nGetChrHeight() //Altura de cada linea
@ 1,1 BTNBMP oBtnXDef FILENAME ".\BAceptar.BMP" OF oDlg SIZE 58,58 ACTION oDlg:END() TOOLTIP "Aceptar lo que tecleaste"
@ 59,1 GET Preg MULTILINE OF oDlg SIZE AnchoMax,Lineas*Alto PIXEL WHEN .F. //Muestra la pregunta
@ ((Lineas+1)*Alto)+58,1 GET oResp VAR Resp OF oDlg SIZE AnchoMax,Alto PIXEL //Toma la respuesta
ACTIVATE DIALOG oDlg CENTER ;
ON INIT ( oDlg:nWidth:=AnchoMax+5,oDlg:nHeight:=(Alto*(Lineas+2))+58+53,oDlg:CENTER(),oDlg:REFRESH(),SYSREFRESH() ) //Ajusta el dialogo al texto de la pregunta
oFnt:END()
RETURN(Resp)Sin embargo todo me aparece desproporcionado. El boton aparece gigante, las lineas no caben en el dialogo a lo ancho y a lo alto ocupa mucho mas espacio del que deberia al grado de que la respuesta a capturar no aparece.
Que estoy haciendo mal?