AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Systemimagelist "zeichnen"

Ein Thema von Mattze · begonnen am 3. Jan 2014 · letzter Beitrag vom 3. Jan 2014
Antwort Antwort
Mattze

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

Systemimagelist "zeichnen"

  Alt 3. Jan 2014, 09:00
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Systemimagelist "zeichnen"

  Alt 3. Jan 2014, 09:11
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Mattze

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

AW: Systemimagelist "zeichnen"

  Alt 3. Jan 2014, 09: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
Mattze

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

AW: Systemimagelist "zeichnen"

  Alt 3. Jan 2014, 10:23
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz