Página 1 de 1

Browse ... TBrwColumn:OnDrawCell

Publicado: Vie Ene 13, 2006 8:59 pm
por Xevi
Esto, hasta la PR6a me funcionaba correctamente...
METHOD Browse2ColumnsDrawCell( oSender, cText, nClrText, nClrPane,
lHighLite ) CLASS TFrmORAlbarans
If ::oBrowse2:nArrayAt > 0 .and. ::oBrowse2:nArrayAt <= Len(
::oBrowse2:aArrayData )
If !Empty( ::oBrowse2:aArrayData[::oBrowse2:nArrayAt,1] ) .and.;
Empty( ::oBrowse2:aArrayData[::oBrowse2:nArrayAt,2] ) .and.;
Empty( ::oBrowse2:aArrayData[::oBrowse2:nArrayAt,3] )
oSender:oFont := TFont():Create( "MS Sans Serif", 8, 0, 700 )
If( !lHighLite, nClrPane := clRed /*clInfoBk*/, )
Else
oSender:oFont := TFont():Create( "MS Sans Serif", 8, 0, 400 )
If( !lHighLite, nClrPane := clWindow, )
EndIf
EndIf
RETURN Nil
Ahora, con la PR6b...
El cambio de color "nClrPane" lo hace correctamente y varía el color de
fondo del registro actual...
PERO,... la fuente no la "pilla" bien...
lo que hace es tomar el valor de la fuente, pero no en el registro actual
del Browse, sinó para el siguiente!!!
He leído que habeis cambiado el Evento... por lo visto ... Incorrecta
declaración... jejeje... pero se me ha fastidiado lo mío, jejeje
¿Cómo lo hago para que el cambio de fuente lo haga sobre el registro
actual???
Gracias.
Un Saludo,
Xevi.

Browse ... TBrwColumn:OnDrawCell

Publicado: Vie Ene 13, 2006 9:11 pm
por jfgimenez
Xevi,
> He leído que habeis cambiado el Evento... por lo visto ... Incorrecta
> declaración... jejeje... pero se me ha fastidiado lo mío, jejeje
> ¿Cómo lo hago para que el cambio de fuente lo haga sobre el registro
> actual???
Sí, es cierto. Había 2 parámetros más que se estaban pasando pero no
figuraban en la declaración del método: hDC y aRect.
Para cambiar la fuente, lo más sencillo es seleccionarla directamente en el
hdc:
SelectObject( hDC, oMiFont:Handle )
de esta forma no hay que estar creando y destruyendo fuentes, ni
asignandolas continuamente al browse.
--
Un saludo,
José F. Giménez

Browse ... TBrwColumn:OnDrawCell

Publicado: Vie Ene 13, 2006 9:37 pm
por Xevi
Jose,
Perdona por mi ignorancia... pero no entiendo como debo utilizarlo...
Comprendo que es una mejora para no andar creando/destruyendo Fonts...
Pero ¿Como lo aplico???
¿Creo dos tipos de Datas Fonts en la Clase Formulario????
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=43c80985@ozsrvnegro.ozlan.local...]43c80985@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> He leído que habeis cambiado el Evento... por lo visto ... Incorrecta
>> declaración... jejeje... pero se me ha fastidiado lo mío, jejeje
>> ¿Cómo lo hago para que el cambio de fuente lo haga sobre el registro
>> actual???
>
> Sí, es cierto. Había 2 parámetros más que se estaban pasando pero no
> figuraban en la declaración del método: hDC y aRect.
>
> Para cambiar la fuente, lo más sencillo es seleccionarla directamente en
> el hdc:
>
> SelectObject( hDC, oMiFont:Handle )
>
> de esta forma no hay que estar creando y destruyendo fuentes, ni
> asignandolas continuamente al browse.
>
> --
> Un saludo,
>
> José F. Giménez
>
>

Browse ... TBrwColumn:OnDrawCell

