In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Enviar delante Forms MDIChilds
Enviar delante Forms MDIChilds
Hola,
En una aplicación MDI, si en el Frame tengo puesta una imágen como fondo de
la aplicación,... cuando abro alguna ventana Child, éstas quedan por
"debajo" de la imagen ¿?
¿Cómo se pueden enviar los objetos del Frame detras de las Childs, o las
Childs delante de los objetos del Form Frame???
Un Saludo,
Xevi.
En una aplicación MDI, si en el Frame tengo puesta una imágen como fondo de
la aplicación,... cuando abro alguna ventana Child, éstas quedan por
"debajo" de la imagen ¿?
¿Cómo se pueden enviar los objetos del Frame detras de las Childs, o las
Childs delante de los objetos del Form Frame???
Un Saludo,
Xevi.
Enviar delante Forms MDIChilds
Alguna solución ¿?
Gracias.
Un Saludo,
Xevi.
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:[email=42d7abc9@ozsrvnegro.ozlan.local...]42d7abc9@ozsrvnegro.ozlan.local...[/email]
> Hola,
>
> En una aplicación MDI, si en el Frame tengo puesta una imágen como fondo
> de la aplicación,... cuando abro alguna ventana Child, éstas quedan por
> "debajo" de la imagen ¿?
> ¿Cómo se pueden enviar los objetos del Frame detras de las Childs, o las
> Childs delante de los objetos del Form Frame???
>
> Un Saludo,
> Xevi.
>
>
>
Gracias.
Un Saludo,
Xevi.
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:[email=42d7abc9@ozsrvnegro.ozlan.local...]42d7abc9@ozsrvnegro.ozlan.local...[/email]
> Hola,
>
> En una aplicación MDI, si en el Frame tengo puesta una imágen como fondo
> de la aplicación,... cuando abro alguna ventana Child, éstas quedan por
> "debajo" de la imagen ¿?
> ¿Cómo se pueden enviar los objetos del Frame detras de las Childs, o las
> Childs delante de los objetos del Form Frame???
>
> Un Saludo,
> Xevi.
>
>
>
- ignacio
- Site Admin
- Mensajes: 9447
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Enviar delante Forms MDIChilds
Xevi,
Podrías mandar un pequeño ejemplo de lo que estás haciendo. Gracias.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:430ef56f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Alguna solución ¿?
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Xevi" <xevicomas@terra.es> escribió en el mensaje
> news:[email=42d7abc9@ozsrvnegro.ozlan.local...]42d7abc9@ozsrvnegro.ozlan.local...[/email]
>> Hola,
>>
>> En una aplicación MDI, si en el Frame tengo puesta una imágen como fondo
>> de la aplicación,... cuando abro alguna ventana Child, éstas quedan por
>> "debajo" de la imagen ¿?
>> ¿Cómo se pueden enviar los objetos del Frame detras de las Childs, o las
>> Childs delante de los objetos del Form Frame???
>>
>> Un Saludo,
>> Xevi.
>>
>>
>>
>
>
>
Podrías mandar un pequeño ejemplo de lo que estás haciendo. Gracias.
Un saludo,
"Xevi" <xevicomas@terra.es> escribió en el mensaje
news:430ef56f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
> Alguna solución ¿?
>
> Gracias.
>
> Un Saludo,
> Xevi.
>
>
> "Xevi" <xevicomas@terra.es> escribió en el mensaje
> news:[email=42d7abc9@ozsrvnegro.ozlan.local...]42d7abc9@ozsrvnegro.ozlan.local...[/email]
>> Hola,
>>
>> En una aplicación MDI, si en el Frame tengo puesta una imágen como fondo
>> de la aplicación,... cuando abro alguna ventana Child, éstas quedan por
>> "debajo" de la imagen ¿?
>> ¿Cómo se pueden enviar los objetos del Frame detras de las Childs, o las
>> Childs delante de los objetos del Form Frame???
>>
>> Un Saludo,
>> Xevi.
>>
>>
>>
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Enviar delante Forms MDIChilds
Ignacio,
He cojido el Sample de Xailer... MDI... le he puesto una imagen en el fondo,
y cuando creas cualquier ventana CHILD... se sobrepone la imagen a la
ventana child, si mueves la ventana veràs que ésta està por debajo de la
imagen del Form FRAME.
De todas formas adjunto el proyecto MDI...
Un Saludo,
Xevi.
"Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje
news:[email=430f3f90@ozsrvnegro.ozlan.local...]430f3f90@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> Podrías mandar un pequeño ejemplo de lo que estás haciendo. Gracias.
>
> Un saludo,
>
> "Xevi" <xevicomas@terra.es> escribió en el mensaje
> news:430ef56f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Alguna solución ¿?
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Xevi" <xevicomas@terra.es> escribió en el mensaje
>> news:[email=42d7abc9@ozsrvnegro.ozlan.local...]42d7abc9@ozsrvnegro.ozlan.local...[/email]
>>> Hola,
>>>
>>> En una aplicación MDI, si en el Frame tengo puesta una imágen como fondo
>>> de la aplicación,... cuando abro alguna ventana Child, éstas quedan por
>>> "debajo" de la imagen ¿?
>>> ¿Cómo se pueden enviar los objetos del Frame detras de las Childs, o las
>>> Childs delante de los objetos del Form Frame???
>>>
>>> Un Saludo,
>>> Xevi.
>>>
>>>
>>>
>>
>>
>>
>
>
>
Attached files MDISample1.zip (2.4 KB)Â
He cojido el Sample de Xailer... MDI... le he puesto una imagen en el fondo,
y cuando creas cualquier ventana CHILD... se sobrepone la imagen a la
ventana child, si mueves la ventana veràs que ésta està por debajo de la
imagen del Form FRAME.
De todas formas adjunto el proyecto MDI...
Un Saludo,
Xevi.
"Ignacio Ortiz" <NoNameToAvoidSpam@ozs.com> escribió en el mensaje
news:[email=430f3f90@ozsrvnegro.ozlan.local...]430f3f90@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> Podrías mandar un pequeño ejemplo de lo que estás haciendo. Gracias.
>
> Un saludo,
>
> "Xevi" <xevicomas@terra.es> escribió en el mensaje
> news:430ef56f$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>> Alguna solución ¿?
>>
>> Gracias.
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Xevi" <xevicomas@terra.es> escribió en el mensaje
>> news:[email=42d7abc9@ozsrvnegro.ozlan.local...]42d7abc9@ozsrvnegro.ozlan.local...[/email]
>>> Hola,
>>>
>>> En una aplicación MDI, si en el Frame tengo puesta una imágen como fondo
>>> de la aplicación,... cuando abro alguna ventana Child, éstas quedan por
>>> "debajo" de la imagen ¿?
>>> ¿Cómo se pueden enviar los objetos del Frame detras de las Childs, o las
>>> Childs delante de los objetos del Form Frame???
>>>
>>> Un Saludo,
>>> Xevi.
>>>
>>>
>>>
>>
>>
>>
>
>
>
Attached files MDISample1.zip (2.4 KB)Â
Enviar delante Forms MDIChilds
Jose,
Es precisamente el "efecto" deseado que buscaba.
Esto me va a servir para "refrescar" los objetos que tengo en la ventana
FRAME cuando se sobreponga una CHILD.
Ahora tengo que leer y entender el porque de este efecto, espero aprender de
este Sample.
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=4315e878@ozsrvnegro.ozlan.local...]4315e878@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> me temo que no es tan sencillo
>
> Verás, las ventanas MdiChild son ventanas hijas de un control MdiClient;
> esto es así por imposición del API. Y ese control MdiClient, o está encima
> o debajo de otros controles que ocupen su mismo espacio. Si está debajo
> (como ahora), los otros controles tapan a las ventanas MdiChild. Y si está
> encima, los demás controles nunca se ven.
>
> Otra cosa es que haya controles en la ventana principal que estén
> alineados; p.ej. puedes poner una rebar alineada a top, una statusbar
> alineada a bottom y una explorerbar alineada a left. En ese caso, el
> control MdiClient ocupará el espacio que quede libre después de colocar
> esos controles. Pero en el ejemplo que envias, el control imagen no tiene
> alineación de ningún tipo, y por eso "tapa" al MdiClient.
>
> He estado haciendo algunas pruebas, y me temo que he encontrado ninguna
> forma de hacerlo como quieres. Sólo hay dos soluciones:
>
> 1) pon una imagen de fondo en la ventana principal (es lo mismo que hago
> yo en mis programas). Puedes usar los distintos valores de nBkgndMode
> (blCOPY, blCENTER, blTILED y blSTRETCH ).
>
> 2) si quieres poner varias imágenes o en posiciones no estándar, utiliza
> el evento OnPainted de oMdiClient. Te adjunto el proyecto modificado
> usando esta técnica. Te he incluido algunos comentarios sencillos de
> aclaración en MdiFrame.prg
>
> Por cierto, en la versión que estás utilizando, la imagen de fondo
> parpadea al redimensionar la ventana principal. Para evitar ese parpadeo
> incluye el firchero form.obj que te adjunto dentro del proyecto.
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Es precisamente el "efecto" deseado que buscaba.
Esto me va a servir para "refrescar" los objetos que tengo en la ventana
FRAME cuando se sobreponga una CHILD.
Ahora tengo que leer y entender el porque de este efecto, espero aprender de
este Sample.
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=4315e878@ozsrvnegro.ozlan.local...]4315e878@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> me temo que no es tan sencillo

