Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

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



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 23:38:43.


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