Publicado: Vie Ene 13, 2006 9:43 pm
por Xevi
Perdón...
Ya lo he logrado...
Como me pensaba... creando el tipo de font en uan variable... la cargo como
me has escrito... y YATA !!!
Gracias.
Un saludo,
Xevi.
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:[email=43c80f6d@ozsrvnegro.ozlan.local...]43c80f6d@ozsrvnegro.ozlan.local...[/email]
>
>
> Jose,
>
> Perdona por mi ignorancia... pero no entiendo como debo utilizarlo...
> Comprendo que es una mejora para no andar creando/destruyendo Fonts...
> Pero ¿Como lo aplico???
>
> ¿Creo dos tipos de Datas Fonts en la Clase Formulario????
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
> news:[email=43c80985@ozsrvnegro.ozlan.local...]43c80985@ozsrvnegro.ozlan.local...[/email]
>>
>> Xevi,
>>
>>> He leído que habeis cambiado el Evento... por lo visto ... Incorrecta
>>> declaración... jejeje... pero se me ha fastidiado lo mío, jejeje
>>> ¿Cómo lo hago para que el cambio de fuente lo haga sobre el registro
>>> actual???
>>
>> Sí, es cierto. Había 2 parámetros más que se estaban pasando pero no
>> figuraban en la declaración del método: hDC y aRect.
>>
>> Para cambiar la fuente, lo más sencillo es seleccionarla directamente en
>> el hdc:
>>
>> SelectObject( hDC, oMiFont:Handle )
>>
>> de esta forma no hay que estar creando y destruyendo fuentes, ni
>> asignandolas continuamente al browse.
>>
>> --
>> Un saludo,
>>
>> José F. Giménez
>>
>>
>
>
>
>

Browse ... TBrwColumn:OnDrawCell

Publicado: Vie Ene 13, 2006 9:50 pm
por jfgimenez
Xevi,
> Ya lo he logrado...
> Como me pensaba... creando el tipo de font en uan variable... la cargo
> como me has escrito... y YATA !!!
Exactamente. Pero no te olvides de destruirla cuando ya no la necesites. Un
buen sitio es en el método Free() del formulario. Ponlo así:
METHOD Free() INLINE ::oMiFont:Destroy(), Super:Free()
y no tendrás que preocuparte de nada más.
--
Un saludo,
José F. Giménez

Browse ... TBrwColumn:OnDrawCell

Publicado: Lun Ene 16, 2006 8:52 am
por Xevi
Jose,
Data oFontNormal INIT TFont():Create( "MS Sans Serif", 8, 0, 400 )
Data oFontNegreta INIT TFont():Create( "MS Sans Serif", 8, 0, 700 )
Method Free() INLINE ::oFontNormal:Destroy(), ::oFontNegreta:Destroy(),
Super:Free()
Bien, esto funciona PERO solo una vez por formulario CHILD...
Me explico...
Tal como está, la primera vez que accedo al Form SI funciona el cambio de
fuentes,
PERO cierro el CHILD y lo vuelvo a abrir y ya NO funciona el cambio de
fuentes, por mas que cierre/abra el mismo formulario.
He probado de destruir las fuentes en el método OnDestroy pero lo mismo.
Si no destruyo las fuentes funciona SIEMPRE que accedo al formulario.
Y digo, pienso, me pregunto...
¿A que puede ser debido???
¿es obligatorio que destruya esas Datas???
¿No se destruyen solas al finalizar el Formulario???
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=43c812a2@ozsrvnegro.ozlan.local...]43c812a2@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> Ya lo he logrado...
>> Como me pensaba... creando el tipo de font en uan variable... la cargo
>> como me has escrito... y YATA !!!
>
> Exactamente. Pero no te olvides de destruirla cuando ya no la necesites.
> Un buen sitio es en el método Free() del formulario. Ponlo así:
>
> METHOD Free() INLINE ::oMiFont:Destroy(), Super:Free()
>
> y no tendrás que preocuparte de nada más.
>
> --
> Un saludo,
>
> José F. Giménez
>
>

Browse ... TBrwColumn:OnDrawCell

Publicado: Lun Ene 16, 2006 9:27 am
por ignacio
Xevi,
Realmente extraño. Intenta mandarnos un pequeño ejemplo.
Gracias,
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:43cb509b$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Jose,
>
>
> Data oFontNormal INIT TFont():Create( "MS Sans Serif", 8, 0, 400 )
> Data oFontNegreta INIT TFont():Create( "MS Sans Serif", 8, 0, 700 )
> Method Free() INLINE ::oFontNormal:Destroy(), ::oFontNegreta:Destroy(),
> Super:Free()
>
> Bien, esto funciona PERO solo una vez por formulario CHILD...
> Me explico...
> Tal como está, la primera vez que accedo al Form SI funciona el cambio de
> fuentes,
> PERO cierro el CHILD y lo vuelvo a abrir y ya NO funciona el cambio de
> fuentes, por mas que cierre/abra el mismo formulario.
> He probado de destruir las fuentes en el método OnDestroy pero lo mismo.
>
> Si no destruyo las fuentes funciona SIEMPRE que accedo al formulario.
>
> Y digo, pienso, me pregunto...
> ¿A que puede ser debido???
> ¿es obligatorio que destruya esas Datas???
> ¿No se destruyen solas al finalizar el Formulario???
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
> news:[email=43c812a2@ozsrvnegro.ozlan.local...]43c812a2@ozsrvnegro.ozlan.local...[/email]
>>
>> Xevi,
>>
>>> Ya lo he logrado...
>>> Como me pensaba... creando el tipo de font en uan variable... la cargo
>>> como me has escrito... y YATA !!!
>>
>> Exactamente. Pero no te olvides de destruirla cuando ya no la necesites.
>> Un buen sitio es en el método Free() del formulario. Ponlo así:
>>
>> METHOD Free() INLINE ::oMiFont:Destroy(), Super:Free()
>>
>> y no tendrás que preocuparte de nada más.
>>
>> --
>> Un saludo,
>>
>> José F. Giménez
>>
>>
>
>
>

Browse ... TBrwColumn:OnDrawCell

Publicado: Lun Ene 16, 2006 10:39 am
por Xevi
Ignacio,
Adjunto lo tienes.
Me he limitado a incluir un Browse en el Test MDI de Xailer.
Verás que al abrirlo la primera vez, funciona correctamente, el segundo
registro está en negrita, pero si cierras la ventana y la vuelves a abrirla,
ya NO se pinta la fuente del registro segundo en negrita.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:43cb58ea$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> Realmente extraño. Intenta mandarnos un pequeño ejemplo.
>
> Gracias,
>
> "Xevi" <xevicomas@terra.es> escribió en el mensaje
> news:43cb509b$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>
>> Jose,
>>
>>
>> Data oFontNormal INIT TFont():Create( "MS Sans Serif", 8, 0, 400 )
>> Data oFontNegreta INIT TFont():Create( "MS Sans Serif", 8, 0, 700 )
>> Method Free() INLINE ::oFontNormal:Destroy(), ::oFontNegreta:Destroy(),
>> Super:Free()
>>
>> Bien, esto funciona PERO solo una vez por formulario CHILD...
>> Me explico...
>> Tal como está, la primera vez que accedo al Form SI funciona el cambio de
>> fuentes,
>> PERO cierro el CHILD y lo vuelvo a abrir y ya NO funciona el cambio de
>> fuentes, por mas que cierre/abra el mismo formulario.
>> He probado de destruir las fuentes en el método OnDestroy pero lo mismo.
>>
>> Si no destruyo las fuentes funciona SIEMPRE que accedo al formulario.
>>
>> Y digo, pienso, me pregunto...
>> ¿A que puede ser debido???
>> ¿es obligatorio que destruya esas Datas???
>> ¿No se destruyen solas al finalizar el Formulario???
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>> mensaje
>> news:[email=43c812a2@ozsrvnegro.ozlan.local...]43c812a2@ozsrvnegro.ozlan.local...[/email]
>>>
>>> Xevi,
>>>
>>>> Ya lo he logrado...
>>>> Como me pensaba... creando el tipo de font en uan variable... la cargo
>>>> como me has escrito... y YATA !!!
>>>
>>> Exactamente. Pero no te olvides de destruirla cuando ya no la necesites.
>>> Un buen sitio es en el método Free() del formulario. Ponlo así:
>>>
>>> METHOD Free() INLINE ::oMiFont:Destroy(), Super:Free()
>>>
>>> y no tendrás que preocuparte de nada más.
>>>
>>> --
>>> Un saludo,
>>>
>>> José F. Giménez
>>>
>>>
>>
>>
>>
>
>
>


Attached files MDISample1.zip (3.3 KB)Â

Browse ... TBrwColumn:OnDrawCell

Publicado: Lun Ene 16, 2006 1:00 pm
por ignacio
Xevi,
El problema se produce porque has creado los fonts en la cláusula INIT, y
después de la optimización de Walter, dicho código sólo se evalua una vez,
la primera vez que se instancia un objeto de la clase. Segundas
instanciaciones sólo recogen el valor que tiene la DATA, pero no se ejecuta
de nuevo el código INIT.
Por lo tanto, tan sólo tienes que crear los fonts en otro sitio y te
funcionará correctamente. Te recomiendo que utilices unicamente constantes
en la inicialización de DATAs de clases.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:43cb697f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Ignacio,
>
> Adjunto lo tienes.
> Me he limitado a incluir un Browse en el Test MDI de Xailer.
> Verás que al abrirlo la primera vez, funciona correctamente, el segundo
> registro está en negrita, pero si cierras la ventana y la vuelves a
> abrirla, ya NO se pinta la fuente del registro segundo en negrita.
>
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:43cb58ea$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>
>> Xevi,
>>
>> Realmente extraño. Intenta mandarnos un pequeño ejemplo.
>>
>> Gracias,
>>
>> "Xevi" <xevicomas@terra.es> escribió en el mensaje
>> news:43cb509b$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>>
>>> Jose,
>>>
>>>
>>> Data oFontNormal INIT TFont():Create( "MS Sans Serif", 8, 0, 400 )
>>> Data oFontNegreta INIT TFont():Create( "MS Sans Serif", 8, 0, 700 )
>>> Method Free() INLINE ::oFontNormal:Destroy(),
>>> ::oFontNegreta:Destroy(),
>>> Super:Free()
>>>
>>> Bien, esto funciona PERO solo una vez por formulario CHILD...
>>> Me explico...
>>> Tal como está, la primera vez que accedo al Form SI funciona el cambio
>>> de
>>> fuentes,
>>> PERO cierro el CHILD y lo vuelvo a abrir y ya NO funciona el cambio de
>>> fuentes, por mas que cierre/abra el mismo formulario.
>>> He probado de destruir las fuentes en el método OnDestroy pero lo mismo.
>>>
>>> Si no destruyo las fuentes funciona SIEMPRE que accedo al formulario.
>>>
>>> Y digo, pienso, me pregunto...
>>> ¿A que puede ser debido???
>>> ¿es obligatorio que destruya esas Datas???
>>> ¿No se destruyen solas al finalizar el Formulario???
>>>
>>> Gracias.
>>>
>>> Un Saludo,
>>> Xevi.
>>>
>>>
>>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>>> mensaje
>>> news:[email=43c812a2@ozsrvnegro.ozlan.local...]43c812a2@ozsrvnegro.ozlan.local...[/email]
>>>>
>>>> Xevi,
>>>>
>>>>> Ya lo he logrado...
>>>>> Como me pensaba... creando el tipo de font en uan variable... la cargo
>>>>> como me has escrito... y YATA !!!
>>>>
>>>> Exactamente. Pero no te olvides de destruirla cuando ya no la
>>>> necesites.
>>>> Un buen sitio es en el método Free() del formulario. Ponlo así:
>>>>
>>>> METHOD Free() INLINE ::oMiFont:Destroy(), Super:Free()
>>>>
>>>> y no tendrás que preocuparte de nada más.
>>>>
>>>> --
>>>> Un saludo,
>>>>
>>>> José F. Giménez
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
>
>

Browse ... TBrwColumn:OnDrawCell

Publicado: Lun Ene 16, 2006 1:06 pm
por ignacio
Xevi,
Por cierto, creo que se puede simplificar bastante tu código de pintado:
METHOD ArrayBrowse1Column1DrawCell( oSender, cText, nClrText, nClrPane,
lHighLite, hDC, aRect ) CLASS TForm1
if cText = "10002"
SelectObject( hDC, ::oFontNegreta:Handle )
Else
SelectObject( hDC, ::oFontNormal:Handle )
EndIf
Un saludo
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:43cb8acc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Xevi,
>
> El problema se produce porque has creado los fonts en la cláusula INIT, y
> después de la optimización de Walter, dicho código sólo se evalua una vez,
> la primera vez que se instancia un objeto de la clase. Segundas
> instanciaciones sólo recogen el valor que tiene la DATA, pero no se
> ejecuta de nuevo el código INIT.
>
> Por lo tanto, tan sólo tienes que crear los fonts en otro sitio y te
> funcionará correctamente. Te recomiendo que utilices unicamente constantes
> en la inicialización de DATAs de clases.
>
> Un saludo,
>
> "Xevi" <xevicomas@terra.es> escribió en el mensaje
> news:43cb697f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>
>> Ignacio,
>>
>> Adjunto lo tienes.
>> Me he limitado a incluir un Browse en el Test MDI de Xailer.
>> Verás que al abrirlo la primera vez, funciona correctamente, el segundo
>> registro está en negrita, pero si cierras la ventana y la vuelves a
>> abrirla, ya NO se pinta la fuente del registro segundo en negrita.
>>
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
>> news:43cb58ea$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>>
>>> Xevi,
>>>
>>> Realmente extraño. Intenta mandarnos un pequeño ejemplo.
>>>
>>> Gracias,
>>>
>>> "Xevi" <xevicomas@terra.es> escribió en el mensaje
>>> news:43cb509b$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>>>
>>>> Jose,
>>>>
>>>>
>>>> Data oFontNormal INIT TFont():Create( "MS Sans Serif", 8, 0, 400 )
>>>> Data oFontNegreta INIT TFont():Create( "MS Sans Serif", 8, 0, 700 )
>>>> Method Free() INLINE ::oFontNormal:Destroy(),
>>>> ::oFontNegreta:Destroy(),
>>>> Super:Free()
>>>>
>>>> Bien, esto funciona PERO solo una vez por formulario CHILD...
>>>> Me explico...
>>>> Tal como está, la primera vez que accedo al Form SI funciona el cambio
>>>> de
>>>> fuentes,
>>>> PERO cierro el CHILD y lo vuelvo a abrir y ya NO funciona el cambio de
>>>> fuentes, por mas que cierre/abra el mismo formulario.
>>>> He probado de destruir las fuentes en el método OnDestroy pero lo
>>>> mismo.
>>>>
>>>> Si no destruyo las fuentes funciona SIEMPRE que accedo al formulario.
>>>>
>>>> Y digo, pienso, me pregunto...
>>>> ¿A que puede ser debido???
>>>> ¿es obligatorio que destruya esas Datas???
>>>> ¿No se destruyen solas al finalizar el Formulario???
>>>>
>>>> Gracias.
>>>>
>>>> Un Saludo,
>>>> Xevi.
>>>>
>>>>
>>>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>>>> mensaje
>>>> news:[email=43c812a2@ozsrvnegro.ozlan.local...]43c812a2@ozsrvnegro.ozlan.local...[/email]
>>>>>
>>>>> Xevi,
>>>>>
>>>>>> Ya lo he logrado...
>>>>>> Como me pensaba... creando el tipo de font en uan variable... la
>>>>>> cargo
>>>>>> como me has escrito... y YATA !!!
>>>>>
>>>>> Exactamente. Pero no te olvides de destruirla cuando ya no la
>>>>> necesites.
>>>>> Un buen sitio es en el método Free() del formulario. Ponlo así:
>>>>>
>>>>> METHOD Free() INLINE ::oMiFont:Destroy(), Super:Free()
>>>>>
>>>>> y no tendrás que preocuparte de nada más.
>>>>>
>>>>> --
>>>>> Un saludo,
>>>>>
>>>>> José F. Giménez
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
>

Browse ... TBrwColumn:OnDrawCell

Publicado: Lun Ene 16, 2006 1:57 pm
por Xevi
Ignacio,
Efectivamente, se puede simplificar ese ejemplo como bien dices, ahora bien,
como lo que he hecho es un copy/paste de mi aplicación, me quedé con algo
del condicionante If/endif creado originalmente, jejeje... falta de
depuración de mi ejemplo.
Un saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
news:43cb8c2e$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> Por cierto, creo que se puede simplificar bastante tu código de pintado:
>
> METHOD ArrayBrowse1Column1DrawCell( oSender, cText, nClrText, nClrPane,
> lHighLite, hDC, aRect ) CLASS TForm1
>
> if cText = "10002"
> SelectObject( hDC, ::oFontNegreta:Handle )
> Else
> SelectObject( hDC, ::oFontNormal:Handle )
> EndIf
>
> Un saludo
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:43cb8acc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Xevi,
>>
>> El problema se produce porque has creado los fonts en la cláusula INIT, y
>> después de la optimización de Walter, dicho código sólo se evalua una
>> vez, la primera vez que se instancia un objeto de la clase. Segundas
>> instanciaciones sólo recogen el valor que tiene la DATA, pero no se
>> ejecuta de nuevo el código INIT.
>>
>> Por lo tanto, tan sólo tienes que crear los fonts en otro sitio y te
>> funcionará correctamente. Te recomiendo que utilices unicamente
>> constantes en la inicialización de DATAs de clases.
>>
>> Un saludo,
>>
>> "Xevi" <xevicomas@terra.es> escribió en el mensaje
>> news:43cb697f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>>
>>> Ignacio,
>>>
>>> Adjunto lo tienes.
>>> Me he limitado a incluir un Browse en el Test MDI de Xailer.
>>> Verás que al abrirlo la primera vez, funciona correctamente, el segundo
>>> registro está en negrita, pero si cierras la ventana y la vuelves a
>>> abrirla, ya NO se pinta la fuente del registro segundo en negrita.
>>>
>>>
>>> Un Saludo,
>>> Xevi.
>>>
>>>
>>> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
>>> mensaje news:43cb58ea$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>>>
>>>> Xevi,
>>>>
>>>> Realmente extraño. Intenta mandarnos un pequeño ejemplo.
>>>>
>>>> Gracias,
>>>>
>>>> "Xevi" <xevicomas@terra.es> escribió en el mensaje
>>>> news:43cb509b$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>>>>
>>>>> Jose,
>>>>>
>>>>>
>>>>> Data oFontNormal INIT TFont():Create( "MS Sans Serif", 8, 0, 400 )
>>>>> Data oFontNegreta INIT TFont():Create( "MS Sans Serif", 8, 0, 700 )
>>>>> Method Free() INLINE ::oFontNormal:Destroy(),
>>>>> ::oFontNegreta:Destroy(),
>>>>> Super:Free()
>>>>>
>>>>> Bien, esto funciona PERO solo una vez por formulario CHILD...
>>>>> Me explico...
>>>>> Tal como está, la primera vez que accedo al Form SI funciona el cambio
>>>>> de
>>>>> fuentes,
>>>>> PERO cierro el CHILD y lo vuelvo a abrir y ya NO funciona el cambio de
>>>>> fuentes, por mas que cierre/abra el mismo formulario.
>>>>> He probado de destruir las fuentes en el método OnDestroy pero lo
>>>>> mismo.
>>>>>
>>>>> Si no destruyo las fuentes funciona SIEMPRE que accedo al formulario.
>>>>>
>>>>> Y digo, pienso, me pregunto...
>>>>> ¿A que puede ser debido???
>>>>> ¿es obligatorio que destruya esas Datas???
>>>>> ¿No se destruyen solas al finalizar el Formulario???
>>>>>
>>>>> Gracias.
>>>>>
>>>>> Un Saludo,
>>>>> Xevi.
>>>>>
>>>>>
>>>>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>>>>> mensaje
>>>>> news:[email=43c812a2@ozsrvnegro.ozlan.local...]43c812a2@ozsrvnegro.ozlan.local...[/email]
>>>>>>
>>>>>> Xevi,
>>>>>>
>>>>>>> Ya lo he logrado...
>>>>>>> Como me pensaba... creando el tipo de font en uan variable... la
>>>>>>> cargo
>>>>>>> como me has escrito... y YATA !!!
>>>>>>
>>>>>> Exactamente. Pero no te olvides de destruirla cuando ya no la
>>>>>> necesites.
>>>>>> Un buen sitio es en el método Free() del formulario. Ponlo así:
>>>>>>
>>>>>> METHOD Free() INLINE ::oMiFont:Destroy(), Super:Free()
>>>>>>
>>>>>> y no tendrás que preocuparte de nada más.
>>>>>>
>>>>>> --
>>>>>> Un saludo,
>>>>>>
>>>>>> José F. Giménez
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
>
>

Browse ... TBrwColumn:OnDrawCell

Publicado: Lun Ene 16, 2006 4:11 pm
por Xevi
Incluso se puede simplificar más!!!
METHOD ArrayBrowse1Column1DrawCell( oSender, cText, nClrText, nClrPane,
lHighLite, hDC, aRect ) CLASS TForm1
SelectObject( hDC, If( cText = "10002", ::oFontNegreta:Handle,
::oFontNormal:Handle ) )
Un Saludo,
Xevi.
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:[email=43cb9844@ozsrvnegro.ozlan.local...]43cb9844@ozsrvnegro.ozlan.local...[/email]
>
>
> Ignacio,
>
> Efectivamente, se puede simplificar ese ejemplo como bien dices, ahora
> bien, como lo que he hecho es un copy/paste de mi aplicación, me quedé con
> algo del condicionante If/endif creado originalmente, jejeje... falta de
> depuración de mi ejemplo.
>
>
> Un saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
> news:43cb8c2e$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>
>> Xevi,
>>
>> Por cierto, creo que se puede simplificar bastante tu código de pintado:
>>
>> METHOD ArrayBrowse1Column1DrawCell( oSender, cText, nClrText, nClrPane,
>> lHighLite, hDC, aRect ) CLASS TForm1
>>
>> if cText = "10002"
>> SelectObject( hDC, ::oFontNegreta:Handle )
>> Else
>> SelectObject( hDC, ::oFontNormal:Handle )
>> EndIf
>>
>> Un saludo
>>
>> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el mensaje
>> news:43cb8acc$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>> Xevi,
>>>
>>> El problema se produce porque has creado los fonts en la cláusula INIT,
>>> y después de la optimización de Walter, dicho código sólo se evalua una
>>> vez, la primera vez que se instancia un objeto de la clase. Segundas
>>> instanciaciones sólo recogen el valor que tiene la DATA, pero no se
>>> ejecuta de nuevo el código INIT.
>>>
>>> Por lo tanto, tan sólo tienes que crear los fonts en otro sitio y te
>>> funcionará correctamente. Te recomiendo que utilices unicamente
>>> constantes en la inicialización de DATAs de clases.
>>>
>>> Un saludo,
>>>
>>> "Xevi" <xevicomas@terra.es> escribió en el mensaje
>>> news:43cb697f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>>>
>>>> Ignacio,
>>>>
>>>> Adjunto lo tienes.
>>>> Me he limitado a incluir un Browse en el Test MDI de Xailer.
>>>> Verás que al abrirlo la primera vez, funciona correctamente, el segundo
>>>> registro está en negrita, pero si cierras la ventana y la vuelves a
>>>> abrirla, ya NO se pinta la fuente del registro segundo en negrita.
>>>>
>>>>
>>>> Un Saludo,
>>>> Xevi.
>>>>
>>>>
>>>> "Ignacio Ortiz de Zúñiga" <InvalidAccount@ozs.com> escribió en el
>>>> mensaje news:43cb58ea$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>>>>
>>>>> Xevi,
>>>>>
>>>>> Realmente extraño. Intenta mandarnos un pequeño ejemplo.
>>>>>
>>>>> Gracias,
>>>>>
>>>>> "Xevi" <xevicomas@terra.es> escribió en el mensaje
>>>>> news:43cb509b$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>>>>>>
>>>>>> Jose,
>>>>>>
>>>>>>
>>>>>> Data oFontNormal INIT TFont():Create( "MS Sans Serif", 8, 0, 400 )
>>>>>> Data oFontNegreta INIT TFont():Create( "MS Sans Serif", 8, 0, 700 )
>>>>>> Method Free() INLINE ::oFontNormal:Destroy(),
>>>>>> ::oFontNegreta:Destroy(),
>>>>>> Super:Free()
>>>>>>
>>>>>> Bien, esto funciona PERO solo una vez por formulario CHILD...
>>>>>> Me explico...
>>>>>> Tal como está, la primera vez que accedo al Form SI funciona el
>>>>>> cambio de
>>>>>> fuentes,
>>>>>> PERO cierro el CHILD y lo vuelvo a abrir y ya NO funciona el cambio
>>>>>> de
>>>>>> fuentes, por mas que cierre/abra el mismo formulario.
>>>>>> He probado de destruir las fuentes en el método OnDestroy pero lo
>>>>>> mismo.
>>>>>>
>>>>>> Si no destruyo las fuentes funciona SIEMPRE que accedo al formulario.
>>>>>>
>>>>>> Y digo, pienso, me pregunto...
>>>>>> ¿A que puede ser debido???
>>>>>> ¿es obligatorio que destruya esas Datas???
>>>>>> ¿No se destruyen solas al finalizar el Formulario???
>>>>>>
>>>>>> Gracias.
>>>>>>
>>>>>> Un Saludo,
>>>>>> Xevi.
>>>>>>
>>>>>>
>>>>>> "Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el
>>>>>> mensaje
>>>>>> news:[email=43c812a2@ozsrvnegro.ozlan.local...]43c812a2@ozsrvnegro.ozlan.local...[/email]
>>>>>>>
>>>>>>> Xevi,
>>>>>>>
>>>>>>>> Ya lo he logrado...
>>>>>>>> Como me pensaba... creando el tipo de font en uan variable... la
>>>>>>>> cargo
>>>>>>>> como me has escrito... y YATA !!!
>>>>>>>
>>>>>>> Exactamente. Pero no te olvides de destruirla cuando ya no la
>>>>>>> necesites.
>>>>>>> Un buen sitio es en el método Free() del formulario. Ponlo así:
>>>>>>>
>>>>>>> METHOD Free() INLINE ::oMiFont:Destroy(), Super:Free()
>>>>>>>
>>>>>>> y no tendrás que preocuparte de nada más.
>>>>>>>
>>>>>>> --
>>>>>>> Un saludo,
>>>>>>>
>>>>>>> José F. Giménez
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>
>
>
>