Bonito efecto de luz para el rect de la caja del get...
¿ Como se podria hacer ?
#include "FiveWin.ch"
function Main()
local oDlg, cTest := Space( 20 ), oGet
DEFINE DIALOG oDlg
@ 2, 3 GET oGet VAR cTest OF oDlg SIZE 100, 13
oGet:bPainted = { || LightBorder( oGet ) }
ACTIVATE DIALOG oDlg CENTERED
return nil
function LightBorder( oGet )
local hDC := oGet:oWnd:GetDC()
local hBrush, hOldBrush, n
local aTopLeft, aBottomRight
local oPen
for n = 1 to 10
SelectObject( hDC, oPen := TPen():New( ,, nRGB( n ^ 2, n ^ 2, 200 ) ):hPen )
aTopLeft = ClientToScreen( oGet:hWnd, { oGet:nTop, oGet:nLeft } )
aTopLeft = ScreenToClient( oGet:oWnd:hWnd, aTopLeft )
aBottomRight = ClientToScreen( oGet:hWnd, { oGet:nBottom, oGet:nRight } )
aBottomRight = ScreenToClient( oGet:oWnd:hWnd, aBottomRight )
SetBkMode( hDC , 1 )
Rectangle( hDC, aTopLeft[ 2 ] - 2 - n,;
aTopLeft[ 1 ] - 2 - n,;
aBottomRight[ 1 ] + 2 + n,;
aBottomRight[ 2 ] + 2 + n )
oPen:End()
next
oGet:oWnd:ReleaseDC()
return nil
function pintaselect(oItem)
local hDC := oItem:oWnd:GetDC()
local hBrush, hOldBrush, n
local aTopLeft, aBottomRight
local oPen,hPen1
local aRect := GetClientRect( oItem:hWnd )
for n = 1 to 10
hPen1 = CreatePen( PS_SOLID, 1, nRGB( Int(189- (n ^ 2)), Int(230-(n ^ 2) ) , 252 ) )
// SelectObject( hDC, oPen := TPen():New( ,, nRGB( n ^ 2, n ^ 2, 200 ) ):hPen )
SelectObject( hDC,hPen1)
aTopLeft = ClientToScreen( oItem:hWnd, { aRect[1], aRect[2] } )
aTopLeft = ScreenToClient( oITem:oWnd:hWnd, aTopLeft )
aBottomRight = ClientToScreen( oItem:hWnd, {aRect[3], aRect[4] } )
aBottomRight = ScreenToClient( oItem:oWnd:hWnd, aBottomRight )
SetBkMode( hDC , 1 )
Rectangle( hDC, aTopLeft[1]-12 + n, aTopLeft[2]-12+ n, aBottomRight[ 1 ]+12 -n, aBottomRight[ 2 ]+12-n )
DeleteObject( hPen1 )
next
oItem:oWnd:ReleaseDC()
Return nil
case WM_NCPAINT:
{
HDC hdc;
RECT rect;
HBRUSH b;
HPEN pe;
hdc=GetDCEx(hwnd,(HRGN)wParam,DCX_WINDOW|DCX_CACHE|DCX_INTERSECTRGN|DCX_LOCKWINDOWUPDATE);
GetWindowRect(hwnd,&rect);
b=CreateSolidBrush(RGB(0,180,180));
SelectObject(hdc,B)/>;
pe=CreatePen(PS_SOLID, 1, RGB(90, 90, 90));
SelectObject(hdc,pe);
Rectangle(hdc,0,0,(rect.right-rect.left),(rect.bottom-rect.top));
DeleteObject(pe);
DeleteObject(B)/>;
ReleaseDC(hwnd,hdc);
RedrawWindow(hwnd,&rect,(HRGN)wParam,RDW_UPDATENOW);
return 0;
}
pintaselect( oItem)
local hDC := oItem:oWnd:GetDC()
local hBrush, hOldBrush, n
local aTopLeft, aBottomRight
local oPen,hPen1
local aRect := GetClientRect( oItem:hWnd )
for n = 1 to 6
IF n > 5
hPen1 = CreatePen( PS_SOLID, 1, nRGB(102 , 175, 233 ) )
ELSE
hPen1 = CreatePen( PS_SOLID, 1, nRGB( Int(254 - n*3-n ), Int(254- n*2 ) , 255 ) )
endif
// hPen1 = CreatePen( PS_SOLID, 1, nRGB( Int(244 - n ), Int(254- n ) , 255 ) )
// SelectObject( hDC, oPen := TPen():New( ,, nRGB( n ^ 2, n ^ 2, 200 ) ):hPen )
SelectObject( hDC,hPen1)
aTopLeft = ClientToScreen( oItem:hWnd, { aRect[1], aRect[2] } )
aTopLeft = ScreenToClient( oITem:oWnd:hWnd, aTopLeft )
aBottomRight = ClientToScreen( oItem:hWnd, {aRect[3], aRect[4] } )
aBottomRight = ScreenToClient( oItem:oWnd:hWnd, aBottomRight )
SetBkMode( hDC , 1 )
Rectangle( hDC, aTopLeft[1]-8 + n, aTopLeft[2]-8+ n, aBottomRight[ 1 ]+8 -n, aBottomRight[ 2 ]+8-n )
DeleteObject( hPen1 )
next
oItem:oWnd:ReleaseDC()
Return nil
#Include "FiveWin.ch"
function Main()
local oDlg, cTest := Space( 20 ), oGet
DEFINE DIALOG oDlg
@ 2, 3 GET oGet VAR cTest OF oDlg SIZE 100, 13
oGet:bPainted = { || LightBorder( oGet ) }
ACTIVATE DIALOG oDlg CENTERED
return nil
//Function pintaselect( oItem )
function LightBorder( oGet )
local hDC := oGet:oWnd:GetDC()
local hBrush, hOldBrush, n
local aTopLeft, aBottomRight
local oPen,hPen1
local aRect := GetClientRect( oGet:hWnd )
for n = 1 to 6 // 10 es mejor
IF n > 5
hPen1 = CreatePen( PS_SOLID, 1, nRGB( 102 , 175, 233 ) )
ELSE
hPen1 = CreatePen( PS_SOLID, 1, nRGB( Int(254 - n*3-n ), Int(254- n*2 ) , 255 ) )
endif
// hPen1 = CreatePen( PS_SOLID, 1, nRGB( Int(244 - n ), Int(254- n ) , 255 ) )
// SelectObject( hDC, oPen := TPen():New( ,, nRGB( n ^ 2, n ^ 2, 200 ) ):hPen )
SelectObject( hDC,hPen1)
aTopLeft = ClientToScreen( oGet:hWnd, { aRect[1], aRect[2] } )
aTopLeft = ScreenToClient( oGet:oWnd:hWnd, aTopLeft )
aBottomRight = ClientToScreen( oGet:hWnd, {aRect[3], aRect[4] } )
aBottomRight = ScreenToClient( oGet:oWnd:hWnd, aBottomRight )
SetBkMode( hDC , 1 )
Rectangle( hDC, aTopLeft[1]-8 + n, aTopLeft[2]-8+ n, aBottomRight[ 1 ]+8 -n, aBottomRight[ 2 ]+8-n )
DeleteObject( hPen1 )
next
oGet:oWnd:ReleaseDC()
Return nil
#include "Fivewin.ch"
Function Test()
Local oDlg, oFont, oBmp, cTest := Space( 20 ), oGet
DEFINE BITMAP oBmp FILE "..\bitmaps\back.bmp"
DEFINE FONT oFont NAME "Arial" SIZE 0,-36 BOLD NESCAPEMENT 250 //Texto 45º
DEFINE DIALOG oDlg FROM 0,0 to 18,40 TITLE "Texto sin relleno"
@ 2, 3 GET oGet VAR cTest OF oDlg SIZE 100, 13 ;
COLORS CLR_HRED, CLR_WHITE
oGet:bPainted = { || LightBorder( oGet ) }
ACTIVATE DIALOG oDlg CENTERED ON PAINT;
(DrawBitmap(oDlg:hDC,oBmp:hBitmap,0,0,oDlg:nWidth,oDlg:nHeight),;
HollowText(oDlg,200,20," Texto sin relleno ",oFont,CLR_GREEN,2))
RELEASE FONT oFont
RELEASE BITMAP oBmp
return nil
*************************************************************************
*
* Function HollowText(oDlg,y,x,cText,oFont,nColor,nWidth,nStyle)
*
* Dibuja sólo el contorno de un texto
* oDlg: Contenedor
* y,x : Coordenadas
* oFont: Fuente
* nColor, nWidth, nStyle: Color, ancho y estilo de contorno
*
* César E. Lozada cesarlozada@hotmail.com
* Los Teques, Venezuela 17-Abr-2003
*
*************************************************************************
Function HollowText(oDlg,y,x,cText,oFont,nColor,nWidth,nStyle)
Local hDC:=oDlg:hDC
Local nOldFont, hPen, hOldPen
DEFAULT oFont:=oDlg:oFont, nColor:=oDlg:nClrText,;
nWidth:=1, nStyle:=0 //PS_SOLID
nOldFont:=SelectObject(hDC,oFont:hFont)
hPen:=CreatePen(nStyle,nWidth,nColor)
hOldPen:=SelectObject(hDC,hPen)
BeginPath(hDC)
TextOut(hDC,y,x,cText,Len(cText))
EndPath(hDC)
StrokePath(hDC)
SelectObject(hDC,nOldFont)
SelectObject(hDC,hOldPen)
DeleteObject(hPen)
return nil
function LightBorder( oGet )
local hDC := oGet:oWnd:GetDC()
local hBrush, hOldBrush, n
local aTopLeft, aBottomRight
local oPen,hPen1
local aRect := GetClientRect( oGet:hWnd )
for n = 1 to 10
IF n > 5
//hPen1 = CreatePen( PS_SOLID, 1, nRGB( 102 , 175, 233 ) ) // blue
hPen1 = CreatePen( PS_SOLID, 1, RGB( 255, 165, 000 ) ) // orange
ELSE
hPen1 = CreatePen( PS_SOLID, 1, nRGB( Int(254 - n*3-n ), Int(254- n*2 ) , 255 ) )
endif
// hPen1 = CreatePen( PS_SOLID, 1, nRGB( Int(244 - n ), Int(254- n ) , 255 ) )
// SelectObject( hDC, oPen := TPen():New( ,, nRGB( n ^ 2, n ^ 2, 200 ) ):hPen )
SelectObject( hDC,hPen1)
aTopLeft = ClientToScreen( oGet:hWnd, { aRect[1], aRect[2] } )
aTopLeft = ScreenToClient( oGet:oWnd:hWnd, aTopLeft )
aBottomRight = ClientToScreen( oGet:hWnd, {aRect[3], aRect[4] } )
aBottomRight = ScreenToClient( oGet:oWnd:hWnd, aBottomRight )
SetBkMode( hDC , 1 )
Rectangle( hDC, aTopLeft[1]-8 + n, aTopLeft[2]-8+ n, aBottomRight[ 1 ]+8 -n, aBottomRight[ 2 ]+8-n )
DeleteObject( hPen1 )
next
oGet:oWnd:ReleaseDC()
Return nil
*************************************************************************
DLL32 STATIC FUNCTION BeginPath;
( hdc AS LONG ) ;
AS LONG PASCAL;
LIB "GDI32"
DLL32 STATIC FUNCTION EndPath;
( hdc AS LONG ) ;
AS LONG PASCAL;
LIB "GDI32"
DLL32 STATIC FUNCTION StrokePath;
( hdc AS LONG ) ;
AS LONG PASCAL;
LIB "GDI32"
*************************************************************************
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 56 guests