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 [VST] Image der selektierten Zeile (https://www.delphipraxis.net/111171-%5Bvst%5D-image-der-selektierten-zeile.html)

stz 31. Mär 2008 01:05


[VST] Image der selektierten Zeile
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin moin,
ich habe einigen Einträgen in meinem VST jetzt kleine selbst gezeichnete Symbole spendiert. Klappt auch soweit gut, aber sobald die Zeile mit Symbol selektiert ist, fällt der weiße Hintergrund meines 16x16 Pixel großen Bitmaps sehr unangenehm auf. Zur Veranschaulichung ein Screenshot im Anhang.

Mein Wunsch: Der Hintergrund des Symbols (jetzt noch weiß) soll irgendwie transparent sein, sich also der Farbe anpassen, d.h. im selektierten Fall halt blau sein. Aber wie kann ich das realisieren? Kann ich eine andere ImageList für selektierte Einträge angeben?

Grüße
Malte

generic 31. Mär 2008 10:05

Re: [VST] Image der selektierten Zeile
 
Die Icons brauchst du nicht selbst zeichenen.
Du kannst dafür eine TImageList nehmen und diese dem VST zuweisen.
In dem Ereignis onGetImage bzw. onGetImageEx kannst du dann pro Knoten reagieren und das richtige Symbol bestimmen.

stz 31. Mär 2008 11:13

Re: [VST] Image der selektierten Zeile
 
Moin generic,
da habe ich mich wohl mehr als unklar ausgedrückt :oops:
Genau das mache ich ja. Ich zeichne meine Bildchen, speichere sie in einer ImageList und weise dem Eintrag im OnGetImageIndex das passende Bildchen zu. Mein Problem ist halt nur, dass ich eine Lösung suche, das bei selektierten Zeilen der weiße Hintergrund des Bildchens nicht weiß ist, sondern so blau, wie der Hintergrund einer selektierten Zeile halt blau ist.

Vielleicht zur Verdeutlichung hier mal ein wenig Code:
Bildchen zeichnen und der ImageList hinzufügen:
Delphi-Quellcode:
  procedure AddIcon(const Index: Integer);
  var
    Bitmap: TBitmap;
  begin
    Bitmap := TBitmap.Create;
    try
      Bitmap.Width := 16;
      Bitmap.Height := 16;
      with Bitmap.Canvas do
      begin
        Pen.Color := clBlack;
        Brush.Color := CLASS_COLORS[Index mod Length(CLASS_COLORS)];
        MoveTo(8, 3);
        LineTo(13, 8);
        LineTo(8, 13);
        LineTo(3, 8);
        LineTo(8, 3);
        FloodFill(8, 8, clWhite, fsSurface);
      end;
      ProcForm.ClassImageList.Insert(Index, Bitmap, nil);
    finally
      Bitmap.Free;
    end;
  end;
Passendes Bildchen zum Eintrag raussuchen:
Delphi-Quellcode:
procedure TProcedureListForm.VSTGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
  Element: TProcElement;
begin
  if Column = 0 then
  begin
    Element := TProcElement(VST.GetNodeData(Node)^);
    ImageIndex := Element.ImageIndex;
  end
  else
    ImageIndex := -1;
end;
Wie erhalte ich jetzt ein anderes Bildchen, wenn der Eintrag selektiert ist? Alternativ: Kann ich auf dem Wege den Hintergrund der Bildchen nicht weiß, sondern transparent machen?

Ich hoffe mein Problem ist jetzt klarer...

Grüße
Malte

generic 31. Mär 2008 13:41

Re: [VST] Image der selektierten Zeile
 
Du kannst die Transparenz in der Imagelist vorgeben.
Andere Methode ist das du mit einer Bitmap-Mask arbeiten.

In deinem Fall empfehle ich dir die erste Methode.
Beim Hinzufügen müsstest du dann die "AddMasked" Methode verwenden.
Dort kannst du die Transparenzfarbe angeben.

stz 1. Apr 2008 16:07

Re: [VST] Image der selektierten Zeile
 
Kann es sein, dass die Bitmap-Masken der ImageList nur mit bestimmten Windows-Versionen funktionieren? Auf meinem Windows-XP SP2 Rechner funktioniert es jetzt nämlich ganz wunderbar, aber auf meinem Windows 2000 SP4 PC sieht es immer noch so aus wie in dem Screenshot oben. Und das mit der gleiche Exe... :gruebel:

Grüße
Malte


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