如何判断两个speedbutton是不是用的一个glyph?

解决方案 »

  1.   

    不懂你的意思,“用的一个glyph”是什么意思?同一个?还是相同的?
    你是怎么调用的图片?
    在设计期直接调用的?
    还是在运行期通过程序代码调用的?什么都没说清楚,让人怎么回答你
      

  2.   

    speedbutton1.glyph := speedbutton2.glyph反过来我怎么判断两个控件的glyph,我使用
    if speedbutton1.glyph = speedbutton2.glyph then
      ………………好像不能这样判断
      

  3.   

    speedbutton1.glyph := speedbutton2.glyph这个语句执行以后,会给speedbutton1拷贝一份图片的,所以不能这样比较。
      

  4.   

    function IsHomology(bmp1, bmp2: TbitMap): boolean;
    type
      PRGBTripleArray = ^TRGBTripleArray;
      TRGBTripleArray = array[0..32767] of TRGBTriple;
    var
      x, y: integer;
      p0, p1: PRGBTripleArray;
      sBmp, dBmp: TBitMap;
    begin
      Result := False;  if (bmp1.Height <> bmp2.Height) or
        (bmp1.Width <> bmp2.Width) then
      begin
        Exit;
      end;  sBmp := TBitmap.Create;
      dBmp := TBitmap.Create;
      try
        sBmp.Assign(bmp1);
        dBmp.Assign(bmp2);
        sBmp.PixelFormat := pf24bit;
        dBmp.PixelFormat := pf24bit;
        for y := 0 to sBmp.Height - 1 do
        begin
          p0 := sBmp.ScanLine[y];
          p1 := dBmp.ScanLine[y];
          for x := 0 to sBmp.Width - 1 do
            if (p0[x].rgbtBlue = p1[x].rgbtBlue) and
              (p0[x].rgbtGreen = p1[x].rgbtGreen) and
              (p0[x].rgbtRed = p1[x].rgbtRed) then
            begin
              Result := True;
            end
            else
            begin
              Break;
            end;
        end;
      finally
        sBmp.Free;
        dBmp.Free;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      if IsHomology(SpeedButton1.Glyph, SpeedButton2.Glyph) then
        showmessage('相同');
    end;
      

  5.   

    不行,我放了三个speedbutton,前两个是一样的图标,第三个不一样,但最后显示的结果都是一样的结果。
      

  6.   

    不好意思,少了一句:
    function IsHomology(bmp1, bmp2: TbitMap): boolean;
    type
      PRGBTripleArray = ^TRGBTripleArray;
      TRGBTripleArray = array[0..32767] of TRGBTriple;
    var
      x, y: integer;
      p0, p1: PRGBTripleArray;
      sBmp, dBmp: TBitMap;
    begin
      Result := False;  if (bmp1.Height <> bmp2.Height) or
        (bmp1.Width <> bmp2.Width) then
      begin
        Exit;
      end;  sBmp := TBitmap.Create;
      dBmp := TBitmap.Create;
      try
        sBmp.Assign(bmp1);
        dBmp.Assign(bmp2);
        sBmp.PixelFormat := pf24bit;
        dBmp.PixelFormat := pf24bit;
        for y := 0 to sBmp.Height - 1 do
        begin
          p0 := sBmp.ScanLine[y];
          p1 := dBmp.ScanLine[y];
          for x := 0 to sBmp.Width - 1 do
            if (p0[x].rgbtBlue = p1[x].rgbtBlue) and
              (p0[x].rgbtGreen = p1[x].rgbtGreen) and
              (p0[x].rgbtRed = p1[x].rgbtRed) then
            begin
              Result := True;
            end
            else
            begin
              Result:=False; /////////////这里少了一句
              Break;
            end;
        end;
      finally
        sBmp.Free;
        dBmp.Free;
      end;
    end;
      

  7.   

    取巧的方法:判断两个图片的路径是否相同
      if(SpeedButton1.Glyph.GetNamePath = SpeedButton2.Glyph.GetNamePath) then
        ShowMessage('Same');
      

  8.   

    如果路径不同,但是内容相同呢?还应该用fei19790920(饭桶的马甲(抵制日货)) ( ) 的方法,直接看
      

  9.   

    sorry 上面的方法没用
    SpeedButton1.Glyph.GetNamePath取不出来值
      

  10.   

    上面的方法效率太低用Bitmap.ScanLine[Bitmap.Height-1]取位图数据首地址;用CompareMem做内存数据比较