>
> Verás, las ventanas MdiChild son ventanas hijas de un control MdiClient;
> esto es así por imposición del API. Y ese control MdiClient, o está encima
> o debajo de otros controles que ocupen su mismo espacio. Si está debajo
> (como ahora), los otros controles tapan a las ventanas MdiChild. Y si está
> encima, los demás controles nunca se ven.
>
> Otra cosa es que haya controles en la ventana principal que estén
> alineados; p.ej. puedes poner una rebar alineada a top, una statusbar
> alineada a bottom y una explorerbar alineada a left. En ese caso, el
> control MdiClient ocupará el espacio que quede libre después de colocar
> esos controles. Pero en el ejemplo que envias, el control imagen no tiene
> alineación de ningún tipo, y por eso "tapa" al MdiClient.
>
> He estado haciendo algunas pruebas, y me temo que he encontrado ninguna
> forma de hacerlo como quieres. Sólo hay dos soluciones:
>
> 1) pon una imagen de fondo en la ventana principal (es lo mismo que hago
> yo en mis programas). Puedes usar los distintos valores de nBkgndMode
> (blCOPY, blCENTER, blTILED y blSTRETCH ).
>
> 2) si quieres poner varias imágenes o en posiciones no estándar, utiliza
> el evento OnPainted de oMdiClient. Te adjunto el proyecto modificado
> usando esta técnica. Te he incluido algunos comentarios sencillos de
> aclaración en MdiFrame.prg
>
> Por cierto, en la versión que estás utilizando, la imagen de fondo
> parpadea al redimensionar la ventana principal. Para evitar ese parpadeo
> incluye el firchero form.obj que te adjunto dentro del proyecto.
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Enviar delante Forms MDIChilds
Xevi,
> Esto me va a servir para "refrescar" los objetos que tengo en la ventana
> FRAME cuando se sobreponga una CHILD.
ten en cuenta que las ventanas MdiChild siempre están sobre una MdiClient,
que a su vez está situada en la ventana MdiFrame con alineación alCLIENT.
Vamos, que si tienes controles en la ventana MdiFrame que no les hayas
puesto ninguna alineación, siempre estarán "tapados" por la MdiClient o al
revés.
Si quieres comprobar lo que realmente ocurre, haz lo siguiente:
1) crea una ventana principal exactamente igual que la que tengas
actualmente, pero deja la propiedad nFormType con ftNORMAL
2) pon los controles que vayas a necesitar, con o sin alineación
3) al final, pon un TPanel en algún hueco, y pon nAlign = alCLIENT
Pues eso es lo que pasa; lo que ocupa el panel es lo mismo que ocupa el
MdiClient en el ejemplo. En este caso, lo único que hemos hecho ha sido
sustituir el MdiClient por el panel, pero todo lo demás sigue igual,
incluido el área que ocupa cada control.
--
Un saludo,
José F. Giménez
> Esto me va a servir para "refrescar" los objetos que tengo en la ventana
> FRAME cuando se sobreponga una CHILD.
ten en cuenta que las ventanas MdiChild siempre están sobre una MdiClient,
que a su vez está situada en la ventana MdiFrame con alineación alCLIENT.
Vamos, que si tienes controles en la ventana MdiFrame que no les hayas
puesto ninguna alineación, siempre estarán "tapados" por la MdiClient o al
revés.
Si quieres comprobar lo que realmente ocurre, haz lo siguiente:
1) crea una ventana principal exactamente igual que la que tengas
actualmente, pero deja la propiedad nFormType con ftNORMAL
2) pon los controles que vayas a necesitar, con o sin alineación
3) al final, pon un TPanel en algún hueco, y pon nAlign = alCLIENT
Pues eso es lo que pasa; lo que ocupa el panel es lo mismo que ocupa el
MdiClient en el ejemplo. En este caso, lo único que hemos hecho ha sido
sustituir el MdiClient por el panel, pero todo lo demás sigue igual,
incluido el área que ocupa cada control.
--
Un saludo,
José F. Giménez
Enviar delante Forms MDIChilds
Jose,
En el Sample que me has "montado" haces referencia a una Imagen, y la
"pintas" en el Evento FormPaint, y luego al abrir una CHILD ya queda por
debajo, pues todo lo que haga ya en esa ventana ya no llama al evento
FormPaint del FormFrame.
Bien, si en efecto es lo que realmente pretendo, pero... ¿Cómo "pinto" un
control que no sea una Imagen??? Un Label por ej.
Yo he probado hacer lo mismo del objeto TImage con un TLabel, pero por lo
visto el control TLabel no dispone del evento Paint...
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=4315e878@ozsrvnegro.ozlan.local...]4315e878@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> me temo que no es tan sencillo
>
> Verás, las ventanas MdiChild son ventanas hijas de un control MdiClient;
> esto es así por imposición del API. Y ese control MdiClient, o está encima
> o debajo de otros controles que ocupen su mismo espacio. Si está debajo
> (como ahora), los otros controles tapan a las ventanas MdiChild. Y si está
> encima, los demás controles nunca se ven.
>
> Otra cosa es que haya controles en la ventana principal que estén
> alineados; p.ej. puedes poner una rebar alineada a top, una statusbar
> alineada a bottom y una explorerbar alineada a left. En ese caso, el
> control MdiClient ocupará el espacio que quede libre después de colocar
> esos controles. Pero en el ejemplo que envias, el control imagen no tiene
> alineación de ningún tipo, y por eso "tapa" al MdiClient.
>
> He estado haciendo algunas pruebas, y me temo que he encontrado ninguna
> forma de hacerlo como quieres. Sólo hay dos soluciones:
>
> 1) pon una imagen de fondo en la ventana principal (es lo mismo que hago
> yo en mis programas). Puedes usar los distintos valores de nBkgndMode
> (blCOPY, blCENTER, blTILED y blSTRETCH ).
>
> 2) si quieres poner varias imágenes o en posiciones no estándar, utiliza
> el evento OnPainted de oMdiClient. Te adjunto el proyecto modificado
> usando esta técnica. Te he incluido algunos comentarios sencillos de
> aclaración en MdiFrame.prg
>
> Por cierto, en la versión que estás utilizando, la imagen de fondo
> parpadea al redimensionar la ventana principal. Para evitar ese parpadeo
> incluye el firchero form.obj que te adjunto dentro del proyecto.
>
> --
> Un saludo,
>
> José F. Giménez
>
>
En el Sample que me has "montado" haces referencia a una Imagen, y la
"pintas" en el Evento FormPaint, y luego al abrir una CHILD ya queda por
debajo, pues todo lo que haga ya en esa ventana ya no llama al evento
FormPaint del FormFrame.
Bien, si en efecto es lo que realmente pretendo, pero... ¿Cómo "pinto" un
control que no sea una Imagen??? Un Label por ej.
Yo he probado hacer lo mismo del objeto TImage con un TLabel, pero por lo
visto el control TLabel no dispone del evento Paint...
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=4315e878@ozsrvnegro.ozlan.local...]4315e878@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
> me temo que no es tan sencillo

