FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema con DIALOG TRANSPARENT y SAY
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM

Problema con DIALOG TRANSPARENT y SAY

Posted: Thu Aug 14, 2008 10:53 PM
Hola amigos:

//*******************************
PRG.:

Function Inicio()
LOCAL oDlg, oFont1
DEFINE FONT oFont1 NAME GetSysFont() SIZE 0,-14 BOLD
DEFINE DIALOG oDlg RESOURCE "DIALOG_2" TITLE " Informaci贸n IP" TRANSPARENT
REDEFINE SAY PROMPT "INGRESE IP" ID 101 OF oDlg FONT oFont1
REDEFINE BUTTON PROMPT "&Ok" ID 201 OF oDlg ACTION (oDlg:End())
oDlg:lHelpIcon:=.F.
ACTIVATE DIALOG oDlg CENTERED
Return(NIL)
//*******************************

RC.:
DIALOG_2 DIALOG 11, 21, 391, 119
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "DIALOG_2"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "OK", 201, 12, 96, 50, 14
LTEXT "Al ingresar el Serial de su Producto Usted habilitar谩 su jodita.", 101, 15, 23, 215, 10
}
//*******************************


El c贸digo y RC anteriores, super sencillo, muestra un SAY con el Prompt
"INGRESE IP".

Si a DEFINE DIALOG le adiciono la cl谩usula TRANSPARENT corta el prompt
del say a "INGRESE". Si le quito el TRANSPARENT pinta el prompt completo.

En d贸nde est谩 el bug ?

Sin DIALOG TRASPARENT:



Con DIALOG TRASPARENT:

Saludos,



Carlos Gallego



*** FWH-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Problema con DIALOG TRANSPARENT y SAY

Posted: Fri Aug 15, 2008 12:12 AM
Carlos,

Como soluci贸n temporal puedes hacerlo asi:
#include "FiveWin.ch"

Function Inicio() 
LOCAL oDlg, oFont1, oSay 
DEFINE FONT oFont1 NAME GetSysFont() SIZE 0,-14 BOLD 
DEFINE DIALOG oDlg RESOURCE "DIALOG_2" TITLE " Informaci贸n IP" TRANSPARENT 
REDEFINE SAY oSay PROMPT "INGRESE IP" ID 101 OF oDlg FONT oFont1
REDEFINE BUTTON PROMPT "&Ok" ID 201 OF oDlg ACTION (oDlg:End()) 
oDlg:lHelpIcon:=.F. 
ACTIVATE DIALOG oDlg CENTERED ON INIT oSay:SetSize( 120, 20 )
Return(NIL)

El bug proviene de que internamente estamos usando el estilo DT_WORDBREAK y al no tener espacio suficiente, parte la frase en dos l铆neas
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM

Problema con DIALOG TRANSPARENT y SAY

Posted: Fri Aug 15, 2008 01:45 AM

Antonio gracias por tu respuesta.

Me saltan algunas preguntas:

  1. El estilo DT_WORDBREAK s贸lo se activa cuando se asigna la cl谩usula TRANSPARENT al DIALOG ?

  2. Se puede desactivar ese estilo, y si se puede, d贸nde y c贸mo lo hago ?

Saludos,

Carlos Gallego

Saludos,



Carlos Gallego



*** FWH-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Problema con DIALOG TRANSPARENT y SAY

Posted: Fri Aug 15, 2008 08:16 AM

Carlos,

Anoche era ya tarde y no me di贸 tiempo a hacer m谩s pruebas :-)

Lo primero ser铆a comprobar que estilo realmente tiene el control al ser definido como LTEXT usando GetWindowLong()

Al usar el estilo TRANSPARENT en el di谩logo, desde la funci贸n FixSays() de FWH lo que hacemos es cambiarle el procedimiento de ventana a los SAYs, para que usen uno distinto en donde se dibujan los SAYs de forma transparente.

Hacemos una serie de comprobaciones de estilo y puede ser que con LTEXT algo no se est茅 haciendo bien. FixSays() usa el DT_WORDBREAK

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 514
Joined: Sun Oct 16, 2005 03:32 AM

Problema con DIALOG TRANSPARENT y SAY

Posted: Fri Aug 15, 2008 05:45 PM

Maestro, yo pens茅 que nunca descansabas :wink:

Hice lo siguiente:

ACTIVATE DIALOG oDlg CENTERED ;
ON INIT ( MsgInfo(GetWindowLong(oSay:hWnd,GWL_STYLE)) )

y me devuelve 1342308352. Qu茅 significa ?

Si FixSays() usa DT_WORDBREAK, al reemplazarla por

Function FixSays()
Return nil

no deber铆a reconocer ese estilo. Sin embargo, sigue cortando el prompt.

La neta, no entiendo nada.

Quedo a la espera de tu gu铆a.

Saludos,

Carlos Gallego

Saludos,



Carlos Gallego



*** FWH-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Problema con DIALOG TRANSPARENT y SAY

Posted: Fri Aug 15, 2008 06:18 PM
Carlos,

Este es parte del c贸digo de FixSays() para que veas como usa los estilos:
      if( ( GetWindowLong( hWnd, GWL_STYLE ) & SS_BLACKFRAME ) ==	SS_BLACKFRAME )
      {
         RECT rct;
         
         GetClientRect( hWnd, &rct );		
         WindowBoxBlack( hDC, &rct );
      }         
      
      else if( GetWindowLong( hWnd, GWL_STYLE ) & SS_CENTER	)
         DrawText( hDC, text, lstrlen( text ), &rct, DT_CENTER | DT_WORDBREAK );
         
      else if( GetWindowLong( hWnd, GWL_STYLE ) & SS_RIGHT	)   
         DrawText( hDC, text, lstrlen( text ), &rct, DT_RIGHT | DT_WORDBREAK );
         
      else   
         DrawText( hDC, text, lstrlen( text ), &rct, DT_LEFT | DT_WORDBREAK );

Si quieres reemplazar FixSays(), cambiale su nombre en dialog.prg y llama por ejemplo a MiFixSays(), 贸 el enlazador seguir谩 usando la de FWH
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM

Problema con DIALOG TRANSPARENT y SAY

Posted: Mon Aug 18, 2008 02:19 PM

Maestro

Lo otro que he podido ver en los SAY cuando son transparente
que no respeta la alineaci贸n (CENTER, RIGHT)
lo deja siempre LEFT

habiendo cambiado en el recurso Estilo ( CENTER O RIGHT )

Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Problema con DIALOG TRANSPARENT y SAY

Posted: Mon Aug 18, 2008 05:54 PM

Patricio,

En el c贸digo que hemos publicado puedes ver como se tienen en cuenta la alineaci贸n en los estilos. Con que versi贸n de FWH has probado ?

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion