Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualStringTree mit PNG Grafik (https://www.delphipraxis.net/132015-virtualstringtree-mit-png-grafik.html)

xZise 4. Apr 2009 12:03


VirtualStringTree mit PNG Grafik
 
Hallo ihr,

ich habe eine sehr gute PNG Grafik gefunden, und möchte diese in mein VST so einbauen, wie es zum Beispiel bei TortoiseSVN ist, wenn man Dateien hoch-/runterlädt. Also habe ich in Background die Grafik geladen und in den Optionen "toShowBackground" und "toStaticBackground" gesetzt. Allerdings zeigt er mir nichts an. Sobald ich aber zum Beispiel eine Bitmap lade funktioniert es wie gewünscht. Was muss ich also machen um auch eine PNG Grafik einzubinden? Nun kann ich leider/möchte ich nicht auf Transparenz verzichten. Ich meine jetzt habe ich endlich die Möglichkeit (TImage kann die Grafik laden), also möchte ich sie auch nutzen :)

MfG
xZise

xZise 5. Apr 2009 11:43

Re: VirtualStringTree mit PNG Grafik
 
Hallo ihr,

hat den keiner eine Idee, woran es liegen könnte?

MfG
xZise

stOrM 5. Apr 2009 23:22

Re: VirtualStringTree mit PNG Grafik
 
Hi,
hab mal schnell was ausprobiert sollte eigentlich funzen:

Delphi-Quellcode:

uses
  pngimage;

function LoadPng(Width, Height: integer): TBitmap;
var
  Png : TPngImage;
begin
  Result := TBitmap.Create;
  Png := TPngImage.Create;
  try
    Png.LoadFromFile('Your Png Image');
    Result.PixelFormat := pf32bit;
    Result.SetSize(Width, Height);
    Result.Assign(Png);
  except
    Result.Free;
    raise;
  end;
   FreeAndNil(Png);
end;

procedure TForm1.FormShow(Sender: TObject);
var
  BlendRec: TBlendFunction;
  TestBitmap: TBitmap;
begin

  BlendRec.BlendOp := AC_SRC_OVER;
  BlendRec.BlendFlags := 0;
  BlendRec.SourceConstantAlpha := 255;
  BlendRec.AlphaFormat := AC_SRC_ALPHA;

  TestBitmap := LoadPng(Img1.Width, Img1.Height);

  try
    Img1.Picture.Bitmap.Assign(TestBitmap);

    Windows.AlphaBlend(Img2.Canvas.Handle, 0, 0, TestBitmap.Width,
      TestBitmap.Height, TestBitmap.Canvas.Handle, 0, 0,
      TestBitmap.Width, TestBitmap.Height, BlendRec);

  finally
    TestBitmap.Free;
  end;
end;

procedure TForm1.vstPaintBackground(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; R: TRect; var Handled: boolean);
var
  BlendRec: TBlendFunction;
begin
  Handled := True;

  BlendRec.BlendOp := AC_SRC_OVER;
  BlendRec.BlendFlags := 0;
  BlendRec.SourceConstantAlpha := 255;
  BlendRec.AlphaFormat := AC_SRC_ALPHA;

  Windows.AlphaBlend(TargetCanvas.Handle,
    Sender.ClientWidth - img2.Width, Sender.ClientHeight - img2.Height, Img2.Width,
    Img2.Height, Img2.Canvas.Handle, 0, 0,
    Img2.Width, Img2.Height, BlendRec);
end;
Benötige Komponenten Vst = VirtualStringTree
Img1 = TImage
Img2 = TImage

Ggf. sollte man noch prüfen ob die "Alphablend Function" verfügbar ist.

In TreeOptions des Vst bei PaintOptions noch toShowBackground = True einstellen.

Gruß
s!

xZise 5. Apr 2009 23:42

Re: VirtualStringTree mit PNG Grafik
 
Hmmm danke,

So schlecht sieht das Ergebnis nicht aus. Ich komme sogar um das zweite TImage drum herum. Ich werde mal gucken, ob ich das vielleicht direkt in das VST verankert kriege. Nur verschwindet das PNG unter den Einträgen des VST? Zudem ist es je nach Anzahl Einträge zu niedrig, sodass der untere Teil abgeschnitten wird. Aber das müsste behandle ich wohl in einem anderem Thread.

MfG
xZise

stOrM 5. Apr 2009 23:59

Re: VirtualStringTree mit PNG Grafik
 
Kein Problem.
Hab selber noch nicht damit rumgefummelt aber besser ist wohl anstelle von toShowBackground, toStaticBackround zu nehmen.
Dann musst du im PaintBackground Event des Tree die Höhe bzw Left in vst.BackgroundOffsetY angleichen dann sollte es funzen.

Ps.
Das 2. Image war nur rein zu Testzwecken eigentlich brauchst du gar keins.

Pps. Ne seltsam aber wie Du schon sagtes je mehr Items im Tree je weiter wird die Grafik nach unten verschoben!

Gruß,
s!

xZise 6. Apr 2009 00:14

Re: VirtualStringTree mit PNG Grafik
 
Hallo,

noch eine Sache ;) Und zwar kann man einfach R dafür verwenden :) Ansonsten danke schonmal!

MfG
xZise

stOrM 6. Apr 2009 00:18

Re: VirtualStringTree mit PNG Grafik
 
Zitat:

Zitat von xZise
Hallo,

noch eine Sache ;) Und zwar kann man einfach R dafür verwenden :) Ansonsten danke schonmal!

MfG
xZise

Hehe probiers einfach aus!

Gruß
s!

xZise 6. Apr 2009 00:33

Re: VirtualStringTree mit PNG Grafik
 
Naja es war keine Frage :) Sondern eine Feststellung ^^

Übrigens kann man die Testbitmap in Background.Bitmap speichern (mit Assign natürlich) und nachher dann in PaintBackground bequem darauf zurückgreifen!

MfG
xZise

stOrM 6. Apr 2009 00:42

Re: VirtualStringTree mit PNG Grafik
 
Zitat:

Zitat von xZise
Naja es war keine Frage :) Sondern eine Feststellung ^^

Übrigens kann man die Testbitmap in Background.Bitmap speichern (mit Assign natürlich) und nachher dann in PaintBackground bequem darauf zurückgreifen!

MfG
xZise

Yup :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 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