>
> Verás, las ventanas MdiChild son ventanas hijas de un control MdiClient;
> esto es así por imposición del API. Y ese control MdiClient, o está encima
> o debajo de otros controles que ocupen su mismo espacio. Si está debajo
> (como ahora), los otros controles tapan a las ventanas MdiChild. Y si está
> encima, los demás controles nunca se ven.
>
> Otra cosa es que haya controles en la ventana principal que estén
> alineados; p.ej. puedes poner una rebar alineada a top, una statusbar
> alineada a bottom y una explorerbar alineada a left. En ese caso, el
> control MdiClient ocupará el espacio que quede libre después de colocar
> esos controles. Pero en el ejemplo que envias, el control imagen no tiene
> alineación de ningún tipo, y por eso "tapa" al MdiClient.
>
> He estado haciendo algunas pruebas, y me temo que he encontrado ninguna
> forma de hacerlo como quieres. Sólo hay dos soluciones:
>
> 1) pon una imagen de fondo en la ventana principal (es lo mismo que hago
> yo en mis programas). Puedes usar los distintos valores de nBkgndMode
> (blCOPY, blCENTER, blTILED y blSTRETCH ).
>
> 2) si quieres poner varias imágenes o en posiciones no estándar, utiliza
> el evento OnPainted de oMdiClient. Te adjunto el proyecto modificado
> usando esta técnica. Te he incluido algunos comentarios sencillos de
> aclaración en MdiFrame.prg
>
> Por cierto, en la versión que estás utilizando, la imagen de fondo
> parpadea al redimensionar la ventana principal. Para evitar ese parpadeo
> incluye el firchero form.obj que te adjunto dentro del proyecto.
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Enviar delante Forms MDIChilds
Xevi,
> En el Sample que me has "montado" haces referencia a una Imagen, y la
> "pintas" en el Evento FormPaint, y luego al abrir una CHILD ya queda por
> debajo, pues todo lo que haga ya en esa ventana ya no llama al evento
> FormPaint del FormFrame.
> Bien, si en efecto es lo que realmente pretendo, pero... ¿Cómo "pinto" un
> control que no sea una Imagen??? Un Label por ej.
>
> Yo he probado hacer lo mismo del objeto TImage con un TLabel, pero por lo
> visto el control TLabel no dispone del evento Paint...
Es que realmente no he usado un control TImage, sino un objeto TPicture. En
cualquier caso, fíjate que recibes como parámetro un hDC. Ese hDC lo puedes
usar con cualquier función GDI para dibujar lo que necesites (texto, lineas,
puntos, rectángulos, etc.). Mi consejo además, es que si vas a pintar varias
cosas lo hagas en C directamente. Irá mucho más rápido además de evitarte
alguna molestia si no están todas las funciones "wrapeadas". En este caso
sería algo así:
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
XA_FUNC_STATIC( TFORM1_FORMPAINT )
{
HDC hdc = (HDC) hb_parnl( 2 );
TextOut( hdc, 150, 90, "Hola, ¿que tal?", 15 );
MoveToEx( hdc, 80, 80, NULL );
LineTo( hdc, 200, 50 );
LineTo( hdc, 320, 80 );
LineTo( hdc, 320, 120 );
LineTo( hdc, 200, 150 );
LineTo( hdc, 80, 120 );
LineTo( hdc, 80, 80 );
}
#pragma ENDDUMP
Fíjate que el nombre de la función (lo que está entre paréntesis detrás de
XA_FUNC_STATIC) tiene que ir siempre en mayúsculas, y tiene que ser siempre
el nombre de la clase, en este caso el formulario, seguido de un guión de
subrayado y el nombre del método.
--
Un saludo,
José F. Giménez
> En el Sample que me has "montado" haces referencia a una Imagen, y la
> "pintas" en el Evento FormPaint, y luego al abrir una CHILD ya queda por
> debajo, pues todo lo que haga ya en esa ventana ya no llama al evento
> FormPaint del FormFrame.
> Bien, si en efecto es lo que realmente pretendo, pero... ¿Cómo "pinto" un
> control que no sea una Imagen??? Un Label por ej.
>
> Yo he probado hacer lo mismo del objeto TImage con un TLabel, pero por lo
> visto el control TLabel no dispone del evento Paint...
Es que realmente no he usado un control TImage, sino un objeto TPicture. En
cualquier caso, fíjate que recibes como parámetro un hDC. Ese hDC lo puedes
usar con cualquier función GDI para dibujar lo que necesites (texto, lineas,
puntos, rectángulos, etc.). Mi consejo además, es que si vas a pintar varias
cosas lo hagas en C directamente. Irá mucho más rápido además de evitarte
alguna molestia si no están todas las funciones "wrapeadas". En este caso
sería algo así:
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
XA_FUNC_STATIC( TFORM1_FORMPAINT )
{
HDC hdc = (HDC) hb_parnl( 2 );
TextOut( hdc, 150, 90, "Hola, ¿que tal?", 15 );
MoveToEx( hdc, 80, 80, NULL );
LineTo( hdc, 200, 50 );
LineTo( hdc, 320, 80 );
LineTo( hdc, 320, 120 );
LineTo( hdc, 200, 150 );
LineTo( hdc, 80, 120 );
LineTo( hdc, 80, 80 );
}
#pragma ENDDUMP
Fíjate que el nombre de la función (lo que está entre paréntesis detrás de
XA_FUNC_STATIC) tiene que ir siempre en mayúsculas, y tiene que ser siempre
el nombre de la clase, en este caso el formulario, seguido de un guión de
subrayado y el nombre del método.
--
Un saludo,
José F. Giménez
Enviar delante Forms MDIChilds
Xevi,
olvidaba decirte que [x]Harbour tiene la gran facilidad de poder poner ese
trozo de código directamente dentro de un .prg, sin necesidad de crear un
fichero .c aparte. Para eso están las directivas #pragma BEGINDUMP y #pragma
ENDDUMP
--
Un saludo,
José F. Giménez
olvidaba decirte que [x]Harbour tiene la gran facilidad de poder poner ese
trozo de código directamente dentro de un .prg, sin necesidad de crear un
fichero .c aparte. Para eso están las directivas #pragma BEGINDUMP y #pragma
ENDDUMP
--
Un saludo,
José F. Giménez
Enviar delante Forms MDIChilds
Jose,
Puedo ver la poténcia de xHarbour al poder utilizar directamente funciones
en C.
Ahora bien,... NPI de C. Buaaaaaa!!!
Menudo dilema tengo ahora, pues... con el primer Sample, veo la imagen
PERFECTAMENTE, pero no soy capaz de visualizar texto...
Y con este Sample de C veo perfectamente el texto, pero no se como
visualizar la imágen...
Venga... un empujoncito mas... a ver si puede ser posible visualizar la
imagen y el texto a la vez...
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:43160aca$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> En el Sample que me has "montado" haces referencia a una Imagen, y la
>> "pintas" en el Evento FormPaint, y luego al abrir una CHILD ya queda por
>> debajo, pues todo lo que haga ya en esa ventana ya no llama al evento
>> FormPaint del FormFrame.
>> Bien, si en efecto es lo que realmente pretendo, pero... ¿Cómo "pinto" un
>> control que no sea una Imagen??? Un Label por ej.
>>
>> Yo he probado hacer lo mismo del objeto TImage con un TLabel, pero por lo
>> visto el control TLabel no dispone del evento Paint...
>
> Es que realmente no he usado un control TImage, sino un objeto TPicture.
> En cualquier caso, fíjate que recibes como parámetro un hDC. Ese hDC lo
> puedes usar con cualquier función GDI para dibujar lo que necesites
> (texto, lineas, puntos, rectángulos, etc.). Mi consejo además, es que si
> vas a pintar varias cosas lo hagas en C directamente. Irá mucho más rápido
> además de evitarte alguna molestia si no están todas las funciones
> "wrapeadas". En este caso sería algo así:
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
>
> XA_FUNC_STATIC( TFORM1_FORMPAINT )
> {
> HDC hdc = (HDC) hb_parnl( 2 );
>
> TextOut( hdc, 150, 90, "Hola, ¿que tal?", 15 );
> MoveToEx( hdc, 80, 80, NULL );
> LineTo( hdc, 200, 50 );
> LineTo( hdc, 320, 80 );
> LineTo( hdc, 320, 120 );
> LineTo( hdc, 200, 150 );
> LineTo( hdc, 80, 120 );
> LineTo( hdc, 80, 80 );
> }
>
> #pragma ENDDUMP
>
> Fíjate que el nombre de la función (lo que está entre paréntesis detrás de
> XA_FUNC_STATIC) tiene que ir siempre en mayúsculas, y tiene que ser
> siempre el nombre de la clase, en este caso el formulario, seguido de un
> guión de subrayado y el nombre del método.
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Puedo ver la poténcia de xHarbour al poder utilizar directamente funciones
en C.
Ahora bien,... NPI de C. Buaaaaaa!!!
Menudo dilema tengo ahora, pues... con el primer Sample, veo la imagen
PERFECTAMENTE, pero no soy capaz de visualizar texto...
Y con este Sample de C veo perfectamente el texto, pero no se como
visualizar la imágen...
Venga... un empujoncito mas... a ver si puede ser posible visualizar la
imagen y el texto a la vez...
Gracias.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:43160aca$[email=1@ozsrvnegro.ozlan.local...]1@ozsrvnegro.ozlan.local...[/email]
>
> Xevi,
>
>> En el Sample que me has "montado" haces referencia a una Imagen, y la
>> "pintas" en el Evento FormPaint, y luego al abrir una CHILD ya queda por
>> debajo, pues todo lo que haga ya en esa ventana ya no llama al evento
>> FormPaint del FormFrame.
>> Bien, si en efecto es lo que realmente pretendo, pero... ¿Cómo "pinto" un
>> control que no sea una Imagen??? Un Label por ej.
>>
>> Yo he probado hacer lo mismo del objeto TImage con un TLabel, pero por lo
>> visto el control TLabel no dispone del evento Paint...
>
> Es que realmente no he usado un control TImage, sino un objeto TPicture.
> En cualquier caso, fíjate que recibes como parámetro un hDC. Ese hDC lo
> puedes usar con cualquier función GDI para dibujar lo que necesites
> (texto, lineas, puntos, rectángulos, etc.). Mi consejo además, es que si
> vas a pintar varias cosas lo hagas en C directamente. Irá mucho más rápido
> además de evitarte alguna molestia si no están todas las funciones
> "wrapeadas". En este caso sería algo así:
>
> #pragma BEGINDUMP
>
> #include "windows.h"
> #include "xailer.h"
>
> XA_FUNC_STATIC( TFORM1_FORMPAINT )
> {
> HDC hdc = (HDC) hb_parnl( 2 );
>
> TextOut( hdc, 150, 90, "Hola, ¿que tal?", 15 );
> MoveToEx( hdc, 80, 80, NULL );
> LineTo( hdc, 200, 50 );
> LineTo( hdc, 320, 80 );
> LineTo( hdc, 320, 120 );
> LineTo( hdc, 200, 150 );
> LineTo( hdc, 80, 120 );
> LineTo( hdc, 80, 80 );
> }
>
> #pragma ENDDUMP
>
> Fíjate que el nombre de la función (lo que está entre paréntesis detrás de
> XA_FUNC_STATIC) tiene que ir siempre en mayúsculas, y tiene que ser
> siempre el nombre de la clase, en este caso el formulario, seguido de un
> guión de subrayado y el nombre del método.
>
> --
> Un saludo,
>
> José F. Giménez
>
>
Enviar delante Forms MDIChilds
Xevi,
> Venga... un empujoncito mas... a ver si puede ser posible visualizar la
> imagen y el texto a la vez...
Aquí lo tienes
Te he marcado en rojo lo nuevo:
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
#include "colors.ch"
XA_FUNC_STATIC( TMDIFRAME_FORMPAINT )
{
PHB_ITEM Self = hb_stackSelfItem();
HDC hdc = (HDC) hb_parnl( 2 );
XA_ObjSendNL5( XA_ObjGetItem( Self, "oImage1" ), "Paint", (long) hdc, 50, 50, 400, 294 );
SetBkMode( hdc, TRANSPARENT );
SetTextColor( hdc, clWhite );
TextOut( hdc, 151, 91, "Hola, ¿que tal?", 15 );
SetTextColor( hdc, clBlack );
TextOut( hdc, 150, 90, "Hola, ¿que tal?", 15 );
MoveToEx( hdc, 80, 80, NULL );
LineTo( hdc, 200, 50 );
LineTo( hdc, 320, 80 );
LineTo( hdc, 320, 120 );
LineTo( hdc, 200, 150 );
LineTo( hdc, 80, 120 );
LineTo( hdc, 80, 80 );
}
#pragma ENDDUMP
--
Un saludo,
José F. Giménez
--
> Venga... un empujoncito mas... a ver si puede ser posible visualizar la
> imagen y el texto a la vez...
Aquí lo tienes

Te he marcado en rojo lo nuevo:
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
#include "colors.ch"
XA_FUNC_STATIC( TMDIFRAME_FORMPAINT )
{
PHB_ITEM Self = hb_stackSelfItem();
HDC hdc = (HDC) hb_parnl( 2 );
XA_ObjSendNL5( XA_ObjGetItem( Self, "oImage1" ), "Paint", (long) hdc, 50, 50, 400, 294 );
SetBkMode( hdc, TRANSPARENT );
SetTextColor( hdc, clWhite );
TextOut( hdc, 151, 91, "Hola, ¿que tal?", 15 );
SetTextColor( hdc, clBlack );
TextOut( hdc, 150, 90, "Hola, ¿que tal?", 15 );
MoveToEx( hdc, 80, 80, NULL );
LineTo( hdc, 200, 50 );
LineTo( hdc, 320, 80 );
LineTo( hdc, 320, 120 );
LineTo( hdc, 200, 150 );
LineTo( hdc, 80, 120 );
LineTo( hdc, 80, 80 );
}
#pragma ENDDUMP
--
Un saludo,
José F. Giménez
--
Enviar delante Forms MDIChilds
Jose,
Gracias.
Perfectamente se puede mezclar una imagen con texto.
Ahora bien, perdona mi ignorancia en C... pero no soy capaz de hacer que me "refresque" una imagen y dos Labels que dispongo en el Form1.
Verás, resulta que lo que "incrusto" en la pantalla del Menu inicial es una imagen del Logo de la empresa personalizado, y dos labels con el detalle y nombre de un registro tambien personalizado.
Bien, pues estos dos labes dependiendo de un valor o el idioma del programa, tienen uno o otro valor, y necesito que se refresquen junto con la Imagen.
Yo por mi parte he probado a tirar "tiros"... y añadir otra funcion mas cambiando el objeto y el evento...
XA_ObjSendNL5( XA_ObjGetItem( Self, "oImage1" ), "Paint", (long) hdc, 50, 50, 400, 294 );
XA_ObjSendNL5( XA_ObjGetItem( Self, "oLabel1" ), "Show", (long) hdc, 50, 50, 400, 294 );
Pero mi ignorancia en C no me deja avanzar, solo obtengo errores...
¿Cómo "lanzo" dos eventos o mas desde esta funcion C???
Gracias
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:[email=4316370b@ozsrvnegro.ozlan.local...]4316370b@ozsrvnegro.ozlan.local...[/email]
Xevi,
> Venga... un empujoncito mas... a ver si puede ser posible visualizar la
> imagen y el texto a la vez...
Aquí lo tienes
Te he marcado en rojo lo nuevo:
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
#include "colors.ch"
XA_FUNC_STATIC( TMDIFRAME_FORMPAINT )
{
PHB_ITEM Self = hb_stackSelfItem();
HDC hdc = (HDC) hb_parnl( 2 );
XA_ObjSendNL5( XA_ObjGetItem( Self, "oImage1" ), "Paint", (long) hdc, 50, 50, 400, 294 );
SetBkMode( hdc, TRANSPARENT );
SetTextColor( hdc, clWhite );
TextOut( hdc, 151, 91, "Hola, ¿que tal?", 15 );
SetTextColor( hdc, clBlack );
TextOut( hdc, 150, 90, "Hola, ¿que tal?", 15 );
MoveToEx( hdc, 80, 80, NULL );
LineTo( hdc, 200, 50 );
LineTo( hdc, 320, 80 );
LineTo( hdc, 320, 120 );
LineTo( hdc, 200, 150 );
LineTo( hdc, 80, 120 );
LineTo( hdc, 80, 80 );
}
#pragma ENDDUMP
--
Un saludo,
José F. Giménez
--
Gracias.
Perfectamente se puede mezclar una imagen con texto.
Ahora bien, perdona mi ignorancia en C... pero no soy capaz de hacer que me "refresque" una imagen y dos Labels que dispongo en el Form1.
Verás, resulta que lo que "incrusto" en la pantalla del Menu inicial es una imagen del Logo de la empresa personalizado, y dos labels con el detalle y nombre de un registro tambien personalizado.
Bien, pues estos dos labes dependiendo de un valor o el idioma del programa, tienen uno o otro valor, y necesito que se refresquen junto con la Imagen.
Yo por mi parte he probado a tirar "tiros"... y añadir otra funcion mas cambiando el objeto y el evento...
XA_ObjSendNL5( XA_ObjGetItem( Self, "oImage1" ), "Paint", (long) hdc, 50, 50, 400, 294 );
XA_ObjSendNL5( XA_ObjGetItem( Self, "oLabel1" ), "Show", (long) hdc, 50, 50, 400, 294 );
Pero mi ignorancia en C no me deja avanzar, solo obtengo errores...
¿Cómo "lanzo" dos eventos o mas desde esta funcion C???
Gracias
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:[email=4316370b@ozsrvnegro.ozlan.local...]4316370b@ozsrvnegro.ozlan.local...[/email]
Xevi,
> Venga... un empujoncito mas... a ver si puede ser posible visualizar la
> imagen y el texto a la vez...
Aquí lo tienes

Te he marcado en rojo lo nuevo:
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
#include "colors.ch"
XA_FUNC_STATIC( TMDIFRAME_FORMPAINT )
{
PHB_ITEM Self = hb_stackSelfItem();
HDC hdc = (HDC) hb_parnl( 2 );
XA_ObjSendNL5( XA_ObjGetItem( Self, "oImage1" ), "Paint", (long) hdc, 50, 50, 400, 294 );
SetBkMode( hdc, TRANSPARENT );
SetTextColor( hdc, clWhite );
TextOut( hdc, 151, 91, "Hola, ¿que tal?", 15 );
SetTextColor( hdc, clBlack );
TextOut( hdc, 150, 90, "Hola, ¿que tal?", 15 );
MoveToEx( hdc, 80, 80, NULL );
LineTo( hdc, 200, 50 );
LineTo( hdc, 320, 80 );
LineTo( hdc, 320, 120 );
LineTo( hdc, 200, 150 );
LineTo( hdc, 80, 120 );
LineTo( hdc, 80, 80 );
}
#pragma ENDDUMP
--
Un saludo,
José F. Giménez
--
Enviar delante Forms MDIChilds
This is a multi-part message in MIME format.
------=_NextPart_000_003B_01C5AEE4.91B6CCE0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_003C_01C5AEE4.91B6CCE0"
------=_NextPart_001_003C_01C5AEE4.91B6CCE0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Xevi,
Ahora bien, perdona mi ignorancia en C... pero no soy capaz de hacer =
que me "refresque" una imagen y dos Labels que dispongo en el Form1.
Ver=E1s, resulta que lo que "incrusto" en la pantalla del Menu inicial =
es una imagen del Logo de la empresa personalizado, y dos labels con el =
detalle y nombre de un registro tambien personalizado.
Bien, pues estos dos labes dependiendo de un valor o el idioma del =
programa, tienen uno o otro valor, y necesito que se refresquen junto =
con la Imagen.
Piensa que en realidad no tienes ning=FAn control TLabel ni TImage, sino =
que est=E1s dibujando "a pelo" sobre la ventana (o mejor dicho, sobre el =
control MdiClient). Habr=E1s visto que el texto estaba puesto =
directamente en la rutina de pintado, sin que hubiera ning=FAn TLabel =
por ah=ED rodando. Y sobre la imagen, la data oImage1 contiene un =
componente TPicture, que no es un control TImage, sino un componente que =
carga y mantiene en memoria la imagen; el pintado de dicha imagen se =
produce cuando se llama a su m=E9todo Paint pas=E1ndole un hDC donde =
tiene que pintarla.
As=ED que, lo m=E1s sencillo es que tengas las DATAs que necesites en la =
clase del formulario con los valores de las cadenas e im=E1genes que =
quieras pintar, y los actualizas cuando lo necesites. Para no =
complicarlo m=E1s, lo m=E1s f=E1cil es que t=FA mismo llames a =
::oMdiClient:Refresh() cuando hayas cambiado cualquiera de esas DATA =
para forzar su repintado.
Te adjunto MdiFrame.prg (y.xfm) para que veas la t=E9cnica. He a=F1adido =
una DATA cTexto, que se actualiza cada vez que creas una nueva ventana =
MdiChild.
--=20
Un saludo,
Jos=E9 F. Gim=E9nez
------=_NextPart_001_003C_01C5AEE4.91B6CCE0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2900.2180" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Xevi,</FONT></DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV><FONT face=3DArial size=3D2>Ahora bien, perdona mi ignorancia en =
C... pero no=20
soy capaz de hacer que me "refresque" una imagen y dos Labels que =
dispongo en=20
el Form1.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Ver=E1s, resulta que lo que =
"incrusto" en la=20
pantalla del Menu inicial es una imagen del Logo de laÂempresa=20
personalizado, y dos labels con el detalle y nombre de un registro =
tambien=20
personalizado.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Bien, pues estos dos labes =
dependiendo de un=20
valor o el idioma del programa, tienen uno o otro valor, y necesito =
que se=20
refresquen junto con la Imagen.</FONT></DIV></BLOCKQUOTE>
<DIV dir=3Dltr><FONT face=3DArial size=3D2><FONT face=3D"Times New =
Roman"=20
size=3D3></FONT></FONT>Â</DIV>
<DIV dir=3Dltr><FONT face=3DArial size=3D2><FONT face=3D"Times New =
Roman" size=3D3>Piensa=20
que en realidad no tienes ning=FAn control TLabel ni TImage, sino que =
est=E1s=20
dibujando "a pelo" sobre la ventana (o mejor dicho, sobre el control =
MdiClient).=20
Habr=E1s visto que el texto estaba puesto directamente en la rutina de =
pintado,=20
sin que hubiera ning=FAn TLabel por ah=ED rodando. Y sobre la imagen, la =
data=20
oImage1 contiene un componente TPicture, que no es un control TImage, =
sino un=20
componente que carga y mantiene en memoria la imagen; el pintado de =
dicha imagen=20
se produce cuando se llama a su m=E9todo Paint pas=E1ndole un hDC donde =
tiene que=20
pintarla.<BR><BR>As=ED que, lo m=E1s sencillo es que tengas las DATAs =
que necesites=20
en la clase del formulario con los valores de las cadenas e im=E1genes =
que quieras=20
pintar, y los actualizas cuando lo necesites. Para no complicarlo m=E1s, =
lo m=E1s=20
f=E1cil es que t=FA mismo llames a ::oMdiClient:Refresh() cuando hayas =
cambiado=20
cualquiera de esas DATA para forzar su repintado.<BR><BR>Te adjunto =
MdiFrame.prg=20
(y.xfm) para que veas la t=E9cnica. He a=F1adido una DATA cTexto, que se =
actualiza=20
cada vez que creas una nueva ventana MdiChild.<BR><BR>-- <BR>Un=20
saludo,<BR><BR>Jos=E9 F. Gim=E9nez</FONT></DIV></FONT></BODY></HTML>
------=_NextPart_001_003C_01C5AEE4.91B6CCE0--
------=_NextPart_000_003B_01C5AEE4.91B6CCE0
Content-Type: application/x-zip-compressed;
name="MDIFrame.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="MDIFrame.zip"
UEsDBBQAAAAIAJNWITOe1tiG2wAAAFIBAAAMAAAATURJRnJhbWUueGZtVZDB a4MwHIXvgv/Dw5NC
Ds5qO4QdOqu0UFswGTvL/LkGbCxpCtv++hrRrbuE8L6Pl0fKXGyPG2SaakNF r89+gGy/5hyibGSh
6zO5jusA4LcL6fRRHOM05WRe+5tqrj6ixYLhKR6OVRIxJMkSs/Uh6MsgfYE3 93oT6YtejUTYix9M
b/iDycFrdQUnLVuP4ZkhZIjD8LdVZZ0kZd5lY062YhXH/8mW5OdpbE+i5Yzs fPF9IRu3ptzsimpd
5hM9qp2SRtad/BkFz9p/0bx6GhnY36ly8VYdhpld6zp3UEsDBBQAAAAIAJNW ITNDQT3tZQQAAIMK
AAAMAAAATURJRnJhbWUucHJntVXbbuM2EH0PkH8YaIFCTtz40qRItMiDIssb AZZsWAqyfQoYirG5
S4sGJW2SXfSr+wMdkrJsd+NtC7Q2bEgzh4ejM8Oj3snxEZzATMlXRivpQTyK UrJaCzYwiTGnS6Zs
fKzIip2t1cJkRqykiq8p/6PwTMCvK6ns5ZjRJfFgcNnrn/eG/f6FjvaOj46P 3vGCijpn4HwkXDB1
RpeOjgcTP00hi3NudoHxfBpDNpZqpbMAMPIzH2S0IgtTWROgGXupJN5BlEQZ OE6DjsPsdjqCQDFS
Mc3idnbjOhIVvOJE8K/MBZmyImcKvgPNCC+qNt+F5SjoAjXRtFI1rfQSs6jX g1DAilUylzBWjLkd
YCUUjLKSKC5hTRQBwR+ZIgqELEExWqsSL+qKYxkkl2XLVIIQZIUhIKjqilSc oipFxWAtFVjpgAjI
WYllcFUyEAS+IIIUZO8hbCUozyRKQvC8RkIvLHK304W0XjPlWZR+kjAZmVbs 96pt/svTykjc6/38
n34059/1Bv4yI43wQlIUQsasqLsIrh/bEUjubNjcNpEoC2NwfkrYM9AlFzk8 8yKXzw74QRZNE3AN
f6BTbsdDmAspE0/Q8dKlfNaKvd/Q/ZOP5zUT6l2Dc0tewYFTmGSKr5C3Ui5M WOHqruhNBcf+eUQL
UOLj6u8pLmi6WsKmMOdfF7FDP2dPipVLnInOd7po9SDwZ0YJ594oUzq7sJ1t d9SMZUk4dWy8EXJv
0wzn1e28vTggJSU5cw4ubgCH1ieoL9w3XTyFzL/RqgWVEqfjX503GfWSPbo0 nPlzP5vO39wiwNPK
wBfibTaTxuyWEQ9RK1Z7be70QpxI05Xrnem0hCal49gHT//Z/MYVAqIW6B11 QYDrQ1zAKyxqonKi
8PDjLf6vlVxzlpN8zyvbY6/ZsxmnVa1QUM/6owtOaS3/7NN64TSDgRv6JV8U uCMTUOkpbrh2Rjos
0ZLQ5urCItCQsISaPRJnWzcO9FfteQQo7ke5LBAmgMqiUlJAq2RDb4tqo+6O w/4GZFsS0wdDwrQw
dszyHSGbzrQpU2vr56a0eZjdzRNIuPi//OzdWpHFisBN+CFKRnfxbN9TrfGU Z/r9t42+2LfifpBK
IVW5eVV+9B/Gd0nwkGZ+FgXasNCd534cPoyn83jmR0mmW/jN6DG7vXkwU2xc 7BqWjw9lRehnfRtV
DN+L1kpuRwEsc4oIFy87GocvrEK4MIQGgq90BSem+QjDKqaPnz6wKrAO2cUy zVw4GzwqDYUOocfh
AnxRCW12lkBjDMryaI9PJhfultYUt2Fuphep8cb2sAuukMWio6vuwkXf/s77 +De8Ot/yp6y6+RxL
9A+LzOZ+kuJpD7VK7zcQXVOgVW5QVNwvOY52g9DpaV01ycHFoAtX+DOP0t0+ 5I/4bgSqfogPi77q
H+SL5ReWyfClgV/27S+5m0w2kAkvENIAhn2jxpu5X4Zm9eHcYNg/TDo4wHr5 g4WX2w1/3z0WaIz2
UPwJUEsBAhYLFAAAAAgAk1YhM57W2IbbAAAAUgEAAAwAAAAAAAAAAQAgAICB AAAAAE1ESUZyYW1l
LnhmbVBLAQIWCxQAAAAIAJNWITNDQT3tZQQAAIMKAAAMAAAAAAAAAAEAIACA gQUBAABNRElGcmFt
ZS5wcmdQSwUGAAAAAAIAAgB0AAAAlAUAAAAA
------=_NextPart_000_003B_01C5AEE4.91B6CCE0--
Attached files MDIFrame.zip (1.5 KB)Â
------=_NextPart_000_003B_01C5AEE4.91B6CCE0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_003C_01C5AEE4.91B6CCE0"
------=_NextPart_001_003C_01C5AEE4.91B6CCE0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Xevi,
Ahora bien, perdona mi ignorancia en C... pero no soy capaz de hacer =
que me "refresque" una imagen y dos Labels que dispongo en el Form1.
Ver=E1s, resulta que lo que "incrusto" en la pantalla del Menu inicial =
es una imagen del Logo de la empresa personalizado, y dos labels con el =
detalle y nombre de un registro tambien personalizado.
Bien, pues estos dos labes dependiendo de un valor o el idioma del =
programa, tienen uno o otro valor, y necesito que se refresquen junto =
con la Imagen.
Piensa que en realidad no tienes ning=FAn control TLabel ni TImage, sino =
que est=E1s dibujando "a pelo" sobre la ventana (o mejor dicho, sobre el =
control MdiClient). Habr=E1s visto que el texto estaba puesto =
directamente en la rutina de pintado, sin que hubiera ning=FAn TLabel =
por ah=ED rodando. Y sobre la imagen, la data oImage1 contiene un =
componente TPicture, que no es un control TImage, sino un componente que =
carga y mantiene en memoria la imagen; el pintado de dicha imagen se =
produce cuando se llama a su m=E9todo Paint pas=E1ndole un hDC donde =
tiene que pintarla.
As=ED que, lo m=E1s sencillo es que tengas las DATAs que necesites en la =
clase del formulario con los valores de las cadenas e im=E1genes que =
quieras pintar, y los actualizas cuando lo necesites. Para no =
complicarlo m=E1s, lo m=E1s f=E1cil es que t=FA mismo llames a =
::oMdiClient:Refresh() cuando hayas cambiado cualquiera de esas DATA =
para forzar su repintado.
Te adjunto MdiFrame.prg (y.xfm) para que veas la t=E9cnica. He a=F1adido =
una DATA cTexto, que se actualiza cada vez que creas una nueva ventana =
MdiChild.
--=20
Un saludo,
Jos=E9 F. Gim=E9nez
------=_NextPart_001_003C_01C5AEE4.91B6CCE0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2900.2180" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Xevi,</FONT></DIV>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; =
BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV><FONT face=3DArial size=3D2>Ahora bien, perdona mi ignorancia en =
C... pero no=20
soy capaz de hacer que me "refresque" una imagen y dos Labels que =
dispongo en=20
el Form1.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Ver=E1s, resulta que lo que =
"incrusto" en la=20
pantalla del Menu inicial es una imagen del Logo de laÂempresa=20
personalizado, y dos labels con el detalle y nombre de un registro =
tambien=20
personalizado.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Bien, pues estos dos labes =
dependiendo de un=20
valor o el idioma del programa, tienen uno o otro valor, y necesito =
que se=20
refresquen junto con la Imagen.</FONT></DIV></BLOCKQUOTE>
<DIV dir=3Dltr><FONT face=3DArial size=3D2><FONT face=3D"Times New =
Roman"=20
size=3D3></FONT></FONT>Â</DIV>
<DIV dir=3Dltr><FONT face=3DArial size=3D2><FONT face=3D"Times New =
Roman" size=3D3>Piensa=20
que en realidad no tienes ning=FAn control TLabel ni TImage, sino que =
est=E1s=20
dibujando "a pelo" sobre la ventana (o mejor dicho, sobre el control =
MdiClient).=20
Habr=E1s visto que el texto estaba puesto directamente en la rutina de =
pintado,=20
sin que hubiera ning=FAn TLabel por ah=ED rodando. Y sobre la imagen, la =
data=20
oImage1 contiene un componente TPicture, que no es un control TImage, =
sino un=20
componente que carga y mantiene en memoria la imagen; el pintado de =
dicha imagen=20
se produce cuando se llama a su m=E9todo Paint pas=E1ndole un hDC donde =
tiene que=20
pintarla.<BR><BR>As=ED que, lo m=E1s sencillo es que tengas las DATAs =
que necesites=20
en la clase del formulario con los valores de las cadenas e im=E1genes =
que quieras=20
pintar, y los actualizas cuando lo necesites. Para no complicarlo m=E1s, =
lo m=E1s=20
f=E1cil es que t=FA mismo llames a ::oMdiClient:Refresh() cuando hayas =
cambiado=20
cualquiera de esas DATA para forzar su repintado.<BR><BR>Te adjunto =
MdiFrame.prg=20
(y.xfm) para que veas la t=E9cnica. He a=F1adido una DATA cTexto, que se =
actualiza=20
cada vez que creas una nueva ventana MdiChild.<BR><BR>-- <BR>Un=20
saludo,<BR><BR>Jos=E9 F. Gim=E9nez</FONT></DIV></FONT></BODY></HTML>
------=_NextPart_001_003C_01C5AEE4.91B6CCE0--
------=_NextPart_000_003B_01C5AEE4.91B6CCE0
Content-Type: application/x-zip-compressed;
name="MDIFrame.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="MDIFrame.zip"
UEsDBBQAAAAIAJNWITOe1tiG2wAAAFIBAAAMAAAATURJRnJhbWUueGZtVZDB a4MwHIXvgv/Dw5NC
Ds5qO4QdOqu0UFswGTvL/LkGbCxpCtv++hrRrbuE8L6Pl0fKXGyPG2SaakNF r89+gGy/5hyibGSh
6zO5jusA4LcL6fRRHOM05WRe+5tqrj6ixYLhKR6OVRIxJMkSs/Uh6MsgfYE3 93oT6YtejUTYix9M
b/iDycFrdQUnLVuP4ZkhZIjD8LdVZZ0kZd5lY062YhXH/8mW5OdpbE+i5Yzs fPF9IRu3ptzsimpd
5hM9qp2SRtad/BkFz9p/0bx6GhnY36ly8VYdhpld6zp3UEsDBBQAAAAIAJNW ITNDQT3tZQQAAIMK
AAAMAAAATURJRnJhbWUucHJntVXbbuM2EH0PkH8YaIFCTtz40qRItMiDIssb AZZsWAqyfQoYirG5
S4sGJW2SXfSr+wMdkrJsd+NtC7Q2bEgzh4ejM8Oj3snxEZzATMlXRivpQTyK UrJaCzYwiTGnS6Zs
fKzIip2t1cJkRqykiq8p/6PwTMCvK6ns5ZjRJfFgcNnrn/eG/f6FjvaOj46P 3vGCijpn4HwkXDB1
RpeOjgcTP00hi3NudoHxfBpDNpZqpbMAMPIzH2S0IgtTWROgGXupJN5BlEQZ OE6DjsPsdjqCQDFS
Mc3idnbjOhIVvOJE8K/MBZmyImcKvgPNCC+qNt+F5SjoAjXRtFI1rfQSs6jX g1DAilUylzBWjLkd
YCUUjLKSKC5hTRQBwR+ZIgqELEExWqsSL+qKYxkkl2XLVIIQZIUhIKjqilSc oipFxWAtFVjpgAjI
WYllcFUyEAS+IIIUZO8hbCUozyRKQvC8RkIvLHK304W0XjPlWZR+kjAZmVbs 96pt/svTykjc6/38
n34059/1Bv4yI43wQlIUQsasqLsIrh/bEUjubNjcNpEoC2NwfkrYM9AlFzk8 8yKXzw74QRZNE3AN
f6BTbsdDmAspE0/Q8dKlfNaKvd/Q/ZOP5zUT6l2Dc0tewYFTmGSKr5C3Ui5M WOHqruhNBcf+eUQL
UOLj6u8pLmi6WsKmMOdfF7FDP2dPipVLnInOd7po9SDwZ0YJ594oUzq7sJ1t d9SMZUk4dWy8EXJv
0wzn1e28vTggJSU5cw4ubgCH1ieoL9w3XTyFzL/RqgWVEqfjX503GfWSPbo0 nPlzP5vO39wiwNPK
wBfibTaTxuyWEQ9RK1Z7be70QpxI05Xrnem0hCal49gHT//Z/MYVAqIW6B11 QYDrQ1zAKyxqonKi
8PDjLf6vlVxzlpN8zyvbY6/ZsxmnVa1QUM/6owtOaS3/7NN64TSDgRv6JV8U uCMTUOkpbrh2Rjos
0ZLQ5urCItCQsISaPRJnWzcO9FfteQQo7ke5LBAmgMqiUlJAq2RDb4tqo+6O w/4GZFsS0wdDwrQw
dszyHSGbzrQpU2vr56a0eZjdzRNIuPi//OzdWpHFisBN+CFKRnfxbN9TrfGU Z/r9t42+2LfifpBK
IVW5eVV+9B/Gd0nwkGZ+FgXasNCd534cPoyn83jmR0mmW/jN6DG7vXkwU2xc 7BqWjw9lRehnfRtV
DN+L1kpuRwEsc4oIFy87GocvrEK4MIQGgq90BSem+QjDKqaPnz6wKrAO2cUy zVw4GzwqDYUOocfh
AnxRCW12lkBjDMryaI9PJhfultYUt2Fuphep8cb2sAuukMWio6vuwkXf/s77 +De8Ot/yp6y6+RxL
9A+LzOZ+kuJpD7VK7zcQXVOgVW5QVNwvOY52g9DpaV01ycHFoAtX+DOP0t0+ 5I/4bgSqfogPi77q
H+SL5ReWyfClgV/27S+5m0w2kAkvENIAhn2jxpu5X4Zm9eHcYNg/TDo4wHr5 g4WX2w1/3z0WaIz2
UPwJUEsBAhYLFAAAAAgAk1YhM57W2IbbAAAAUgEAAAwAAAAAAAAAAQAgAICB AAAAAE1ESUZyYW1l
LnhmbVBLAQIWCxQAAAAIAJNWITNDQT3tZQQAAIMKAAAMAAAAAAAAAAEAIACA gQUBAABNRElGcmFt
ZS5wcmdQSwUGAAAAAAIAAgB0AAAAlAUAAAAA
------=_NextPart_000_003B_01C5AEE4.91B6CCE0--
Attached files MDIFrame.zip (1.5 KB)Â
Enviar delante Forms MDIChilds
Jose,
No se, pero creo que se va a ir complicando el tema... pues si bien parece que sólo se trataba de enviar una imagen debajo de un MDICLIENT, no sólo queda ahí, pues se necesitaría que los controles del MDIFRAME también quedaran por detrás del CHILD.
Mira... una ventana FRAME que contenga una imagen, dos labels, una Toolbal con sus respectivos botones rebars...
¿cómo se comeria esto????
Creo que lo suyo, seria que se pudiera "refrescar", desde la función C del Paint del Frame, los objetos contenidos en el FRAME, sería lo mas facilongo para los que no tenemos un nivel en C.
No se si es posible, pero ahí lo expongo por si crees que sería posible... eso que algunos vemos tan difícil.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:[email=4316c385@ozsrvnegro.ozlan.local...]4316c385@ozsrvnegro.ozlan.local...[/email]
Xevi,
Ahora bien, perdona mi ignorancia en C... pero no soy capaz de hacer que me "refresque" una imagen y dos Labels que dispongo en el Form1.
Verás, resulta que lo que "incrusto" en la pantalla del Menu inicial es una imagen del Logo de la empresa personalizado, y dos labels con el detalle y nombre de un registro tambien personalizado.
Bien, pues estos dos labes dependiendo de un valor o el idioma del programa, tienen uno o otro valor, y necesito que se refresquen junto con la Imagen.
Piensa que en realidad no tienes ningún control TLabel ni TImage, sino que estás dibujando "a pelo" sobre la ventana (o mejor dicho, sobre el control MdiClient). Habrás visto que el texto estaba puesto directamente en la rutina de pintado, sin que hubiera ningún TLabel por ahí rodando. Y sobre la imagen, la data oImage1 contiene un componente TPicture, que no es un control TImage, sino un componente que carga y mantiene en memoria la imagen; el pintado de dicha imagen se produce cuando se llama a su método Paint pasándole un hDC donde tiene que pintarla.
Así que, lo más sencillo es que tengas las DATAs que necesites en la clase del formulario con los valores de las cadenas e imágenes que quieras pintar, y los actualizas cuando lo necesites. Para no complicarlo más, lo más fácil es que tú mismo llames a ::oMdiClient:Refresh() cuando hayas cambiado cualquiera de esas DATA para forzar su repintado.
Te adjunto MdiFrame.prg (y.xfm) para que veas la técnica. He añadido una DATA cTexto, que se actualiza cada vez que creas una nueva ventana MdiChild.
--
Un saludo,
José F. Giménez
--
No se, pero creo que se va a ir complicando el tema... pues si bien parece que sólo se trataba de enviar una imagen debajo de un MDICLIENT, no sólo queda ahí, pues se necesitaría que los controles del MDIFRAME también quedaran por detrás del CHILD.
Mira... una ventana FRAME que contenga una imagen, dos labels, una Toolbal con sus respectivos botones rebars...
¿cómo se comeria esto????
Creo que lo suyo, seria que se pudiera "refrescar", desde la función C del Paint del Frame, los objetos contenidos en el FRAME, sería lo mas facilongo para los que no tenemos un nivel en C.
No se si es posible, pero ahí lo expongo por si crees que sería posible... eso que algunos vemos tan difícil.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje news:[email=4316c385@ozsrvnegro.ozlan.local...]4316c385@ozsrvnegro.ozlan.local...[/email]
Xevi,
Ahora bien, perdona mi ignorancia en C... pero no soy capaz de hacer que me "refresque" una imagen y dos Labels que dispongo en el Form1.
Verás, resulta que lo que "incrusto" en la pantalla del Menu inicial es una imagen del Logo de la empresa personalizado, y dos labels con el detalle y nombre de un registro tambien personalizado.
Bien, pues estos dos labes dependiendo de un valor o el idioma del programa, tienen uno o otro valor, y necesito que se refresquen junto con la Imagen.
Piensa que en realidad no tienes ningún control TLabel ni TImage, sino que estás dibujando "a pelo" sobre la ventana (o mejor dicho, sobre el control MdiClient). Habrás visto que el texto estaba puesto directamente en la rutina de pintado, sin que hubiera ningún TLabel por ahí rodando. Y sobre la imagen, la data oImage1 contiene un componente TPicture, que no es un control TImage, sino un componente que carga y mantiene en memoria la imagen; el pintado de dicha imagen se produce cuando se llama a su método Paint pasándole un hDC donde tiene que pintarla.
Así que, lo más sencillo es que tengas las DATAs que necesites en la clase del formulario con los valores de las cadenas e imágenes que quieras pintar, y los actualizas cuando lo necesites. Para no complicarlo más, lo más fácil es que tú mismo llames a ::oMdiClient:Refresh() cuando hayas cambiado cualquiera de esas DATA para forzar su repintado.
Te adjunto MdiFrame.prg (y.xfm) para que veas la técnica. He añadido una DATA cTexto, que se actualiza cada vez que creas una nueva ventana MdiChild.
--
Un saludo,
José F. Giménez
--
Enviar delante Forms MDIChilds
Xevi,
No se, pero creo que se va a ir complicando el tema... pues si bien parece que sólo se trataba de enviar una imagen debajo de un MDICLIENT, no sólo queda ahí, pues se necesitaría que los controles del MDIFRAME también quedaran por detrás del CHILD.
Mira... una ventana FRAME que contenga una imagen, dos labels, una Toolbal con sus respectivos botones rebars...
¿cómo se comeria esto????
Puedes poner una rebar con toolbars, una statusbar, y hasta una explorerbar a la izquierda; pero todos esos controles están alineados a alTOP, alBOTTOM y alLEFT respectivamente, y el MdiClient ocuparía la parte que queda después de colocar esos controles, por eso no hay ningún problema.
El problema surge cuando quieres poner controles (sin alinear) en mitad del área reservada para las MdiChild, que es precísamente lo que ocupa el MdiClient. En este caso, o bien son esos controles o bien es el MdiClient quién se vé, y los otros quedan tapados.
Por eso, la única solución es pintar lo que necesites en el mismo MdiClient. No creo que una imagen y un par de etiquetas de texto sean complicados, como has podido ver.
Creo que lo suyo, seria que se pudiera "refrescar", desde la función C del Paint del Frame, los objetos contenidos en el FRAME, sería lo mas facilongo para los que no tenemos un nivel en C.
No se si es posible, pero ahí lo expongo por si crees que sería posible... eso que algunos vemos tan difícil.
El tema no es "refrescar", sino pintar lo que necesites desde esa función en C. Es la forma de trabajar de windows, y contra eso no se puede luchar. Simplificándolo un poco, esa forma de trabajar implica que windows envía un mensaje WM_PAINT cuando hace falta pintar una parte de la ventana (normalmente porque se acaba de mostrar o porque acaba de ser "destapada" por otra ventana). En respuesta a ese WM_PAINT es cuando se pinta el contenido, en este caso las etiquetas y la imagen. Ahora bien, cuando tú quieres cambiar el texto o la imagen, hay que forzar que se produzca un nuevo WM_PAINT; eso es lo que hace el método Refresh().
En fin, sé que no es fácil asimilar estos conceptos, pero te aseguro que con el tiempo lo verás muy claro.
--
Un saludo,
José F. Giménez
--
No se, pero creo que se va a ir complicando el tema... pues si bien parece que sólo se trataba de enviar una imagen debajo de un MDICLIENT, no sólo queda ahí, pues se necesitaría que los controles del MDIFRAME también quedaran por detrás del CHILD.
Mira... una ventana FRAME que contenga una imagen, dos labels, una Toolbal con sus respectivos botones rebars...
¿cómo se comeria esto????
Puedes poner una rebar con toolbars, una statusbar, y hasta una explorerbar a la izquierda; pero todos esos controles están alineados a alTOP, alBOTTOM y alLEFT respectivamente, y el MdiClient ocuparía la parte que queda después de colocar esos controles, por eso no hay ningún problema.
El problema surge cuando quieres poner controles (sin alinear) en mitad del área reservada para las MdiChild, que es precísamente lo que ocupa el MdiClient. En este caso, o bien son esos controles o bien es el MdiClient quién se vé, y los otros quedan tapados.
Por eso, la única solución es pintar lo que necesites en el mismo MdiClient. No creo que una imagen y un par de etiquetas de texto sean complicados, como has podido ver.
Creo que lo suyo, seria que se pudiera "refrescar", desde la función C del Paint del Frame, los objetos contenidos en el FRAME, sería lo mas facilongo para los que no tenemos un nivel en C.
No se si es posible, pero ahí lo expongo por si crees que sería posible... eso que algunos vemos tan difícil.
El tema no es "refrescar", sino pintar lo que necesites desde esa función en C. Es la forma de trabajar de windows, y contra eso no se puede luchar. Simplificándolo un poco, esa forma de trabajar implica que windows envía un mensaje WM_PAINT cuando hace falta pintar una parte de la ventana (normalmente porque se acaba de mostrar o porque acaba de ser "destapada" por otra ventana). En respuesta a ese WM_PAINT es cuando se pinta el contenido, en este caso las etiquetas y la imagen. Ahora bien, cuando tú quieres cambiar el texto o la imagen, hay que forzar que se produzca un nuevo WM_PAINT; eso es lo que hace el método Refresh().
En fin, sé que no es fácil asimilar estos conceptos, pero te aseguro que con el tiempo lo verás muy claro.
--
Un saludo,
José F. Giménez
--