Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Bild von TImage in TListView verwenden (https://www.delphipraxis.net/148406-bild-von-timage-tlistview-verwenden.html)

Viktorii 1. Mär 2010 14:29


Bild von TImage in TListView verwenden
 
Hallo zusammen.

Habe schon wieder eine Frage :oops: Ich habe nun ein Bild, beispielsweise ein jpg, in einem TImage vorliegen. Nun möchte ich diese Bild (verkleinert) in einer Spalte einer TListview (vsReport) darstellen.

Ist der einzige Weg der, dass man den 'Umweg' über eine Imagelist macht?

Wenn ja, wie kann ich der ImageList das Bild von TImage zuweisen, wenn dies z.B ein jpg ist? Kann TImage mir das Bild auch konvertiert als Icon zurückliefern?

Die OH konnte mir nicht wirklich weiterhelfen...

himitsu 1. Mär 2010 14:49

Re: Bild von TImage in TListView verwenden
 
Zitat:

Zitat von Viktorii
Die OH konnte mir nicht wirklich weiterhelfen...

Delphi-Referenz durchsuchenTImageList: Komisch, ich finde in meiner OH eine Methode Namens Add. :gruebel:

Jpeg in ein TBitmap kopieren und dann per .Add hinzufügen.

Viktorii 1. Mär 2010 15:34

Re: Bild von TImage in TListView verwenden
 
Okay, Add hatte ich zwar gefunden, aber auf das zu TBitmap zuweisen bin ich nicht bekommen.

Nun bekomme ich aber Trotzdem noch einen Fehler:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt CRM.exe ist eine Exception der Klasse EInvalidOperation mit der Meldung 'Ungültige Bildgröße' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Delphi-Quellcode:
  lBitmap      : TBitmap;

begin
  lBitmap := FPerson.Bild.Bitmap;

  ImageListFahrer.Add(lBitmap, lBitmap); // <-- Fehler hier.

  ListItem := TListItem.Create(ListViewPerson.Items);
  ListItem.SubItems.Add(FPerson.Name);
  ListViewPerson.Items.AddItem(ListItem);

Deswegen habe ich meine Quelltest intuitiv so erweitert:


Delphi-Quellcode:
  lBitmap      : TBitmap;

begin
  lBitmap := FPerson.Bild.Bitmap;

  lBitmap.Width := 35;
  lBitmap.Height := 35;

  ImageListFahrer.Add(lBitmap, lBitmap);

  ListItem := TListItem.Create(ListViewPerson.Items);
  ListItem.SubItems.Add(FPerson.Name);
  ListViewPerson.Items.AddItem(ListItem);
Kommt zwar kein Fehler mehr, aber anstatt des Bildes wird nur eine weisse Fläche dargestellt? Wat mach ich denn nu?

Viktorii 2. Mär 2010 21:07

Re: Bild von TImage in TListView verwenden
 
*push*

Luckie 2. Mär 2010 21:11

Re: Bild von TImage in TListView verwenden
 
Hast du eigentlich schon mal dran gedacht, das Bitmap Objekt auch zu erzeugen? :roll:

Viktorii 3. Mär 2010 07:14

Re: Bild von TImage in TListView verwenden
 
Zitat:

Zitat von Luckie
Hast du eigentlich schon mal dran gedacht, das Bitmap Objekt auch zu erzeugen? :roll:

Vielen Dank für Deinen augenrollenden Hinweis. Schön dass sich jemand so erfahrenes wie Du erbarmt einem Schussel wie mir zu helfen. :thumb:

Nur leider habe ich dann auch noch dem selben Effekt. Aber vielleicht bin ich so dumm und habe was falsch gemacht. :roll:

Sieht jetzt so aus:

Delphi-Quellcode:
lBitmap      : TBitmap;

begin
  lBitmap := TBitmap.Create();
  lBitmap := FPerson.Bild.Bitmap;

  ImageListFahrer.Add(lBitmap, lBitmap); // <-- Fehler hier.

  ListItem := TListItem.Create(ListViewPerson.Items);
  ListItem.SubItems.Add(FPerson.Name);
  ListViewPerson.Items.AddItem(ListItem);
Hoffe ich fall jetzt niemanden (schon wieder) auf die Nerven :duck:

Viktorii 5. Mär 2010 07:45

Re: Bild von TImage in TListView verwenden
 
*push*

xZise 5. Mär 2010 11:13

Re: Bild von TImage in TListView verwenden
 
Moin,
ist denn das Bild > 35x35 Pixel? Dann würde ich dir Canvas.StrechDraw empfehlen. Damit kann du auf dein „Pufferbitmap“ (lBitmap) das Orginal verkleinert zeichnen.

MfG
Fabian

DeddyH 5. Mär 2010 11:42

Re: Bild von TImage in TListView verwenden
 
Zitat:

Delphi-Quellcode:
lBitmap := TBitmap.Create();
  lBitmap := FPerson.Bild.Bitmap;

Denke ich falsch, oder erzeugst Du Dir hier ein feines Speicherleck? Erst erzeugst Du eine Instanz und dann weist Du der Variablen eine andere Instanz zu, kannst somit die erzeugte nicht mehr freigeben :gruebel:

[edit] Evtl. liegt der ursprüngliche Fehler ja ganz woanders.
Delphi-Quellcode:
lBitmap      : TBitmap;

begin
  lBitmap := FPerson.Bild.Bitmap;
  if Assigned(lBitmap) then
    begin
      //Dimensionen der Imagelist vor dem Einfügen festlegen
      ImageListFahrer.Width := lBitmap.Width;
      ImageListFahrer.Height := lBitmap.Height;

      ImageListFahrer.Add(lBitmap, lBitmap); // <-- Fehler hier (jetzt weg?)

      ListItem := TListItem.Create(ListViewPerson.Items);
      ListItem.SubItems.Add(FPerson.Name);
      ListViewPerson.Items.AddItem(ListItem);
    end;
[/edit]

Viktorii 5. Mär 2010 12:52

Re: Bild von TImage in TListView verwenden
 
Zitat:

Zitat von xZise
Moin,
ist denn das Bild > 35x35 Pixel? Dann würde ich dir Canvas.StrechDraw empfehlen. Damit kann du auf dein „Pufferbitmap“ (lBitmap) das Orginal verkleinert zeichnen.

Hmm... Ich weiss nicht ob ich dass richtig verstanden habe. Wenn ich so probiere, kommt leider die selbe Meldung
Delphi-Quellcode:
    lBitmap := TBitmap.Create();

    Rect.Left := 0;
    Rect.Right := 35;
    Rect.Top := 0;
    Rect.Bottom := 35;

    lBitmap.Canvas.StretchDraw(Rect, FPerson.Bild.Bitmap);;

    ImageListFahrer.Add(lBitmap, lBitmap);

Zitat:

Zitat von DeddyH
Zitat:

Delphi-Quellcode:
lBitmap := TBitmap.Create();
  lBitmap := FPerson.Bild.Bitmap;

Denke ich falsch, oder erzeugst Du Dir hier ein feines Speicherleck? Erst erzeugst Du eine Instanz und dann weist Du der Variablen eine andere Instanz zu, kannst somit die erzeugte nicht mehr freigeben :gruebel:

Ja, das habe ich mir eigentlich ja auch gedacht, aber
Zitat:

Zitat von Luckie
Hast du eigentlich schon mal dran gedacht, das Bitmap Objekt auch zu erzeugen? :roll:

:wiejetzt:

Zitat:

Zitat von DeddyH
[edit] Evtl. liegt der ursprüngliche Fehler ja ganz woanders.
Delphi-Quellcode:
lBitmap      : TBitmap;

begin
  lBitmap := FPerson.Bild.Bitmap;
  if Assigned(lBitmap) then
    begin
      //Dimensionen der Imagelist vor dem Einfügen festlegen
      ImageListFahrer.Width := lBitmap.Width;
      ImageListFahrer.Height := lBitmap.Height;

      ImageListFahrer.Add(lBitmap, lBitmap); // <-- Fehler hier (jetzt weg?)

      ListItem := TListItem.Create(ListViewPerson.Items);
      ListItem.SubItems.Add(FPerson.Name);
      ListViewPerson.Items.AddItem(ListItem);
    end;
[/edit]

Also, ich habe die Größe im Objektinspektor auf 35*35 gesetzt. Der Witz an der Sache ist, dass die Graphik größer ist und so zu sagen verkleinert im Listview/Imagelist dargestellt/hinzugefüg werden soll...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:52 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz