Estoy migrando a FW+xH una aplicación de Laboratorio que esta hecha con FoxPro 2.6 (viejito solo texto)...
El primer problema que se me presentó fue que el autor de la aplicación en Fox utilizó indices IDX a los cuales no pude acceder con xHarbour, pero con la ayuda de algo de documentación que aun se consigue me enteré que FP2.6 también puede manejar indices CDX compatibles con xHarbour, y luego de dedicarle algún tiempo retocando programas hice la migración de IDX a CDX y tengo ambas aplicaciones conviviendo sin problemas a nivel de DBF's...
Ahora se me presenta otro problemita, y es que para tomar los datos de los resultados de los análisis el autor de la aplicación en Fox utilizó una DBF para generar las pantallas (leyendas y get's incluidos) ... cosa que en un principio lo vi como algo absurdo, pero luego de involucrarme mas con la actividad de laboratorio le encontré el sentido al método... son muchas pantallas... de haberse ido por el método convencional tendría que haber hecho no menos de 80 módulos los cuales resolvió solo con uno apoyado en la DBF... Y no solo eso, sino que añadir un examen mas a la aplicación es cuestión de solo añadir los records necesarios a la DBF y listo...
Porque digo que se me presenta el problemita???... pues se trata de migrar una aplicación en Texto a Gráfico... Ya he dibujado 10 diálogos y me falta un montón... Cada diálogo que dibujo tengo que hacer su respectiva asociación a nivel de Prg... Entonces se me ocurrió la idea... Porque no aplicar la misma técnica de tener una DBF y dibujar los controles dinamicamente??? Y es aquí donde se me trancó la cosa... Los controles say's y get's (que es por donde estoy comenzando) que trato de dibujar en forma dinámica dentro del dialogo entran en conflicto con los controles estáticos...
A continuación parte de lo que estoy intentando...
- Code: Select all Expand view RUN
ConfResult->( DBSeek( RenglFact->Examen ) )
do while ( .not. ConfResult->( EOF() ) ) .and. ( ConfResult->Examen=RenglFact->Examen )
cControl :=alltrim( ConfResult->Control )
do case
case cControl='WTITLE'
// Este funciona perfecto... claro... actúa sobre un control estático
aAdd( oSay, NIL )
nItem :=len( oSay )
_cItem :=strtrim( nItem, 2 )
bSay :={ || alltrim( ConfResult->Leyenda ) }
oSay[ &_cItem ] :=TSay():ReDefine( 501, bSay, oResult:oDlg, '',,,, oControl:oFontSS9 )
case cControl='WSAY'
// Este no funciona...
aAdd( oSay, NIL )
nItem :=len( oSay )
_cItem :=strtrim( nItem, 2 )
bSay :={ || alltrim( ConfResult->Leyenda ) }
oSay[ &_cItem ] :=TSay():New( ConfResult->Row, ConfResult->Col, bSay, oResult:oDlg, '',;
oControl:oFontSS9, ( ConfResult->Align=='C' ), ( ConfResult->Align=='R' ),,,,,;
ConfResult->Width, 12 )
/*
Copiado solo para referencia de los parámetros que debo pasar.
METHOD New( nRow, nCol, bText, oWnd, cPicture, oFont,;
lCentered, lRight, lBorder, lPixels, nClrText, nClrBack,;
nWidth, nHeight, lDesign, lUpdate, lShaded, lBox, lRaised ) CLASS TSay
*/
endcase
ConfResult->( DBSkip() )
enddo
se produce este error...
Application
===========
Path and name: D:\Sistemas\CVF\Lab32.EXE (32 bits)
Size: 1,522,176 bytes
Time from start: 0 hours 0 mins 4 secs
Error ocurred at: 31/08/2007, 09:18:08
Error description: Error FiveWin/2 Duplicated Id: No: 111
Stack Calls
===========
Called from TDIALOG:DEFCONTROL(326)
Called from TSAY:NEW(127)
Called from GENERICO1P(58)
Called from (b)RESULTADOS(85)
Called from (b)RESULTADOS(170)
Called from TCONTROL:LDBLCLICK(1692)
Called from TWBROWSE:LDBLCLICK(1583)
Called from TWINDOW:HANDLEEVENT(0)
Called from TWBROWSE:HANDLEEVENT(1267)
Called from _FWH(3001)
Called from DIALOGBOX(0)
Called from TDIALOG:ACTIVATE(254)
Called from RESULTADOS(212)
Called from (b)MAINBUTTBAR(290)
Called from TBTNBMP:CLICK(311)
Called from TBTNBMP:LBUTTONUP(479)
Called from TWINDOW:HANDLEEVENT(0)
Called from TBTNBMP:HANDLEEVENT(1267)
Called from _FWH(3001)
Called from WINRUN(0)
Called from TWINDOW:ACTIVATE(860)
Called from MAIN(163)
Ciertamente el control 111 existe en el diálogo y corresponde a un combobox dibujado estáticamente.
A continuación el código del diálogo en el RC.
- Code: Select all Expand view RUN
Resultados_TomaDatos DIALOG 10, 20, 510, 280
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dlg_Edit"
FONT 6, "MS Sans Serif"
{
GROUPBOX "", 5001, 1, 24, 508, 256, BS_GROUPBOX
COMBOBOX 111, 50, 34, 120, 140, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX 112, 231, 34, 120, 140, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL 0, 201, "EDIT", ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP, 473, 34, 30, 12
RTEXT "Temperatura (\xBAC) _:", -1, 405, 36, 64, 8
RTEXT "Tecnica _:", -1, 188, 36, 40, 8
RTEXT "Muestra _:", -1, 6, 36, 40, 8
CTEXT "Titulo", 501, 145, 56, 220, 10
}
Lo que no termino de entender es porque si estoy intentando crear un objeto Say por el método New() el mismo intenta montarse sobre el combobox???
O es que no se pueden combinar controles dinámicos y estáticos en un diálogo???
O es que los diálogos solo funcionan con controles estáticos???
O es que debo ir pensando seriamente en la posibilidad de buscarme otro oficio???
1GB de Gracias de antemano por los comentarios...
Giancarlo J. Sabattino S.
Valencia, Venezuela