Registriert seit: 6. Jan 2005
664 Beiträge
|
AW: Systemimagelist "zeichnen"
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
|
|
Zitat
|