Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-04-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Dibujar un Gradient (Degradado)

Esta función la he extraído de una de las unidades del proyecto Jedi, es muy rápida y util al diseñar interfaces y modernas y muy profesionales.

Código Delphi [-]
 
{primero declaramos el Type en alguna parte de la unidad}   
Type   TGradientDirection = (gdVertical, gdHorizontal);   

{luego implementamos la función}  
function FillGradient(DC: HDC; ARect: TRect; ColorCount: Integer;
   StartColor, EndColor: TColor; ADirection: TGradientDirection): Boolean; 
var   StartRGB: array [0..2] of Byte;   
RGBKoef: array [0..2] of Double;   
Brush: HBRUSH;   
AreaWidth, AreaHeight, I: Integer;   
ColorRect: TRect;   
RectOffset: Double; 
begin   
RectOffset := 0;   
Result := False;   
if ColorCount < 1 then     
Exit;   
StartColor := ColorToRGB(StartColor);   
EndColor := ColorToRGB(EndColor);   
StartRGB[0] := GetRValue(StartColor);   
StartRGB[1] := GetGValue(StartColor);   
StartRGB[2] := GetBValue(StartColor);   
RGBKoef[0] := (GetRValue(EndColor) - StartRGB[0]) / ColorCount;   
RGBKoef[1] := (GetGValue(EndColor) - StartRGB[1]) / ColorCount;   
RGBKoef[2] := (GetBValue(EndColor) - StartRGB[2]) / ColorCount;   
AreaWidth := ARect.Right - ARect.Left;   
AreaHeight :=  ARect.Bottom - ARect.Top;   
case ADirection of     
gdHorizontal:       RectOffset := AreaWidth / ColorCount;     
gdVertical:       RectOffset := AreaHeight / ColorCount;   
end;   
for I := 0 to ColorCount - 1 do   
begin     
Brush := CreateSolidBrush(RGB(
       StartRGB[0] + Round((I + 1) * RGBKoef[0]),
       StartRGB[1] + Round((I + 1) * RGBKoef[1]),
       StartRGB[2] + Round((I + 1) * RGBKoef[2])));
     
case ADirection of       
gdHorizontal:
         SetRect(ColorRect, Round(RectOffset * I), 0, Round(RectOffset * (I + 1)), AreaHeight);
gdVertical:
         SetRect(ColorRect, 0, Round(RectOffset * I), AreaWidth, Round(RectOffset * (I + 1)));     
end;     OffsetRect(ColorRect, ARect.Left, ARect.Top);     

FillRect(DC, ColorRect, Brush);     
DeleteObject(Brush);   
end;   
Result := True; 
end;

Una forma elegante es dibujar un degradado reflejado, que está muy de moda actualmente, lo consigues creando dos <b>Rect</b> que son dos mitades del recuadro que realmente deseas pintar.

Última edición por Chris fecha: 17-04-2007 a las 00:37:22.
Responder Con Cita
  #2  
Antiguo 16-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
¿y cual es tu pregunta? O acaso estas recomendando los componentes Jedi ???
Responder Con Cita
  #3  
Antiguo 16-04-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Disculpa, pero reconozco que me equivoque, debí talvez escribir esto en la sección de trucos, pero bueno, ahora ya está y no la voy a borrar. y No estoy recomendando los componente Jedi, aunque debería.

Última edición por Chris fecha: 16-04-2007 a las 20:47:09.
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
Menu Gradient ..Como lo hago.. genius Varios 1 23-01-2007 17:57:06
ListBox degradado Deiv OOP 4 17-01-2006 14:57:27
Componente 'Gradient' para Delphi 2006 gluglu Varios 4 10-12-2005 17:26:45
Aspecto Degradado de un form Rabata Varios 4 11-11-2005 12:42:56
Degradado sobre cualquier elemento gluglu Varios 0 19-03-2005 16:13:33


La franja horaria es GMT +2. Ahora son las 00:07:46.


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