Page 1 of 1

Cómo definir un Browse desde recursos

Posted: Tue Dec 13, 2005 7:19 pm
by Rafael Clemente
Estoy intentando abrir un diálogo con sólo un browse de una columna.

En mi RC:

LOOKUP1 DIALOG DISCARDABLE 43, 27, 91, 76 STYLE WS_POPUP|DS_MODALFRAME|WS_SYSMENU|WS_VISIBLE
FONT 8, "System"
BEGIN
CONTROL "Cancel", IDCANCEL, "Button", WS_TABSTOP, 44, 0, 45, 15
CONTROL "", 4001, "ListBox", WS_VSCROLL | WS_BORDER | WS_TABSTOP, 0, 16, 88, 52
END


Mi Programa:
//─────────────────────────────────────
STATIC FUNCTION LookUp()
LOCAL oDlg, oLbx

DEFINE DIALOG oDlg RESOURCE "LOOKUP1"
REDEFINE LISTBOX oLbx ID 4001;
ALIAS AFAB ;
FIELDS AFAB->NOMBRE ;
HEADERS "Nombre" ;
SIZES 100
ACTIVATE DIALOG oDlg
RETURN NIL


Lo he probado de mil maneras y siempre me da error al compilar:
a1.prg(222) Error E0022 Invalid lvalue: 'Numeric' - La linea 222 es el REDEFINE

Por favor, alguien me puede decir qué estoy haciendo mal? Mejor con un ejemplo. Gracias

Rafael
[/url]

Posted: Tue Dec 13, 2005 7:55 pm
by Antonio Linares
Rafael,

Cambia "ListBox" por "TWBrowse" en el RC.

En el código prueba esto:

REDEFINE LISTBOX oLbx ID 4001 OF oDlg;
ALIAS AFAB ;
FIELDS AFAB->NOMBRE ;
HEADERS "Nombre" ;
SIZES 100

Posted: Tue Dec 13, 2005 8:19 pm
by Rafael Clemente
No: Al compilar sigue dando este error:

a1.prg(222) Error E0022 Invalid lvalue: 'Numeric'

222 es la línea del REDEFINE. Esroy utilizando la última versión de FWPPC, recién descargada anteayer.

De la única manera que consigo compilar es :
REDEFINE LISTBOX oLbx ID 4001 OF oDlg y nada más.

Pero esto, claro, me da error al ejecutar (oLbx es NIL)

Rafael

Antonio: Yo utilizo Pelles C para crear mis .RC ¿Hay algún otro programa que permita generar archivos más compatibles con FWPPC, sin tener que retocar tanto a mano el RC?

Posted: Wed Dec 14, 2005 10:57 am
by Rafael Clemente
Antonio:
EMpiezo a creen que el REDEFINE LISTBOX en diálogos no funciona. Sencillamente, da error y ni siquiera compila. Lo mejor que he conseguido es esto:

oLbx := TWBrowse():Redefine(4001,{|| {customer->first} }, oDlg,;
{"Nombre"},;
{200}, , , , , {|nRow,nCol,nFlags|MiFuncion()},;
, oFont , , , , , , "Customer", , , , )

que por lo menos se ve en su diálogo pero da error "ARGUMENT ERROR .TOT." en cuanto haces click en cualquier registro. Adjunto código completo de la prueba, a ver si puedes darme alguna idea de como solucionarlo:

Code: Select all

#include "FWCE.ch"
#include "WinApi.ch"
//----------------------------------------------------------------------------/
FUNCTION Main()
LOCAL oWnd, oDlg, oLbx

USE (CurDir()+"\Customer") NEW             // La DBF de \SAMPLES
DEFINE WINDOW oWnd TITLE "Test"
ACTIVATE WINDOW oWnd ON INIT AbrirDlg()
RETURN NIL

STATIC FUNCTION AbrirDlg()

DEFINE DIALOG oDlg RESOURCE "LOOKUP1"
DEFINE FONT oFont NAME "Arial" SIZE 0, -12

oLbx := TWBrowse():Redefine(4001,{|| {customer->first} }, oDlg,;
                            {"Nombre"},;
                            {200}, , , , , {|nRow,nCol,nFlags|MiFuncion()},;
                            , oFont , , , , , , "Customer", ,  , , )

ACTIVATE DIALOG oDlg
RETURN NIL

FUNCTION MiFuncion()
MsgInfo("Hola")
RETURN NIL

// -----------------------------------------------------------------------
El fichero .RC:

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_SPANISH,SUBLANG_SPANISH_MODERN

LOOKUP1 DIALOG DISCARDABLE 43, 27, 91, 76
STYLE WS_POPUP|DS_MODALFRAME|WS_SYSMENU|WS_VISIBLE
FONT 8, "System"
BEGIN
  CONTROL "Cancel", IDCANCEL, "Button", WS_TABSTOP, 0, 0, 45, 15
  CONTROL "", 4001, "TWBrowse", WS_VSCROLL|WS_BORDER|WS_TABSTOP, 0, 16, 88, 52
END





Posted: Wed Dec 14, 2005 11:05 am
by Antonio Linares
Rafael,

Tu ejemplo ha funcionado a la primera. Lo único que tienes que quitar es esta línea del RC:

#include <richedit.h>

ya que no existe, y entonces el RC no se compila.

De todas formas, una vez se visualiza, al hacer click en una línea del browse da un error. Vamos a ver de que se trata.

Posted: Wed Dec 14, 2005 11:08 am
by Rafael Clemente
Sí, Antonio. Justo ése es el problema
Rafael

Posted: Wed Dec 14, 2005 11:15 am
by Antonio Linares
Rafael,

Acabamos de publicar un nuevo build de FWPPC que soluciona el problema. Por favor descárgalo y prueba tu ejemplo de nuevo. Gracias.

Funciona!

Posted: Wed Dec 14, 2005 11:40 am
by Rafael Clemente
Antonio: La nueva versión de FWPPC funciona perfectamente!

Respecto a lo del REDEFINE LISTBOX, acabo de descubrir que es dependiente del orden de los parámetros:

Este funciona bien:
REDEFINE LISTBOX oLbx FIELDS AFAB->NOMBRE ALIAS "AFAB" ID 4001 OF oDlg ON DBLCLICK MiFuncion()

Pero este da Error E0022 Invalid lvalue: 'String' al compilar:
REDEFINE LISTBOX oLbx ID 4001 OF oDlg ALIAS "AFAB" FIELDS AFAB->NOMBRE

Gracias!
Rafael