Power Builder - como puedo hacer esto?

 
Vista:

como puedo hacer esto?

Publicado por mariano (8 intervenciones) el 11/05/2005 08:39:35
Hola, necestio saber como podria hacer para que, escaneando un tira de colores, me diera una serie de cifras de acuerdo a los colores de esta tira. Seria una tirita de papel con varios colores, y me tendria que dar una cifra por cada uno de estos.
Esto no creo que sea posible programarlo directamente en Power Builder, no? Si alguien sabe de un programa pequeño que pueda hacer esto, o en que lenguaje lo podria programar, le agradeceria que me lo comunicara
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:como puedo hacer esto?

Publicado por Asgard (1957 intervenciones) el 11/05/2005 16:02:44
Cada color tendría una cifra o la tira completa formaria la cifra, bueno independientemente de como esto sea puedes utilizar la API ChooseColorA

function boolean ChooseColorA( REF s_ChooseColor lpcc ) library "comdlg32.dll"

Y dependiendo del color darle el valor que necesitas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Sigo con dudas

Publicado por mariano (8 intervenciones) el 12/05/2005 14:29:01
Hola, que tal. Primero que nada quiero agradecerte por contestarme.
Mira, la verdad es que no estoy familiarizado con el uso de apis, queria ver si me podias ayudar con esa funcion que me pasaste

function boolean ChooseColorA( REF s_ChooseColor lpcc ) library "comdlg32.dll"

Queria saber como tendria que hacer para poder usarla, que tengo que hacer con el archivo "comdlg32.dll".

Te explico un poco mas, la tirita tiene varios tonos de azul, en lineas verticales, seria una imagen escaneada, lo que necesitaria es que me diera el color RGB o en cualquier formato para cada posicion en la tira. Estaba pensando en algo que me diera la posicion y el color por cada pixel o donde yo ubique el puntero del mouse.

Bueno mas o menos eso seria todo, gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sigo con dudas

Publicado por jorge (900 intervenciones) el 12/05/2005 15:40:07
Hola.
Deberias usar esta Api si desear extraer el color de un pixel

GetPixel & SetPixel

The first function returns the color of a specific pixel. The SetPixel function changes the targeted pixel to the color sent. There is no PowerBuilder equivalent.



FUNCTION ulong GetPixel(ulong hwnd, long xpos, long ypos) LIBRARY "Gdi32.dll"

FUNCTION ulong SetPixel(ulong hwnd, long xpos, long ypos, ulong pcol) LIBRARY "Gdi32.dll"



long lx, ly
ulong rtn
ulong l_handle, l_device

//Aqui deberas usar el evento mousemove
para la xpos ypos

lx = 100
ly = 100

l_handle = handle(w_main)
l_device = GetDC(l_handle)

rtn = GetPixel(l_device, 100, 100)
MessageBox("Position " + string(lx) + "," + string(ly),"Color = " + string(rtn))
// Esto si deseas setear ese pixel con otro color
SetPixel(l_device, lx, ly, 0) // This call will set the pixel at lx, ly to black.

Suerte...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Otra duda

Publicado por mariano (8 intervenciones) el 12/05/2005 16:43:15
Que seria esa funcion, como tengo que declararla:

l_device = GetDC(l_handle)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Otra duda

Publicado por Jorge (900 intervenciones) el 12/05/2005 17:50:54
Te paso mas detalles
//Funciones a Declarar en GlobalExternalFunctions

//Pixel
FUNCTION ulong GetPixel(ulong hwnd, long xpos, long ypos) LIBRARY "Gdi32.dll"

//GetDC
Function ulong GetDC(ulong hwnd) library "user32.dll"

// Crea una Windows
// Crea un Objeto StaticText
// En un Objeto Picture crea un evento mousemove
// asignale pbm_mousemove
// Alli pon la figura de color
// Scrip en ese evento

ulong rtn
ulong l_handle, l_device

l_handle = handle(This)
l_device = GetDC(l_handle)
rtn = GetPixel(l_device, xpos, ypos)

St_1.Text= "Position :" + string(xpos) + string(ypos) + "Color : " + string(rtn)

Mucha Suerte !! Saludos desde Argentina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

no pasa nada

Publicado por mariano (8 intervenciones) el 13/05/2005 09:46:54
che, Jorge, mira, pongo todo eso usando un jpg o gif pero siempre me tira el mismo color: 4294967295.
Si lo pongo sobre la ventana si funciona, me tira el color del background, pero en el picture no. Que puede ser.

Gracias por la ayuda y saludos de un cordobes en España.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:no pasa nada

Publicado por Jorge (900 intervenciones) el 13/05/2005 16:12:09
Que bueno

Yo soy de San Luis Cerquita de Tu Cba Natal
Es mas hace unos dias anuve por Cba Capital

Tenes Razon, eso hace. yo lo probe , pues recien
pense como hacerlo con tu inquietud, hice
un jpg con un copy de la gama de los colores
y me tira cualquier numero solo parece que anda corrercto
en la posicion X0
Espero que por ahi algun forista tenga algun aporte mas.
Mire un monton mas de Apis y solo faltaria probar
sacar la pocision del puntero con la APi Mouse event y no con el evento
Mouse_Event

This function has the ability of moving the mouse pointer, activating the mouse buttons, and doing anything that the user can do with the mouse. The sample script will move the mouse 80 pixels left and 50 pixels up. The structure is populated by the mouses previous position. There is no PowerBuilder equivalent.

SUBROUTINE Mouse_Event(ulong dwflag,ulong dx,ulong dy,ulong cbutton,ulong dwextra) LIBRARY "User32.dll"

Structure: (Mousepos)

long xpos, long ypos
Script:
int l_loop, lx, ly, lflag
mousepos mouseloc
lx = mouseloc.xpos
ly = mouseloc.ypos
lflag = 1 //1 = do nothing, 7 = L-button clicked, 25 = R-button clicked
mouse_event(lflag,-80,-50,0,0)

Suerte Amigazo y estamos en contac to
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Obtener el color de un pixel al pasar el mouse

Publicado por Oscar (1178 intervenciones) el 13/05/2005 19:55:11
Hola Jorge y mariano:
Buen aporte Jorge; pero faltaba utilizar la API ReleaseDC, para liberar el contexto.
Es decir, el ejemplo completo para averiguar la posición y el color del pixel en RGB de un control picture al pasar el mouse, sería el siguiente:

1. Declarar en Local o Global external functions:

Function ULong GetDC(ULong hWnd) Library "user32.dll"
Function long ReleaseDC(ULong hWnd, ULong hDC) Library "user32.dll"
Function ULong GetPixel(ULong hDC, Long nXPos, Long nYPos) library "gdi32.dll"

2. Crear un nuevo evento de usuario en el Picture control:
Event Name: mievento
Event ID: pbm_mousemove

3. Script en dicho evento:
Ulong hWnd, hDC, colorref
Long xp, yp, red, blue, green

xp = UnitsToPixels(xpos, XUnitsToPixels!)
yp = UnitsToPixels(ypos, YUnitsToPixels!)

hWnd = Handle(This)
hDC = GetDC(hWnd)
colorref = GetPixel(hDC, xp, yp)
ReleaseDC(hWnd, hDC)

red = mod(colorref, 256)
colorref -= red
colorref /= 256
green = mod(colorref, 256)
colorref -= green
colorref /= 256
blue = colorref

St_1.Text= "Posicion :" + string(xp) +","+ string(yp) + &
"Color : " + string(red)+","+ String(green)+","+String(blue)
///--------------------Fin----------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Obtener el color de un pixel al pasar el mouse

Publicado por Jorge (900 intervenciones) el 13/05/2005 20:45:35
Hola Oscar y Mariano

Siempre Alli esta Oscar .!!

Me puse a probar y claro el problema principal es que no
estaba convirtiendo la Posicion a Pixel

xp = UnitsToPixels(xpos, XUnitsToPixels!)
yp = UnitsToPixels(ypos, YUnitsToPixels!)

Por lo que al desplazar el Mouse se hiba a cualquier lado.

Y bueno para convertir el valor de Long a RGB Oscar ya lo habias
publicado en un post anterior,

// declara la Funcion
Function long ReleaseDC(ULong hWnd, ULong hDC) Library "user32.dll"

// Este scrip ya funciona solo resta convertir a RGB

ULong rtn
long l_handle, l_device ,l_device_destino
Long xp, yp, red, blue, green

xp = UnitsToPixels(xpos, XUnitsToPixels!)
yp = UnitsToPixels(ypos, YUnitsToPixels!)

l_handle = handle(p_1)
l_device = GetDC(l_handle)
rtn = GetPixel(l_device, xp, yp)
ReleaseDC(l_device, l_handle)

// Convertir a RGB

St_1.Text= "Position :" + "X: " + string(xp) +"Y: " + string(yp) + "Color : " + string(rtn)

st_2.BackColor=rtn

Saludos Suerte Mariano
Un gran saludo a Vos Oscar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Obtener el color de un pixel al pasar el mouse

Publicado por mariano (8 intervenciones) el 16/05/2005 08:26:26
Eso era lo que pasaba, habia que convertir de unidades a pixeles. Gracias a todos por su ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar