AGB  ·  Datenschutz  ·  Impressum  







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

Icons ohne Schwarzen Rand

Ein Thema von neolithos · begonnen am 16. Mär 2004 · letzter Beitrag vom 17. Mär 2004
Antwort Antwort
Seite 1 von 2  1 2      
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#1

Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 21:05
Hat irgentwer schon herausbekommen wie man die Windows-Icons ohne diesen Schwarzen schatten zeichnet?
Miniaturansicht angehängter Grafiken
bild1_164.gif  
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 21:11
Hi. Das sind glaube ich Schatten, oder? Öffne die Icons mit Photoshop oder einem Icon Editor und lösche das schwarze raus. sollte funktionieren.

Man liest sich, Stanlay
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#3

Re: Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 21:15
Ich hol mir aber die Icons per

ExtractFileIcon

da kann man leider nur schlecht drinnerrum löschen.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#4

Re: Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 21:27
Erkenntnis:

DrawIconEx stellt das Symbol ohne Probleme dar.

Nur mit ImageList_Draw habert es noch! Weis jemand was?
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#5

Re: Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 21:59
Zitat von neolithos:
Nur mit ImageList_Draw habert es noch! Weis jemand was?
Setz die Hintergrundfarbe der ImageList auf die Farbe des ListView.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  IconCount: Integer;
  IconIndex: Integer;
  LargeIcon: HICON;
  IconObject: TIcon;
  ListItem: TListItem;
begin
  ListView1.Clear();
  ImageList1.Clear();
  ImageList1.BkColor := ListView1.Color; // <- wichtig :)
  IconCount := ExtractIconEx(shell32, -1, HICON(nil^), HICON(nil^), 0);
  if IconCount > 0 then
  begin
    ImageList1.Width := GetSystemMetrics(SM_CXICON);
    ImageList1.Height := GetSystemMetrics(SM_CYICON);
    for IconIndex := 0 to IconCount - 1 do
    begin
      LargeIcon := 0;
      if (ExtractIconEx(shell32, IconIndex, LargeIcon, HICON(nil^), 1) > 0) and
        (LargeIcon <> 0) then
      try
        IconObject := TIcon.Create();
        try
          IconObject.Handle := LargeIcon;
          ImageList1.AddIcon(IconObject);
          ListItem := ListView1.Items.Add();
          ListItem.Caption := '#' + IntToStr(IconIndex);
          ListItem.ImageIndex := IconIndex;
        finally
          IconObject.Free();
        end;
      finally
        DestroyIcon(LargeIcon);
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#6

Re: Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 22:21
Danke!

BkColor ->

Daraus schließe ich das in der ImageList_Draw nur die Bitmaps gezeichnet werden. Und die ImageList eigentlich gar nicht mit Icons umgehen kann.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#7

Re: Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 22:31
Da ich auch einmal auf einen "mehrfarbigen" Hintergrund zeichnet...

Delphi-Quellcode:
var hIco : Cardinal;
    ptImage : TPoint;

...

hIco := ImageList_GetIcon(fLinks.fImgs.Handle, iIndex, ILD_NORMAL);
DrawIconEx(hDC, ptImage.x, ptImage.y, hIco, 16, 16, 0, 0, DI_NORMAL);
DestroyIcon(hIco);
***

Suchbegriff zum Finden: Using 32-Bit Anti-Aliased Icons
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#8

Re: Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 22:53
Zitat von neolithos:
Und die ImageList eigentlich gar nicht mit Icons umgehen kann.
Das schon, nur bin ich nicht sicher, ob man der TImageList (sieht nicht so aus als ob Du sie verwendest, aber davon bin ich ausgegangen ) ILC_COLOR32 beibringen kann...

[edit]Ein Hack für die VCL-ImageList könnte so aussehen
Delphi-Quellcode:
    with ImageList1 do
    begin
      Clear();
      ImageList := ImageList_Create(Width, Height, ILC_COLOR32 or ILC_MASK,
        0, AllocBy);
      if ImageList <> 0 then
      begin
        ImageList_SetBkColor(ImageList, BkColor);
        Masked := True;
        Handle := ImageList;
      end;
    end;
[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Thunderchild
Thunderchild

Registriert seit: 12. Nov 2003
Ort: Nohra
139 Beiträge
 
Delphi 7 Personal
 
#9

Re: Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 23:13
Zitat von neolithos:
Hat irgentwer schon herausbekommen wie man die Windows-Icons ohne diesen Schwarzen schatten zeichnet?
Das kommt am wahrscheinlichsten daher, daß das XP-Icons mit Alpha-Kanal sind, aber Win2k damit nicht umgehen kann.
Das letzte Schöne, das in C geschrieben wurde, war Schuberts 9. Sinfonie.
Meine Softwareseite (Link aktualisiert am 13.12.2006).
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#10

Re: Icons ohne Schwarzen Rand

  Alt 16. Mär 2004, 23:36
@Thunderchild:

Das ist mir klar! Und das was bis jetzt an Code geliefert wurde läuft auch ohne weiteres unter Win2k.

@NicoDE:

Ich meinte mit diesem Satz eigentlich nur, das intern in der ImageList von Windows alles auf zwei Bitmaps zurückgeführt wird (Maske und Image). Daher meine Vermutung das ImageList_Draw die zwei Bilder nur kombiniert, aber den Alpha-Kanel (Byte 4) völlig außer acht lässt.

Wird eine Hintergrundfarbe gesetzt (ich habe es getestet), ist dies nur eine Grücke. Da das Icon bei ImageList_AddIcon in die Maske und Image reingezeichnet wird (via DrawIcon o.ä.). Hat das Image nun die Hintergrundfarbe z.B. weiß, so wird das Symbol bei ImageList_Draw später korrekt dargestellt, falls ein Weißer Hintergrund darunter liegt.

Da ich aber bei Selection einen Farbverlauf von Blau zu weiß dem Symbol unterlege, würde es statt einem Schwarzen einen Weißen rand geben. -> Daher verwende ich in diesem Fall DrawIcon o.ä.

Grund: Wird ein Icon erstellt zu wird die Maske mit dem Image wieder als Icon zurückgegeben. Da vorher ILC_COLOR32 eingestellt wurde, wird der Aplha-Kanal korrekt mit kopiert.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:31 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