![]() |
Systemimagelist "zeichnen"
Hallo,
ich habe auch mal wieder zwei Probleme: 1. Wenn ich die Icons der Systemimagelist (über IImageList) in ein Stringrid zeichne (Drawcell), zeichnet er zuerst nur 71 Icons. Erst, wenn ich ihn das noch mal machen lasse, zeichnet er alles. Warum? Und wie kann man ihn gleich alles zeichnen lassen? 2. Einige Icons werden als schwarzes Quadrat dargestellt. Das scheint damit zusammen zu hängen, dass sie nur in einer größeren Auflösung vorhanden sind. Da ich aber kein schwarzer Typ bin, mag ich das nicht. Ich habe schon alles mögliche versucht, da eine andere Farbe zu kriegen. Ich schaffe es nicht. Kann man das überhaupt? Noch besser wäre es, wenn man irgendworan merken könnte, dass da nix ist, nur schwarz. Dann könnte man etwas eigenes zeichnen... Gruß und noch ein paar schöne Resttage im neuen Jahr! Mattze |
AW: Systemimagelist "zeichnen"
Der Fehler wird wohl an deinem Quellcode liegen den du verwendest.
Da du ihnen uns nicht zeigst müssen wir hier jetzt eine Raterunde starten. |
AW: Systemimagelist "zeichnen"
Hallo,
der Fehler unter 1. liegt garantiert nicht am Quellcode. Aber, wenn Du meinst:
Delphi-Quellcode:
(Ich habe es auch mal mit einer Bitmap probiert. Die Konvertierung ist ausgegraut.)
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; var fii: IImagelist; und
Delphi-Quellcode:
kommen noch dazu.
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; Vielleicht seht ihr da mehr. Und was ist mit Problem Nummer 2? Gruß Mattze |
AW: Systemimagelist "zeichnen"
Hallo,
noch einen Hinweis zu 1.: Unter Win 8.1 funktioniert es richtig und völlig problemlos. Der "Fehler" tritt nur unter Win 7 auf und da immer beim ersten befüllen des Stringgrids. Danach nicht mehr. Der Code ist jedesmal gleich! 2. tritt bei Win 8.1 übrigens auch nicht auf, was aber nichts heißen will. Da gibt es eben zufällig auch die Ikonen in einer "kleineren" Auflösung. Gruß Mattze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz