AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi weissen Hintergrund eines Icons entfernen
Thema durchsuchen
Ansicht
Themen-Optionen

weissen Hintergrund eines Icons entfernen

Ein Thema von Helmi · begonnen am 27. Apr 2008 · letzter Beitrag vom 29. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

weissen Hintergrund eines Icons entfernen

  Alt 27. Apr 2008, 16:56
Hallo,

hier hab ich einen Code bekommen zum Auslesen des Papierkorb-Icons.

Soweit so gut.

Da ich das Icon aber für die Glyph-Property eines BitBtns brauche, konvertier ich es in ein Bitmap um.

Der ganze Code schaut so aus:
Delphi-Quellcode:
procedure Papierkorb_Icon_laden(Button: TBitBtn);
var
   piidlist : PItemIDList;
   FileInfo : SHFILEINFO;
   Bitmap : TBitmap;
   Icon : TIcon;

begin
  //Bitmap erzeugen
  Bitmap := TBitmap.Create;

  //Icon erzeugen
  Icon := TIcon.Create;

  try
    //Wir holen uns den Pfad zum Papierkorb
    SHGetSpecialFolderLocation(Button.Handle, CSIDL_BITBUCKET, piidlist);

    //Holen uns Infos zum Papierkorb, hier das Icon
    SHGetFileInfo(PChar(piidlist), 0, FileInfo, sizeof(FileInfo), SHGFI_ICON Or SHGFI_PIDL);

    //
    Icon.Handle := FileInfo.hIcon;

    with Bitmap do
      begin
        Height := Icon.Height;
        Width := Icon.Width;
        TransparentColor := clWhite;
        Transparent := true;
        Canvas.Draw(0, 0, Icon);
      end;

    //Weisen der Form dieses Icon zu
    Button.Glyph.Assign(Bitmap);
  finally
    //Bitmap löschen und freigeben
    FreeAndNil(Bitmap);

    //Icon löschen und freigeben
    FreeAndNil(Icon);
  end;
end;
Es funktioniert eigentlich ganz gut. Nur das Icon hat einen weissen Hintergrund.
Leider bekomm ich den nicht weg. Ich hätte gerne das reine Icon.

Dieser Teil:
Delphi-Quellcode:
    with Bitmap do
      begin
        TransparentColor := clWhite;
        Transparent := true;
      end;
brachte leider auch keinen Erfolg.

Wie könnt ich den Hintergrund weg/transparent bekommen?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: weissen Hintergrund eines Icons entfernen

  Alt 28. Apr 2008, 16:19
imho übernimmt TSpeedbutton.glyph (sowie viele andere VCL-Komponenten) nicht die Transparent-Einstelung des TBtmaps sondern die farbe an Position 0,0...also das 1. pixel ganz oben links in der ecke.
wüsste aber jetzt nicht, ob man das irgendwie setzen kann, falls man das erste pixel benötigt und eine andere Fabe transparent haben will

HTH Frank
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

Re: weissen Hintergrund eines Icons entfernen

  Alt 28. Apr 2008, 17:34
Hallo,

es handelt sich aber nicht um einen Speedbutton sondern um einen BitBtn
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: weissen Hintergrund eines Icons entfernen

  Alt 28. Apr 2008, 21:41
hab mir mal meine quellen von TBitBn angeschaut...dabei ist mir aufgefallen, dass das Glyphbitmap vor dem Zeichnen nach TButtonGlyph gecasted wird (warum auch immer).
auffällig ist, dass in dessen constructor die transparentcolor (clOlive) gesetzt wird, jedoch nirgends anders geändert wird (auch nicht im OnChanged).

mein folgender Test mit deinem Code hat den Papierkorb transparent gemalt...nicht schön, aber hab keine Möglichkeit mit weniger code gefunden.

Delphi-Quellcode:
  with Bitmap do
  begin
    Height := Icon.Height;
    Width := Icon.Width;
    canvas.Brush.Color:=clOlive; //neue Transparentfarbe an TButtonGlyph anpassen
    canvas.FillRect(rect(0,0,width,height));
    TransparentColor := canvas.Brush.Color;
    Transparent := true;
    Canvas.Draw(0, 0, Icon);
  end;
bevor es noch jemand probiert...folgendes funtioniert nicht:
Delphi-Quellcode:
  Button.Glyph.Assign(Bitmap);
  button.Glyph.TransparentColor:=button.Glyph.Canvas.Pixels[0,0];
  button.Glyph.Transparent:=true;
ist übrigends bei TSpeedbutton der gleiche Mist...

HTH Frank
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#5

Re: weissen Hintergrund eines Icons entfernen

  Alt 29. Apr 2008, 15:54
Hallo,

danke für deine Hilfe.

Der weisse Hintergrund war dann zwar weg, aber leider war dann das Symbol sehr verzehrt.
Da lass ich lieber den weissen Hintergrund.

Trotzdem Danke!
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: weissen Hintergrund eines Icons entfernen

  Alt 29. Apr 2008, 16:27
Zitat von Helmi:
Hallo,

danke für deine Hilfe.

Der weisse Hintergrund war dann zwar weg, aber leider war dann das Symbol sehr verzehrt.
Da lass ich lieber den weissen Hintergrund.

Trotzdem Danke!
Sorge doch erstmal dafür das dein Symbol auch eine saubere Hintergrundfarbe hat
und nicht noch pixel anderer Farben (Brush) enthält.

Das Format sollte indiziert sein um solche Probleme zu vermeiden.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#7

Re: weissen Hintergrund eines Icons entfernen

  Alt 29. Apr 2008, 16:32
wie meinst das?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: weissen Hintergrund eines Icons entfernen

  Alt 29. Apr 2008, 17:11
Zitat von Helmi:
wie meinst das?
Wenn du das Icon zu einem Bitmap konvertierst bekommt dieses eine andere
Bittiefe .. wenn vorher 256 Farben dann sind es nachher 32Bit.

Das führt dazu das die Hintergrundfarbe des Icon verändert wird.
Es bekommt also nicht nur weiß sondern mehrere untertöne von dieser Farbe.

Das hat zur folge wenn du es transparent darstellen willst es unscharf bzw.. verzehrt dargestellt wird.

Du mußt das Bitmap dann halt indizieren.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#9

Re: weissen Hintergrund eines Icons entfernen

  Alt 29. Apr 2008, 17:14
und wie macht man das?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

Re: weissen Hintergrund eines Icons entfernen

  Alt 29. Apr 2008, 17:35
Zitat von Helmi:
und wie macht man das?
Du hast mehrere möglichkeiten bzw.. programme dafür zur verfügung.
PSP, Photoshop oder was auch immer.

Ich an deiner stelle würde das icon aus explorer.exe extrahieren
dann als png abspeichern, ein image auf die Form legen und das Bild importieren.

dann kannst du dir das einbinden und konvertieren als bitmap sparen.
Solltest du mehrere icons benötigen dann legst du dir halt ein Imagestrip an.

gruss
  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 01:01 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