FoxPro/Visual FoxPro - Consulta sobre Código de conola

 
Vista:
sin imagen de perfil

Consulta sobre Código de conola

Publicado por Pablo (3 intervenciones) el 16/09/2015 23:59:21
Hola a todos,

La verdad que por situaciones de la vida hace rato (varios años) que no entro por estos lugares, pero se fueron arreglando mis cosas y voy a rendir uno de mis tres últimos finales de Analista de Sistemas. Y para que se den una idea hace mas de dos años y medio que no toco VFP9 en el cual esta programado mi Sistema para una Fabrica de Aberturas de Aluminio.-

Ahora aquí mi consulta y pedido.. hace unas semanas que vengo dando vueltas en el código y de a poco voy tirando, pero cuando llegue a realizar un código para un Combobox con buzqueada autoincremental, se me quemaron los papeles.-

Buscando en la WEB encontré este código de dos ejemplos, código que al ejecutarlo en la consola de comandos nos muestra el resultado

Codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
PUBLIC miForm
miForm = CREATEOBJECT("FormularioPruebas")
miForm.SHOW
RETURN
 
DEFINE CLASS FormularioPruebas AS FORM
  ADD OBJECT ComboNombre AS ComboFiltroCerrado WITH ;
    LEFT = 10, TOP = 10, NAME = "ComboNombre", ;
    MAXLENGTH = 30, WIDTH = 340
  ADD OBJECT ComboNombre2 AS ComboFiltroAbierto WITH ;
    LEFT = 10, TOP = 50, NAME = "ComboNombre2", ;
    MAXLENGTH = 30, WIDTH = 340
 
  PROCEDURE ComboNombre.INIT
    DODEFAULT()
    THIS.SetAliasControl('Customer')
    THIS.SetCampoFiltro('Customer.Contact_Name')
  ENDPROC
 
  PROCEDURE INIT
    DODEFAULT()
    IF NOT USED ('Customer')
      USE (HOME(2) + "Tastrade\Data\Customer.dbf") IN 0 SHARED
    ENDIF
    THIS.ComboNombre.ROWSOURCE = 'Customer.Contact_Name'
    THIS.ComboNombre2.ROWSOURCE = 'Customer.Contact_Name'
  ENDPROC
ENDDEFINE
 
DEFINE CLASS ComboFiltroCerrado AS COMBOBOX
  INCREMENTALSEARCH = .F.
  ROWSOURCETYPE = 2
  SELECTEDITEMFORECOLOR = RGB(255,255,255)
  SELECTEDITEMBACKCOLOR = RGB(200,200,180)
  SELECTEDFORECOLOR = RGB(240,0,0)&&RGB(50,030,240)
  SELECTEDBACKCOLOR = RGB(200,200,180)
  STYLE = 0
  SORTED = .T.
 
  PROTECTED cadenaIntroducida AS STRING
  PROTECTED inicioSeleccion AS INTEGER
  PROTECTED finalSeleccion AS INTEGER
 
  PROTECTED aliasControl AS STRING
  PROTECTED campoFiltro AS STRING
  PROTECTED conFiltro AS Boolean
 
  PROCEDURE INIT
    DODEFAULT()
    THIS.cadenaIntroducida = ''
    THIS.aliasControl = ''
    THIS.campoFiltro = ''
    THIS.conFiltro = .F.
  ENDPROC
 
  PROCEDURE INTERACTIVECHANGE
    LOCAL codigoCaracter AS INTEGER
    LOCAL tamañoCadena AS INTEGER
 
    codigoCaracter = LASTKEY()
    IF codigoCaracter = 127
      tamañoCadena = LEN(THIS.cadenaIntroducida)
      IF tamañoCadena > 1
        THIS.cadenaIntroducida = LEFT(THIS.cadenaIntroducida, ;
          LEN(THIS.cadenaIntroducida)-1)
        THIS.BuscaRegistros(codigoCaracter)
      ELSE
        THIS.cadenaIntroducida = ''
        THIS.VALUE = ''
        THIS.SELSTART = 0
        THIS.SELLENGTH = 0
        THIS.QuitaFiltroRegistros()
      ENDIF
    ELSE
      IF BETWEEN(codigoCaracter,32,255)
        THIS.cadenaIntroducida = THIS.cadenaIntroducida + CHR(codigoCaracter)
        THIS.BuscaRegistros(codigoCaracter)
      ENDIF
    ENDIF
  ENDPROC
 
  PROCEDURE BuscaRegistros(_CodigoCaracter AS INTEGER)
    THIS.QuitaFiltroRegistros()
    FOR i = 1 TO THIS.LISTCOUNT
      IF UPPER(LEFT(THIS.LIST[i],LEN(THIS.cadenaIntroducida))) == ;
          ALLTRIM(UPPER(THIS.cadenaIntroducida))
        THIS.DISPLAYVALUE = THIS.LIST(i)
        THIS.SELSTART = ATC(UPPER(THIS.cadenaIntroducida), ;
          UPPER(THIS.LIST[i]), 1)-1
        THIS.SELLENGTH = LEN(THIS.cadenaIntroducida)
        THIS.FiltraRegistros()
        RETURN
      ENDIF
    ENDFOR
    FOR i = 1 TO THIS.LISTCOUNT
      IF UPPER(THIS.cadenaIntroducida) $ UPPER(THIS.LIST(i))
        THIS.DISPLAYVALUE = THIS.LIST(i)
        THIS.SELSTART = ATC(UPPER(THIS.cadenaIntroducida), ;
          UPPER(THIS.LIST[i]), 1)-1
        THIS.SELLENGTH = LEN(THIS.cadenaIntroducida)
        THIS.FiltraRegistros()
        RETURN
      ENDIF
    ENDFOR
    THIS.cadenaIntroducida= CHR(_CodigoCaracter)
    THIS.VALUE = CHR(_CodigoCaracter)
    THIS.DISPLAYVALUE = THIS.VALUE
    THIS.SELSTART = 0
    THIS.SELLENGTH = 1
  ENDPROC
 
  PROCEDURE QuitaFiltroRegistros()
    LOCAL aliasTabla
    IF THIS.conFiltro
      aliasTabla =THIS.aliasControl
      SET FILTER TO IN &aliasTabla
      THIS.REQUERY
    ENDIF
  ENDPROC
 
  HIDDEN PROCEDURE FiltraRegistros()
    LOCAL campo
    LOCAL aliasTabla
    PUBLIC textoSeleccionadoFiltro AS STRING
    IF THIS.conFiltro
      campo = THIS.campoFiltro
      aliasTabla = THIS.aliasControl
      textoSeleccionadoFiltro = THIS.SELTEXT
      SET FILTER TO (textoSeleccionadoFiltro $ &campo) IN &aliasTabla
      THIS.REQUERY
    ENDIF
  ENDPROC
 
  PROCEDURE SetAliasControl(_Alias AS STRING)
    THIS.aliasControl = _Alias
  ENDPROC
 
  PROCEDURE SetCampoFiltro(_Campo AS STRING)
    THIS.conFiltro = .T.
    THIS.campoFiltro = _Campo
  ENDPROC
ENDDEFINE
 
DEFINE CLASS ComboFiltroAbierto AS COMBOBOX
  INCREMENTALSEARCH = .F.
  ROWSOURCETYPE = 2
  SELECTEDITEMFORECOLOR = RGB(255,255,255)
  SELECTEDITEMBACKCOLOR = RGB(200,200,180)
  SELECTEDFORECOLOR = RGB(50,030,240)
  SELECTEDBACKCOLOR = RGB(200,200,180)
  STYLE = 0
  SORTED = .T.
 
  PROCEDURE INTERACTIVECHANGE
    LOCAL codigoCaracter AS INTEGER
    LOCAL valorDisplay AS STRING
    LOCAL valorNuevoDisplay AS STRING
    LOCAL lnUltimaSeleccion AS INTEGER
    LOCAL lnSeleccionados AS INTEGER
    codigoCaracter = LASTKEY()
    valorNuevoDisplay = ""
    lnUltimaSeleccion = 0
    lnSeleccionados = 0
    IF (codigoCaracter >= 32 AND codigoCaracter <= 126)
      valorDisplay = SUBSTR(THIS.DISPLAYVALUE,1,THIS.SELSTART-1)+(CHR(codigoCaracter))
      valorNuevoDisplay = THIS.DISPLAYVALUE
      FOR i = 1 TO THIS.LISTCOUNT
        IF UPPER(valorDisplay) $ UPPER(SUBSTR(THIS.LIST(i),1,LEN(valorDisplay)))
          THIS.DISPLAYVALUE = THIS.LIST(i)
          THIS.SELSTART = LEN(valorDisplay)
          IF LEN(ALLT(THIS.DISPLAYVALUE)) > LEN(valorDisplay)
            THIS.SELLENGTH = LEN(ALLT(THIS.DISPLAYVALUE))-LEN(valorDisplay)
          ELSE
            THIS.SELLENGTH = 0
          ENDIF
          valorNuevoDisplay = THIS.DISPLAYVALUE
          lnUltimaSeleccion = THIS.SELSTART
          lnSeleccionados = THIS.SELLENGTH
          RETURN
        ENDIF
      ENDFOR
      THIS.DISPLAYVALUE = valorNuevoDisplay
      THIS.SELSTART = IIF(lnUltimaSeleccion > 0, lnUltimaSeleccion, LEN(valorDisplay))
      THIS.SELLENGTH = lnSeleccionados
    ENDIF
  ENDPROC
ENDDEFINE

código que no se como volcarlo a un combobox, cree los procedimientos, puse nombre a mis tablas etc. pero no hay forma que entienda la totalidad del código. Nunca programe de otra forma que no sea visual!!!
Desde ya muchas Gracias.

Pablo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 29
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Consulta sobre Código de conola

Publicado por richard (197 intervenciones) el 17/09/2015 21:30:48
hola pablo

yo tengo un código de búsqueda incremental pero en un textbox que a medida que vas digitando la palabra el te va mostrando las coincidencias en el grid.

envíame tu correo y te paso el ejemplo.


Atte.


RICHARD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Consulta sobre Código de conola

Publicado por Pablo (3 intervenciones) el 18/09/2015 03:20:52
Richard y Mauricio,

Desde ya muchas gracias por sus aportes, he logrado hacerlo funcionar y lo he convertido en una clase visual!!!
Desde ayer que no pare de dar vueltas y vueltas investigando!!
Aprendí varias cosas entre ayer y hoy... así que mas que conforme con el logro y el código!!
Mauricio, ahora descargo el .rar y mañana lo pruebo, por hoy esta mas que bien el día dedicado!!

Saludos cordiales Pablo.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta sobre Código de conola

Publicado por Pablo (3 intervenciones) el 18/09/2015 03:27:14
Mauricio,

Un groso, tal cual eso era lo que quería!! Mas que nada para saber y poder entender como se podía leer y convertir el código a una programación de código en forma visual, no se si se entiende...
Desde ya muchas gracias.-
Hace tiempo que no estaba en la comunidad, se agradece por lo rápido que contestan y por la ayuda prestada.-
Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar