Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2008
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Como manejar colores degradados en áreas no rectángulares ni triángulares ?

Hola,

Necesito manejar colores degradados en áreas con forma de ellipse y en áreas de rectángulos con bordes redondeados. Mi problema es : como hacerlo ?

La rutina GradientFill de la librería msimg32.dll de Windows permite manejar colores degradados; pero, solo en rectángulos y en triángulos. Hay alguna rutina similar que lo haga para áreas con formas distintas ?

He considerado la posibilidad de hacerlo dibujando líneas de ancho 1 que vayan variando su color desde nuestro color inicial de degradado hasta el final; pero encuentro este método muy ineficiente para implementarlo a nivel de Delphi, en especial cuando en un mismo formulario son varias las áreas a dibujar.

Alguna sugerencia ?
Responder Con Cita
  #2  
Antiguo 20-10-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Código Delphi [-]
function GradientFill(DC: HDC; pVertex: Pointer; dwNumVertex: Cardinal; pMesh: Pointer; dwNumMesh, dwMode: Cardinal): Cardinal; stdcall external 'msimg32';
 
procedure TForm1.Button1Click(Sender: TObject);
 
const
 Vertex: array [0..1] of packed record
  X, Y: Cardinal;
  Red, Green, Blue, Alpha: Word;
 end = ((), (X: 200; Y: 200; Blue: $FFFF));
 
 Rect: GRADIENT_RECT = (LowerRight: 1);
 
var Bitmap: TBitmap;
begin
 Bitmap := TBitmap.Create;
 Bitmap.Width := Vertex[1].X - Vertex[0].X;
 Bitmap.Height := Vertex[1].Y - Vertex[0].Y;
 Bitmap.Canvas.Brush.Color := clBlack;
 Bitmap.Canvas.FillRect(Classes.Rect(0, 0, Bitmap.Width, Bitmap.Height));
 Bitmap.Canvas.Brush.Color := clWhite;
 Bitmap.Canvas.Pen.Color := clWhite;
 Bitmap.Canvas.Ellipse(0, 0, Bitmap.Width, Bitmap.Height);
 GradientFill(Canvas.Handle, @Vertex, Length(Vertex), @Rect, 1, GRADIENT_FILL_RECT_H);
 BitBlt(Canvas.Handle, Vertex[0].X, Vertex[0].Y, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCAND);
 Bitmap.Destroy;
end;
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #3  
Antiguo 20-10-2008
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Gracias. Voy a revisar

Hola,

Muchas gracias por la sugerencia. Voy a revisarla esta noche.

Me llama la atención que usas GradientFill, rutina que uso yo, la cual no soporta sino rectángulos y triángulos. Si entiendo bien lo que ví brevemente de tú código, parece que defines un rectángulo, que limitará a GradientFill y luego dibujas encima una Ellipse; pero, no veo con claridad como haces para que el área entre el rectángulo y la ellipse no sea afectada por GradientFill.

En fin, ya veremos esta noche cuando lo revise con calma.

Muchos saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda, programa muy básico para encontrar areas Ale89 Varios 12 16-03-2008 16:27:04
Como manejar marcos en C#? JuanErasmo .NET 0 19-01-2007 01:17:33
Areas de Trabajo Variables jsc Varios 2 23-06-2004 18:47:14
Regiones y Formas no rectangulares vtdeleon Gráficos 2 20-05-2004 03:01:21
como manejar VIDEO ? ... ingel Varios 0 03-10-2003 21:17:38


La franja horaria es GMT +2. Ahora son las 05:46:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi