Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Icon pixelfrei (https://www.delphipraxis.net/107796-icon-pixelfrei.html)

Medium 4. Feb 2008 08:49

Re: Icon pixelfrei
 
Zitat:

Zitat von turboPASCAL
Alphakanak

Sorry fürs totale OT, aber ich kann nicht mehr :lol:
Ist das sowas wie der türkische Vorarbeiter aufm Bau?

(Hab nix gegen Imigranten, fands nur spaßig - um evtl. Missverständnissen gleich vorzubeugen!)

Nils_13 4. Feb 2008 09:13

Re: Icon pixelfrei
 
:lol: :lol:

Ist mir gar nicht aufgefallen.

Zum Thema:
Hat noch jemand irgendwelche Ideen ?

Sunlight7 5. Feb 2008 05:35

Re: Icon pixelfrei
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!

Also ich hab mir echt Mühe gegeben, aber mir ist der Effekt mit den weißen Randpixeln gar nicht gelungen :mrgreen:

Beim Zeichnen von Icons mach ich generell einen Bogen um VCL, aber ich habs mal mit versucht^^
Das Ergebnis meiner Spielerei, hoffe es is was brauchbares bei.

MFG Sun

Delphi-Quellcode:
function IconToBitmap(const Icon:HIcon; const Color:TColor; BMP:TBitmap):Boolean;
   var II:TIconInfo;
begin
   Result:=False;
   If BMP=nil then Exit;
   If not GetIconInfo(Icon, II) then Exit;

   try
      BMP.Handle:=II.hbmColor;
      BMP.Canvas.Brush.Color:=Color;
      BMP.PixelFormat:=pf24bit;

      Result:=DrawIconEx(BMP.Canvas.Handle, 0, 0, Icon, BMP.Width, BMP.Height, 0, BMP.Canvas.Brush.Handle, DI_NORMAL);
   except
   end;
end;

procedure TForm1.FormPaint(Sender: TObject);
   var MyIconH:HIcon;
       MyIcon:TIcon;
       MyBMP:TBitmap;
begin
   MyIconH:=ExtractIcon(0, 'F:\Programme\Mozilla Firefox\Firefox.exe', 0);
   If MyIconH<=1 then Exit;

   DrawIconEx(Canvas.Handle, 10, 10, MyIconH, 32, 32, 0, Brush.Handle, DI_NORMAL);

   MyIcon:=TIcon.Create;
   MyIcon.Handle:=MyIconH;
   Canvas.Draw(42, 10, MyIcon);

   MyBMP:=TBitmap.Create;
   IconToBitmap(MyIconH, Self.Color, MyBMP);
   Canvas.Draw(74, 10, MyBMP);

   MyIcon.Free;
   MyBMP.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Randomize;
   Color:=Random(16777216);
end;

Nils_13 5. Feb 2008 12:26

Re: Icon pixelfrei
 
In OnPaint funktioniert es, aber kann man das nicht auch in eine Funktion verpacken ?
Habe es probiert, ich sehe kein Icon:
Delphi-Quellcode:
GetIcon(Pfade[Akt], 0, Bmp);
Img.Picture.Bitmap := Bmp;
Bmp.Free;

procedure GetIcon(filename : String; IconIndex: Integer; var Result : TBitmap);
var MyIconH : HIcon;
    MyIcon : TIcon;
    MyBMP  : TBitmap;
begin
   MyIconH := ExtractIcon(0, PChar(Filename), 0);
   if MyIconH <= 1 then
     Exit;

   Result := TBitmap.Create;

   DrawIconEx(Result.Handle, 10, 10, MyIconH, 32, 32, 0, Result.Canvas.Brush.Handle, DI_NORMAL);

   MyIcon       := TIcon.Create;
   MyIcon.Handle := MyIconH;
   Result.Canvas.Draw(42, 10, MyIcon);

   MyBMP := TBitmap.Create;
   IconToBitmap(MyIconH, clGreen, MyBMP);
   Result.Canvas.Draw(74, 10, MyBMP);

   MyIcon.Free;
   MyBMP.Free;
end;

Sunlight7 5. Feb 2008 13:44

Re: Icon pixelfrei
 
Das Du das Icon nicht siehst liegt daran, das in GetIcon mit MyIcon.Free; (auch MyIconH) freigegeben wird.

Es scheint so, als hättest Du meinen QT nicht richtig interpretiert, denn das sind 3 Möglichkeiten, von der jede einzelne funktionieren würde.

Wenn Du nur vor hast die Icons irgendwo drauf zu malen, dann würd' ich mir einfach das IconHandle wo sichern um es mit DrawIconEx zu zeichnen.
Somit kann man auch ganz lässig die Hintergrundfarbe ändern :mrgreen:

Delphi-Quellcode:
...
  private
    { Private-Deklarationen }
    Icons:Array[0..255] of HIcon;
  public
    { Public-Deklarationen }
    procedure FreeIcons;
    procedure LoadIcons;
...

procedure TForm1.FormCreate(Sender: TObject);
begin
   Randomize;
   Color:=Random(16777216);

   LoadIcons;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   FreeIcons;
end;

procedure TForm1.FormPaint(Sender: TObject);
   var i:Byte;
begin
   // Icons zeichnen
   For i:=0 to High(Icons) do
      if Icons[i]>1 then
         DrawIconEx(Canvas.Handle, 10+(i * 32), 10, Icons[i], 32, 32, 0, Brush.Handle, DI_NORMAL);
end;

procedure TForm1.FormClick(Sender: TObject);
begin
   Color:=Random(16777216);
end;



procedure TForm1.FreeIcons;
   var i:Byte;
begin
   // Icons freigeben
   For i:=0 to High(Icons) do
      if Icons[i]>1 then
         DeleteObject(Icons[i]);

   ZeroMemory(@Icons, SizeOf(Icons));
end;

procedure TForm1.LoadIcons;
   var i:Byte;
begin
   FreeIcons;

   // Icons laden
   For i:=0 to High(Icons) do begin
      Icons[i]:=ExtractIcon(0, '%WinDir%\Explorer.exe', i);
      If Icons[i]<=1 then Break;
   end;
end;

Nils_13 5. Feb 2008 15:49

Re: Icon pixelfrei
 
Ah danke. Hatte dich vorhin missverstanden. Danke! :)

Hab eine Schnapszahl (2222 Beiträge) :mrgreen:

turboPASCAL 5. Feb 2008 15:51

Re: Icon pixelfrei
 
( ot: tja, da muss er nu einen usgebe. :mrgreen: )

larsf 23. Sep 2008 12:32

Re: Icon pixelfrei
 
Hallo,

ich habe es jetzt endlich auch geschafft ein Icon in ein Image32 zu malen :D
dafür benutze ich diesen code:

Code:
DrawIconEx(image321.Canvas.Handle, 10+(1 * 32), 10, Icons[0], 32, 32, 0, Brush.Handle, DI_NORMAL);
Jetzt habe ich aber das Problem das ich damit nichts machen kann.
Wenn ich das Bild speichern möchte kommt ein 0 kB Bild heraus, wenn ich die Form verschiebe ist das Bild auch weg.

kann mir jemand helfen??

Blup 24. Sep 2008 14:45

Re: Icon pixelfrei
 
Zitat:

Zitat von larsf
Hallo,

ich habe es jetzt endlich auch geschafft ein Icon in ein Image32 zu malen :D

Nein, das ist dir nicht gelungen.
Du hast tatsächlich nur auf den Bereich des Bildschirms gemalt, der für die Darstellung dieses Steuerelements vorgesehen ist.
Sobald das Steuerelement von Windows die Nachricht bekommt sich neu zu zeichnen, wird es deine Darstellung übermalen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.
Seite 3 von 3     123   

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