Static Function PickColor()
Local oDlg, oClr, oBtn1, oBtn2, oHnd, oCur, aCor
local lSalida:= .F.
Local hCursor:= LoadCursor(GetResources(),"PICK")
// Cursor("PICK") -->> No Cambia el cursor a +
Define CURSOR oCur Resource "ARROW"
Define CURSOR oHnd Resource "SELECT"
Define DIALOG oDlg Resource "CAPTURAR"
Redefine SAY oClr PROMPT " " ID 100 Of oDlg UPDATE
RedeFine BUTTONBMP oBtn1 RESOURCE "GUARDAR" ID 200 Of oDlg ACTION (Msgstop(Str(cColor[1])+","+str(cColor[2])+","+str(cColor[3]),"Guardando"))
RedeFine BUTTONBMP oBtn2 RESOURCE "TERMINAR" ID 300 Of oDlg ACTION (lSalida:= .T., CursorWE(), oDlg:End())
oClr:SetColor(nRGB(cColor[1],cColor[2],cColor[3]), nRGB(cColor[1],cColor[2],cColor[3]))
oClr:lWantClick:= .T.
oClr:oCursor:= oCur
oDlg:oCursor:= oCur
oDlg:bInit:= { || SetCursor(hCursor) }
oDlg:Capture()
oDlg:bLClicked:= { || aCor:= GetCursorPos() , Msginfo(aCor[1],aCor[2]), ReleaseCapture() }
oBtn1:oCursor:= oHnd
oBtn1:cTooltip:= { "Guardar Color Capturado", "GetSysColor", 1 }
oBtn2:oCursor:= oHnd
oBtn2:cTooltip:= { "Salir del Capturador de Color", "GetSysColor", 3 }
Activate DIALOG oDlg Centered on Init(SetWindowPos( oDlg:hWnd, -1, 0, 0, 0, 0, 3 ), Self) Valid(Self,lSalida)
RETURN Nil
#include "FiveWin.ch"
function Main()
local oDlg, oBtn
DEFINE DIALOG oDlg
@ 0.5, 1.5 BUTTON oBtn PROMPT "Capture" SIZE 30, 30 ;
ACTION oDlg:Capture()
oBtn:bGotFocus = { || oDlg:Capture() }
ACTIVATE DIALOG oDlg CENTERED ;
ON CLICK MsgInfo( "click" )
return nil
HB_FUNC( GDIPLUSCAPTURESCREEN )
{
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
HWND hDesktopWnd = GetDesktopWindow();
HDC hDesktopDC = GetDC(hDesktopWnd);
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC,
nScreenWidth, nScreenHeight);
SelectObject(hCaptureDC,hCaptureBitmap);
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,
hDesktopDC,0,0,SRCCOPY|CAPTUREBLT);
Bitmap * newImage = new Bitmap( hCaptureBitmap , NULL );
ReleaseDC(hDesktopWnd,hDesktopDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);
hb_retnl( ( HB_LONG ) newImage );
}
#include "FiveWin.ch"
function Main()
local oDlg, oBtn
DEFINE DIALOG oDlg
@ 0.5, 1.5 BUTTON oBtn PROMPT "Capture" SIZE 30, 30 ;
ACTION oDlg:Capture()
oBtn:bGotFocus = { || oDlg:Capture() }
ACTIVATE DIALOG oDlg CENTERED ;
ON CLICK capturapan(odlg)
return nil
Function capturapan(odlg)
local nRed,nGreen, nBlue
local aPix := GetCursorPos()
local oGBmp := GdiBmp():new()
oGBmp:hBmp:= GDIPLUSCAPTURESCREEN()
nRed := oGBmp:GetRedPix( aPix[2], aPix[1])
nGreen := oGBmp:GetGreenPix( aPix[2], aPix[1])
nBlue := oGBmp:GetBluePix( aPix[2], aPix[1])
msginfo( "color " + str( nred) + " "+str(nGreen) +" " + str(nblue ) )
odlg:setcolor ( , nrgb(nred,nGreen,nblue) )
odlg:refresh()
RETURN NIL
Application
===========
Path and name: E:\Fivewin\PRUEBAS\WinColors\ColorPick.Exe (32 bits)
Size: 3,880,960 bytes
Compiler version: Harbour 3.2.0dev (r1412151448)
FiveWin Version: FWH 11.11
Windows version: 5.1, Build 2600 Service Pack 3
Time from start: 0 hours 0 mins 3 secs
Error occurred at: 07/27/15, 12:57:52
Error description: Error BASE/1004 Message not found: GDIBMP:GETREDPIX
Args:
[ 1] = O GDIBMP
Stack Calls
===========
Called from: => __ERRRT_SBASE( 0 )
Called from: ../../../tobject.prg => GDIBMP:ERROR( 0 )
Called from: ../../../tobject.prg => (b)HBOBJECT( 0 )
Called from: ../../../tobject.prg => GDIBMP:MSGNOTFOUND( 0 )
Called from: ../../../tobject.prg => GDIBMP:GETREDPIX( 0 )
Called from: ColorPick.prg => CAPTURAPAN( 28 )
Called from: ColorPick.prg => (b)MAIN( 17 )
Called from: .\source\classes\WINDOW.PRG => TDIALOG:LBUTTONDOWN( 2008 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 902 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 286 )
Called from: ColorPick.prg => MAIN( 17 )
System
======
CPU type: Intel(R) Pentium(R) D CPU 3.20GHz 3200 Mhz
Hardware memory: 1022 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Windows total applications running: 6
1 ,
2 , C:\WINDOWS\WinSxS\X86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83
3 , C:\WINDOWS\system32\SHLWAPI.dll
4 , E:\Fivewin\PRUEBAS\WinColors\ColorPick.Exe
5 GDI+ Window, C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.5512_x-ww_dfb54e0c\GDIPLUS
6 SysFader, C:\WINDOWS\system32\SHELL32.DLL
Variables in use
================
Procedure Type Value
==========================
__ERRRT_SBASE
Param 1: O Class: ERROR
GDIBMP:ERROR
Param 1: N 13
Param 2: N 1004
Param 3: C "Message not found"
Param 4: C "GDIBMP:GETREDPIX"
Param 5: N 1
Param 6: O Class: GDIBMP
Local 1: U
Local 2: U
(b)HBOBJECT
Param 1: C "Message not found"
Param 2: C "GDIBMP"
Param 3: C "GETREDPIX"
Param 4: N 1004
GDIBMP:MSGNOTFOUND
Param 1: O Class: GDIBMP
Param 2: C "GETREDPIX"
Param 3: N 755
Param 4: N 436
GDIBMP:GETREDPIX
Param 1: C "GETREDPIX"
Param 2: N 755
Param 3: N 436
CAPTURAPAN
Param 1: N 755
Param 2: N 436
(b)MAIN
Param 1: O Class: TDIALOG
Local 1: U
Local 2: U
Local 3: U
Local 4: A Len: 2
Local 5: O Class: GDIBMP
TDIALOG:LBUTTONDOWN
Param 1: N 50
Param 2: N 114
Param 3: N 1
Param 4: O Class: TDIALOG
TWINDOW:HANDLEEVENT
Param 1: N 50
Param 2: N 114
Param 3: N 1
TDIALOG:HANDLEEVENT
Param 1: N 513
Param 2: N 1
Param 3: N 3276914
DIALOGBOXINDIRECT
Param 1: N 513
Param 2: N 1
Param 3: N 3276914
TDIALOG:ACTIVATE
Param 1: N 4194304
Param 2: C "€ È€ Ÿ L P e B U T T O N C a p t u r e "
Param 3: N 0
Param 4: O Class: TDIALOG
MAIN
Param 1: B {|| ... }
Param 2: U
Param 3: U
Param 4: L .T.
Param 5: U
Param 6: L .T.
Param 7: U
Param 8: U
Param 9: U
Param 10: L .F.
Param 11: L .F.
Local 1: N 0
Local 2: S
Local 3: O Class: TDIALOG
Linked RDDs
===========
DBF
DBFFPT
DBFBLOB
DBFNTX
DataBases in use
================
Classes in use:
===============
1 ERROR
2 HBCLASS
3 HBOBJECT
4 TWINDOW
5 TDIALOG
6 TBRUSH
7 TCONTROL
8 TBUTTON
9 TFONT
10 TRECT
11 GDIBMP
12 TREG32
Memory Analysis
===============
213 Static variables
Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
cuatecatl82 wrote:Mastintin:
Creo que no tengo soporte completo a GDIPlus. Gracias.. Sigo investigando.
HB_FUNC( GDIPLUSIMAGEPIXGETRED )
{
Bitmap * newImage = ( Bitmap * ) hb_parnl( 1 );
int nX = hb_parni( 2 );
int nY = hb_parni( 3 );
Color pixelColor;
newImage->GetPixel(nX, nY, &pixelColor );
long nR = pixelColor.GetR();
hb_retnl( nR );
}
//----------------------------------------------------------------------------//
HB_FUNC( GDIPLUSIMAGEPIXGETBLUE )
{
Bitmap * newImage = ( Bitmap * ) hb_parnl( 1 );
int nX = hb_parni( 2 );
int nY = hb_parni( 3 );
Color pixelColor;
newImage->GetPixel(nX, nY, &pixelColor );
long nB = pixelColor.GetB();
hb_retnl( nB );
}
//----------------------------------------------------------------------------//
HB_FUNC( GDIPLUSIMAGEPIXGETGREEN )
{
Bitmap * newImage = ( Bitmap * ) hb_parnl( 1 );
int nX = hb_parni( 2 );
int nY = hb_parni( 3 );
Color pixelColor;
newImage->GetPixel(nX, nY, &pixelColor );
long nG = pixelColor.GetG();
hb_retnl( nG );
}
//nRed := oGBmp:GetRedPix( aPix[2], aPix[1])
//nGreen := oGBmp:GetGreenPix( aPix[2], aPix[1])
//nBlue := oGBmp:GetBluePix( aPix[2], aPix[1])
nRed:= GDIPLUSIMAGEPIXGetRed(oGbmp:hbmp,aPix[2]-1, aPix[1]-1) // se resta uno pues el primer pixel es el 0,0
nGreen:= GDIPLUSIMAGEPIXGetGreen(oGbmp:hbmp,aPix[2]-1, aPix[1]-1)
nBlue:= GDIPLUSIMAGEPIXGetTBlue(oGbmp:hbmp,aPix[2]-1, aPix[1]-1)
cuatecatl82 wrote: lo único que no me gusta es que al capturar el color siempre me manda un msginfo diciendo "ficheros no encotrados", ¿Que ficheros busca o son necesarios?
Saludos..
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: cmsoft, Google [Bot] and 119 guests