Einzelnen Beitrag anzeigen

Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#3

AW: Systemimagelist "zeichnen"

  Alt 3. Jan 2014, 10:49
Hallo,

der Fehler unter 1. liegt garantiert nicht am Quellcode. Aber, wenn Du meinst:
Delphi-Quellcode:
procedure TSysteminformationen.SGSILDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var ic: TIcon;
    x,y,x1,y1: Integer;
    h: HIcon;
   bm: TBitmap;
begin
  SGSIL.Canvas.FillRect(Rect);
  x:=rect.Left+(rect.Right-rect.Left) div 2;
  y:=rect.Top+(rect.Bottom-rect.top) div 2;
  case klein of
    0: begin
         dec(x,16);
         dec(y,16);
       end;
    1: begin
         dec(x,8);
         dec(y,8);
       end;
    2: begin
         x:=rect.left+3;
         y:=rect.top+3;
       end;
    4: begin
         x:=rect.left;
         y:=rect.top;
       end;
  end;
  ic:=ticon.create;
// bm:=TBitmap.Create;
  try
    Fii.geticon(16*arow+acol,0,h);
// sbsil.Panels[1].text:=inttostr(h)+' '+inttostr(16*arow+acol);
    ic.handle:=h; //,dsNormal,itImage);
{          fii.GetIconSize(x1,y1);
          bm.Height:=y1;
          bm.Width:=x1;
           bm.Canvas.Draw(0,0,ic);}

    SGSIL.Canvas.Draw(x, y,ic);
  finally
    ic.Free;
// bm.free
  end;
end;
(Ich habe es auch mal mit einer Bitmap probiert. Die Konvertierung ist ausgegraut.)
var fii: IImagelist;
und
Delphi-Quellcode:
procedure TSysteminformationen.StartSearch;
VAR
  R, C: Integer;
BEGIN
  sgsil.Visible:=false;
  SBtnSISpeichern.Enabled:=false;
  RGSIL.enabled:=false;
  (* Löschen *)
  WITH SGSIL DO BEGIN
    FOR C := 0 TO ColCount - 1 DO BEGIN
       FOR R := 0 TO RowCount - 1 DO BEGIN
         Cells[C, R] := '';
         WITH Objects[C, R] AS TIcon DO begin
           Free;
           objects[c,r]:=nil;
         end;
       END;
    END;
    Incr := 100;
    RowCount := Incr;
    Col := 0;
    CurIcon := 0;
  END; (* WITH *)

  if not Succeeded(SHGetImageList(klein, IImageList, Fii)) then begin
    fii:=nil;
    exit;
  end;
  sgsil.Visible:=true;
  ActiveControl := SGSIL;
  fii.GetImageCount(R);
  SBSIL.Panels[2].Text :='Gesamt: ' + IntToStr(R);
  WITH SGSIL DO BEGIN
    IF R MOD ColCount = 0 THEN
      RowCount := R DIV ColCount
    ELSE
      RowCount := R DIV ColCount + 1;
    Row := 0;
    Col := 0;
  END;
  SBtnSISpeichern.Enabled:=true;
  RGSIL.enabled:=true;
end;
kommen noch dazu.

Vielleicht seht ihr da mehr.

Und was ist mit Problem Nummer 2?

Gruß
Mattze
  Mit Zitat antworten Zitat