Form com aparencia gradiente

Delphi

24/10/2006

Gostaria de saber como faço para criar um form com uma aparência gradiente igual a tela de abertura do Live Messenger.


Visualdesigner

Visualdesigner

Curtidas 0

Respostas

Paulocesar1301

Paulocesar1301

24/10/2006

sinceramente, ainda não vi a tela do LiveMessenger, mas esse é um código que gera um gradiente no em qualquer componente que tenha Canvas:
[b:16b9c4dbac]peguei aki no fórum mesmo[/b:16b9c4dbac]

procedure DrawGradient(Canvas: TCanvas; ARect: TRect; Colors: array of TColor);
var
  I, NumColors, IColor, PixPerColor: Integer;
  R, G, B, IR, IG, IB: Single;
begin
  NumColors := Length(Colors);
  PixPerColor := (ARect.Right - ARect.Left) div (NumColors - 1);
  R := GetRValue(Colors[0]);
  G := GetGValue(Colors[0]);
  B := GetBValue(Colors[0]);
  IR := GetRValue(Colors[1]) - GetRValue(Colors[0]);
  IG := GetGValue(Colors[1]) - GetGValue(Colors[0]);
  IB := GetBValue(Colors[1]) - GetBValue(Colors[0]);
  IR := IR/PixPerColor;
  IG := IG/PixPerColor;
  IB := IB/PixPerColor;
  IColor := 1;
  for I := ARect.Left to ARect.Right do
   begin
    if ((I - ARect.Left) mod PixPerColor = 0) and (I <> ARect.Left) then
     begin
      R := GetRValue(Colors[IColor]);
      G := GetGValue(Colors[IColor]);
      B := GetBValue(Colors[IColor]);
      IR := GetRValue(Colors[IColor + 1]) - GetRValue(Colors[IColor]);
      IG := GetGValue(Colors[IColor + 1]) - GetGValue(Colors[IColor]);
      IB := GetBValue(Colors[IColor + 1]) - GetBValue(Colors[IColor]);
      IR := IR/PixPerColor;
      IG := IG/PixPerColor;
      IB := IB/PixPerColor;
      Inc(IColor);
     end;
    Canvas.Pen.Color := RGB(Trunc(R), Trunc(G), Trunc(B));
    Canvas.MoveTo(I, ARect.Top);
    Canvas.LineTo(I, ARect.Bottom);
    R := R + IR;
    G := G + IG;
    B := B + IB;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DrawGradient(Form1.Image1.Canvas, Rect(0, 0, Form1.ClientWidth, Form1.ClientHeight), [clTeal, clWhite]);
  Application.ProcessMessages;
end;



GOSTEI 0
Visualdesigner

Visualdesigner

24/10/2006

Gostei do efeito gradiente. Tem como colocar o efeito de cima para baixo ao invés de esquerda para direita?


GOSTEI 0
Paulocesar1301

Paulocesar1301

24/10/2006

:oops: infelizmente minha ignorância delphiana aliada ao pouco tempo extra não me permitiram alterar essa função... apesar de ter pensado nisso também :oops:


GOSTEI 0
Visualdesigner

Visualdesigner

24/10/2006

Encontrei um componente Free na net que pode te ajudar também. Procure por ExpressForumLibrary

http://www.devexpress.com/


GOSTEI 0
Paulocesar1301

Paulocesar1301

24/10/2006

vou usar em grande parte do tempo o TurboExplorer... estou procurando não usar componentes... mas vlw assim mesmo


GOSTEI 0
Titanius

Titanius

24/10/2006

Gostei do efeito gradiente. Tem como colocar o efeito de cima para baixo ao invés de esquerda para direita?


Olá, creio que mudando esta parte do código

    Canvas.MoveTo(I, ARect.Top);
    Canvas.LineTo(I, ARect.Bottom); 


para

    Canvas.MoveTo(I, ARect.Left);
    Canvas.LineTo(I, ARect.Right); 



Ainda [b:4d88d64cc6]não[/b:4d88d64cc6] testei, mas pela lógica deve ser isto...


GOSTEI 0
Paulocesar1301

Paulocesar1301

24/10/2006

a lógica da informática é que ela não tem lógica :lol:
:( já tinha testado isso e não rodou... ficava exatamente igual :(


GOSTEI 0
POSTAR