我要实现win2000登陆时的彩色滚动条。
一些高手应该知道这个问题,以前也有人
问过。如果你不知道彩色滚动条在哪里我告诉
大家就是win2000进入登录界面,输入用户名和密
码按回车后看到的那个窗口,显示正在加载。
我就是要实现显示在该窗口的那个滚动条,有点像win95的登陆图any ideasthanks in advance:)

解决方案 »

  1.   

    用ProgressBar
    改变ProgressBar的颜色usesCommCtrl;procedure TForm1.Button1Click(Sender: TObject);begin// Set the Background color to tealProgressbar1.Brush.Color := clTeal;// Set bar color to yellowSendMessage(ProgressBar1.Handle, PBM_SETBARCOLOR, 0, clYellow);end;WinXP风格进度条const{$EXTERNALSYM PBS_MARQUEE}PBS_MARQUEE = 08; procedure TForm1.FormCreate(Sender: TObject);beginSetWindowLong(ProgressBar1.Handle, GWL_STYLE,GetWindowLong(ProgressBar1.Handle, GWL_STYLE) or PBS_MARQUEE);end;//------------------------------------------------------------------------------procedure TForm1.Button1Click(Sender: TObject);vari: Integer;beginfor i := 0 to 30 dobeginSleep(100);ProgressBar1.StepIt;Application.ProcessMessages;end;end;
     
      

  2.   

    唉,说了一千遍了,我估计就会有人误解我要的不是这样的
    是那种彩色渐变的。楼上的朋友麻烦你看一下win2000登陆加载时候的彩色滚动条。
      

  3.   

    有很多朋友告诉我用gif,我差点吐血。
    那个流光软件的彩色条就是自己用算法实现的
      

  4.   

    以前有人问过也有人答过,我记不太清楚,你可以问问pazee,我印象中他是知道这个问题的,好像是弄个调色板,然后做什么位操作的
      

  5.   

    怎么想起来找我?
    我不知道你说的是哪个条。但是win95/98登录时下面那个进度条我的确修改过。
    也非常简单,
    要做到这个效果,下面那个条出现的颜色保证没在条之外的地方出现,否则和他相同颜色都会闪。这个图片和别的图片唯一不同的就是调色板。
    我忘了哪个字节,有一个自己定义了变色的颜色索引号和数量。系统就会不停的修改这个调色板,让调色板的各个数值循环。这样,显示出来的效果就是下面的条不停的变色。网上曾经有好多这类的工具。win2000如果先这么做我想你可能需要自己修改调色板了。
      

  6.   

    呵老枪说的
    win2000登陆的时候有一个窗口中部的地主有一个
    激变(白、蓝)的滚动条。我不是要修改而是要做这
    样的效果如果是win2000系统,大家按一下CTRL+ALT+DEL
    键,最顶部是win2000的图标,在它下面就有一白、蓝滚动条
      

  7.   

    在2003年03-24那天,这是你回答的原话。
    ------------------------------------------------------------------
    那个彩条最早用在95的启动logo里面,
    我很早以前做过一个类似的东西,现在都忘了,大致说一下,
    自己创建一个带调色板的DC,
    装入图片,设置调色板,
    比如那各色条是16色的,那么就在调色板里面把这16色,循环移动,
    比如开始是 12345678 ,下一次变成 23456781,在下一次变成34567812……
    在调色板中移动的颜色不是全部,只是你需要的那一部分,其余不不变,不然满屏幕都跟着变色了。由于调色板的变化,图片上对应调色板的颜色编号,就对跟着变化,感觉就像那个彩条在闪烁,我一看看过一本BC OWL的书,里面的例子就是做一些星星,模拟它闪烁。这只是个思路,你自己找找相关的资料吧。
      

  8.   

    因为我的组件是snpack包中的,所以我不能公开代码。
    原理都说了,就看你的算法如何写了。再说了我的组件包才100RMB,又不贵。你除非要Free的,你只能是自己写了。
      

  9.   

    你非要Free的,只能是自己写了。
      

  10.   

    to test7979
    我对delphi不熟,是不是用image控件,先设置
    一种颜色,然后在对应的位置加亮对吗?
      

  11.   

    我不懂Delphi,用什么控件啊直接向窗口上面画线就是了,先整理出一个渐变的颜色数组Color [] color = {浅色 深色}然后写个绘制函数DrawPane(起始色位置)
    for(int i = 0; i < 宽度; i++)
    画直线(i,0,i,高度, color[起始色位置+i Mod color.Length])
    然后不断调用
    DrawPane,只要改变起始色位置,动画就出来了吧
      

  12.   

    用 xrw123() 的方法就可以了。
      

  13.   

    "用gif"的主意不错!
    如果用GIF可以满足要求的话,为何不用呢?
    不就是效率低一点吗? 但你计算机或者客户的计算机在乎那点效率吗?
    注:如果在很多地方都需要该功能,且图片不一样,或者没有现成的GIF,有不会做或者找不到或者不愿意做的话,
        如果非要程序来实现,其他办法不可以接受的情况下 
        还是用程序来实现吧。
      

  14.   

    用canvas属性,自己画就是了
    颜色控制可以用数组也可以锻炼自己对基本 DC 设备的编程
      

  15.   

    其实不难...
    自己用一个image画一下就行了..
    我就画过....
      

  16.   

    我写了一个,但不会变化的,要变化得加个timerprocedure TForm1.Button1Click(Sender: TObject);
    var
      i,j:Integer;
      r:TRect;
    begin
      with Image1 do
      begin
        j:=Image1.Height;
        for i:=0 to 65535 do
        begin
          Canvas.Brush.Color:=i;
          r:=Rect(i*2,0,(i+1)*2,j);
          Canvas.FillRect(r);
        end;
      end;
    end;
      

  17.   

    用API函数实现Windows颜色渐变 --------------------------------------------------------------------------------
     
    http://www.sina.com.cn 2001/12/19 17:31 赛迪网-中国计算机报 
     
      文/方建文  用API函数实现颜色渐变  方建文  颜色渐变在Windows应用程序中应用广泛,最典型的是窗口标体的背景色及Windows安装窗口的背景色等。本文就这种颜色渐变的实现,提供API函数的实现方法。 
      在Windows 98或Windows NT 5.0及更高版本中提供了一个新的API函数来实现渐变颜色的填充,这个函数就是GradientFill。这个函数不仅能实现方形的填充,还能实现三角形的填充,所以这种方法更有效率。API声明如下:  Public Declare Function GradientFillTriangle Lib "msimg32" Alias "GradientFill" (ByVal hDC As Long, pVertex As TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_TRIANGLE, ByVal dwNumMesh As Long, ByVal dwMode As Long) As Long  Public Declare Function GradientFillRect Lib "msimg32" Alias "GradientFill" (ByVal hDC As Long, pVertex As TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_RECT, ByVal dwNumMesh As Long, ByVal dwMode As Long) As Long  其中GradientFillTriangle用于三角形的填充,GradientFillRect用于矩形填充。hDC是表示要填充对象的窗口句柄;pVertex常常是一个数组,用来存放各顶点的位置及颜色信息,顶点在TRIVERTEX中定义;dwNumVertex表示顶点的个数;pMesh也常常是一个数组结构,表示组成图形的各顶点顺序,表示一个矩形用两个顶点,三角形要用三个顶点;dwNumMesh表示矩形或三角形的个数;dwMode表示填充的模式:水平填充,垂直填充,三角形填充。以下是示例程序:  在这个示例里您可以任意选择两种颜色,然后用两种颜色对一个Picture1进行渐变的填充。  包含的部件  Form1—AutoRedraw:True  Picture1---Align:1—Align Top  Frame1----Caption:渐变模式  Option1—Caption:由上到下  Value:True  Option2---Caption:由左到右  Label1(0)---Caption:颜色1  Command1(0)—Style:1—Graphical  Label1(1)---Caption:颜色2  Command1(1)—Style:1—Graphical  CommonDialog1--(Microsoft CommonDialog Control6.0)用于选择颜色  Command2----Caption:填充  代码模块Module1中的代码  Option Explicit  Public Const GRADIENT_FILL_RECT_H = &&H0  Public Const GRADIENT_FILL_RECT_V = &&H1  Public Const GRADIENT_FILL_TRIANGLE = &&H2‘以上为三种填充模式  Public Type GRADIENT_TRIANGLE   Vertex1 As Long  Vertex2 As Long  Vertex3 As Long  End Type  Public Type GRADIENT_RECT  UpperLeft As Long  LowerRight As Long  End Type  Public Type TRIVERTEX‘顶点类型  x As Long  y As Long  Red As Integer  Green As Integer  Blue As Integer  Alpha As Integer  End Type  Public Declare Function GradientFillTriangle Lib "msimg32" Alias "GradientFill" (ByVal hDC As Long, pVertex As TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_TRIANGLE, ByVal dwNumMesh As Long, ByVal dwMode As Long) As Long  Public Declare Function GradientFillRect Lib "msimg32" Alias "GradientFill" (ByVal hDC As Long, pVertex As TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_RECT, ByVal dwNumMesh As Long, ByVal dwMode As Long) As Long  Public Function UIntToInt(UInt As Long) As Integer‘类型转换  If UInt<&&H7FFF Then  UIntToInt = CInt(UInt)  Else  UIntToInt = CInt(UInt - &&H10000)  End If  End Function  Public Function Color16(Clr As Byte) As Integer   Color16 = UIntToInt(Clr&&H100&&)  End Function  窗体模块代码  Private Sub Command1_Click(Index As Integer)  CommonDialog1.CancelError = True  On Error GoTo ErrHandler  CommonDialog1.Flags = cdlCCRGBInit  CommonDialog1.ShowColor‘打开颜色选择对话框  Command1(Index).BackColor=CommonDialog1.Color  Exit Sub  ErrHandler:  End Sub  Private Sub Command2_Click()  Dim rect(0 To 1) As TRIVERTEX  Dim prect As GRADIENT_RECT  With rect(0)  .x = 0  .y = 0  RGBToColor16 Command1(0).BackColor,   .Red, .Green, .Blue  End With  With rect(1)  .x = Picture1.ScaleWidth  .y = Picture1.ScaleHeight  RGBToColor16 Command1(1).BackColor,   .Red, .Green, .Blue  End With  prect.UpperLeft = 0  prect.LowerRight = 1  If Option1.Value Then  GradientFillRect Picture1.hDC, rect(0), 2, prect, 1, GRADIENT_FILL_RECT_V‘竖直填充  Else  GradientFillRect Picture1.hDC, rect(0), 2, prect, 1, GRADIENT_FILL_RECT_H‘水平填充  End If  End Sub  Private Function RGBToColor16(RGBColor As Long, ColorRed As Integer, ColorGreen As Integer, ColorBlue As Integer) As Integer  '类型转换  ColorRed = Color16(RGBColor Mod &&H100)  ColorGreen = Color16(RGBColor \ &&H100 Mod &&H100)  ColorBlue = Color16((RGBColor \ &&H10000) Mod &&H100)  End Function 
     
      

  18.   

    哈哈,做出来了,好象还可以。
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j,m,n:integer;
      h:integer;
      c:integer;
      r:TRect;
    begin
      h:=Image1.Height;
      j:=0;
      Image1.Width:=255*2;//----为了好看
      for m:=1 to  3000 do
      begin
        for i:=0 to 255 do
        begin
          c:=i+j;
          if c>255 then c:=255*2-(i+j);
          Image1.Canvas.Brush.Color:=RGB(0,c,255);
          r:=Rect(i*2,0,(i+1)*2,h);
          Image1.Canvas.FillRect(r);
        end;
        if (j>=0) and (j<255) then n:=1 else j:=0;
        inc(j,n);
        Image1.Repaint;
       end;end;