Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-08-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Arrow Procedure y Funcion nuevos DrwGradientLine y LabLinea

Hola Compañeros Como siempre os pongo dos trozos de códigos nuevo, un procedure que dibuja una linea gradient y una funcion que hice para crear separaciones, espero os sirvan de ayuda

Código Delphi [-]
procedure DrawGradientLine(bCanvas:
TCanvas; X, Y, Width,height: integer;
StartColor, EndColor: TColor;Parejo:boolean);
//------------------------------------------------------------------------------
//****************************************************[ DRAWGRADIENTLINE ]******
//  Bajado originalmente de codeunivers.com/…/draw_gradient_line
//  Modificado por mi, se añade  la posibilidad de ancho y de si estilo continuo
//  21/08/2011           JLGT
//------------------------------------------------------------------------------
//  bCanvas     Canvas sobre el qiue dibujar la linea
//  X           Posición left a comenzar
//  Y           Posición Top a cpmenzar
//  Width       Ancho de la linea
//  Hight       Alto de la linea  (Mia)
//  StarColor   Color de inicio
//  EndColor    Color Final
//  Parejo      Si es truedibuja todas las lineas empezando igual,
//              si es false cada inicio de linea incrementa 1 desplazandose los colores 
//              diagonalmente (Mia)
//--------------------------------------------------------------EJEMPLO---------
//   Form1.DoubleBuffered:=True;
//   DrawGradientLine(Form1.Canvas,0,0,Form1.Width,5,clRed,clLime,True);
//   DrawGradientLine(Form1.Canvas,0,Form1.Height-43,Form1.Width,5,clRed,clLime,True);
//   DrawGradientLine(Form1.Canvas,0,0,50,Form1.Height,clBlack,clRed,True);
//   DrawGradientLine(Form1.Canvas,Form1.Width-66,0,50,Form1.Height,clLime,clBlack,True);
//------------------------------------------------------------------------------
var
fX,hy:integer;
dr,dg,db:Extended;
C1,C2:TColor;
r1,r2,g1,g2,b1,b2:Byte;
R,G,B:Byte;
cnt:integer;
begin
  if Parejo=False then  cnt:=0;
  for HY := y to y+height - 1 do
  begin
    if Parejo=True then cnt := 0;
    C1 := StartColor;
    C2 := EndColor;
    R1 := GetRValue(C1) ;
    G1 := GetGValue(C1) ;
    B1 := GetBValue(C1) ;
    R2 := GetRValue(C2) ;
    G2 := GetGValue(C2) ;
    B2 := GetBValue(C2) ;
    dr := (R2-R1) / Width;
    dg := (G2-G1) / Width;
    db := (B2-B1) / Width;
    for fX := X to X + Width - 1 do
    begin
      R := R1+Ceil(dr*cnt) ;
      G := G1+Ceil(dg*cnt) ;
      B := B1+Ceil(db*cnt) ;
      bCanvas.Pixels[fX, hy] := RGB(R,G,B);
      inc(cnt);
    end;
  end;
end;

function TForm1.LabLinea(Cap,Carc:string;Ali:TAlignment;Whi:Integer):string;
//------------------------------------------------------------------------------
//************************************************************[ LabLinea ]******
//  Función propia  JLGT 20/08/2011
//  texto con relleno a elejir posicion, para separaciones
//------------------------------------------------------------------------------
//  Cap   Cadena de Texto
//  Car   Caracter
//  Ali   taLeftJustify   cadena a la izquierda, Relleno a la derecha
//        taRightJustify  cadena a la derecha, Relleno a la izquierda
//        taCenter        cadena al centro, relleno a ambos lados
//  Whi
//---------------------------------------------------------------EJEMPLO--------
//
//  Label1.Caption:=LabLinea('Opciones',' ',taCenter,200);
//
//  Si el Label1 Cambiamos las caracteristicas del Font a negrita y subrallado,
//  queda un curios separador
//------------------------------------------------------------------------------

var VarIAnc,VariDif:Integer;
    VarSCad:string;
    lab:TLabel;
begin
    lab:=TLabel.Create(Self);
    lab.Parent:=Self;
    VarIAnc:=lab.Canvas.TextWidth(Cap);
    VariDif:=whi-VarIAnc;
    VarSCad:=Cap;
    case Ali of
      taLeftJustify: begin
                        while lab.Canvas.TextWidth(VarSCad) < Whi do  VarSCad:=VarSCad+Carc;
                     end;
      taRightJustify:begin
                        while lab.Canvas.TextWidth(VarSCad)  < Whi do  VarSCad:=Carc+VarSCad;
                     end;
      taCenter:begin
                        while lab.Canvas.TextWidth(VarSCad) < lab.Canvas.TextWidth(Cap)+(VariDif/2) do  VarSCad:=VarSCad+Carc;
                        while lab.Canvas.TextWidth(VarSCad) < whi do  VarSCad:=Carc+VarSCad
               end;
    end;
   Result:=VarSCad
end;
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #2  
Antiguo 23-08-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola José Luis,
he probado la función LabLinea y si pones el carácter de relleno cadana vacía '' la función se cuaja, ya que imagino que no se incrementa la longitud en caracteres, por lo que se bucla. Sería conveniente que controlaras que cuando el caracter sea '' lo conviertas en ' '.

Un saludo
PD: Respecto a lo que comentamos en su día, espero tener preparado un prototipo esta misma semana para pasártelo y que lo analices. Después lo publicaríamos en el Club.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #3  
Antiguo 23-08-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Gracias Javi, lo comprobare, ya que no probé con caracteres en vació, tranquilo, ahora mismo estoy peleándome con mi programa CreaTablas, espero estés pasando un buen mes de Agosto
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
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
Funcion o procedure para apagar sub carpetas Paulao Varios 4 20-07-2011 17:15:26
llamar a procedure desde otra procedure anubis Varios 23 04-03-2010 18:44:37
puntero a un procedure en un procedure como parametro fcios Varios 2 14-03-2009 03:41:22
Chat nuevos Karel Garcell Windows 5 04-03-2008 16:25:57
Funcion o Procedure @-Soft Conexión con bases de datos 3 01-11-2003 12:53:48


La franja horaria es GMT +2. Ahora son las 07:51:40.


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