AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi TnTImage -> Welche Bildformate unterstützt?
Thema durchsuchen
Ansicht
Themen-Optionen

TnTImage -> Welche Bildformate unterstützt?

Ein Thema von DualCoreCpu · begonnen am 28. Jun 2017 · letzter Beitrag vom 5. Jul 2017
Antwort Antwort
Seite 2 von 2     12   
DualCoreCpu
(Gast)

n/a Beiträge
 
#11

AW: TnTImage -> Welche Bildformate unterstützt?

  Alt 2. Jul 2017, 12:22
Mir würde eigentlich erstmal die Fehlermeldung reichen, die Du bekommst, wenn Du das Programm einfach mal so startest, egal, ob die nun detailreich ist oder nicht. Nur das, was auch der Anwender zu sehen bekommen würde, wenn er das Programm startet und dann der Fehler auftritt.
Erste Gelegenheit für Exception bei $75C0A9F2. Exception-Klasse EInvalidGraphic mit Meldung 'Unbekannte Bilddateierweiterung (.)'. Prozess imgdrag.exe (924)

Dies, nachdem ich den Quelltextabschnitt meines ersten Post wie folgt geändert habe:

Delphi-Quellcode:
    [B]if not Assigned(Image) then Image := TImage.Create(self);
[/B]
//So bleibt die vorherige EAccessViolation fern.
//Hatte vorausgesetzt, dass eine Komponente, die auf das Formular
//geklickt wurde, auch automatisch erzeugt wird
//Die Fehlermeldung sagt da nur "Lesen von Adresse .... "
    FFileName := String(Dateiname);
    Image.Picture.LoadFromFile(FFileName);
//In der darunter stehenden Zeile kommt nun die oben genannte Exception
    FFileList.AddObject(StrPas(Dateiname),Image);
//---------------------------------------------------------------------
    Memo.Lines.Add(FFileList.Strings[FFileList.Count-1]);

    PictureList.Items.Item[PictureList.Items.Count-1].assign(Image);
    //PictureList.Items.Item[PictureList.Items.Count-1].Data := Item.Data;
sonstiger Quellcode, siehe oben, erster Post!

Ich dachte, die Image-Komponente unterstütze ALLE Bildformate. Die Exception kommt auch bei .bmp Dateien. Habe zum Test eine .bmp Datei verwendet, von der ein in .jpg umgewandeltes Pendant existiert. Habe alles auf die Verwendung ausschließlich der Image Komponente zurück geändert.

Die Unit jpeg ist eingebunden.

Geändert von DualCoreCpu ( 2. Jul 2017 um 12:26 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#12

AW: TnTImage -> Welche Bildformate unterstützt?

  Alt 2. Jul 2017, 13:04
In der Fehlermeldung steht
Code:
'Unbekannte Bilddateierweiterung (.)'
Hier würde ich zuerst einmal den Dateinamen überprüfen, es scheint so, als könnte die Dateiendung, die zur Erkennung des Bildtypes herangezogen wird, nicht korrekt erkannt werden.

Eine Komponente, die man in der IDE auf ein Formular pappt, wird automatisch erstellt.

Wenn Image eine derartige Komponente ist, sollte diese Abfrage nicht erforderlich sein.

if not Assigned(Image) then Image := TImage.Create(self);

Wenn aber doch, so wird die Komponente auf dem Formular irgendwo (irrtümlich?) freigegeben.

Aus dem bisher bekannten Quelltext lässt sich das aber nicht erkennen.

Schau bitte zuerst mal nach, was hier FFileName := String(Dateiname); herauskommt. Ist das ein gültiger Dateiname mit vollständigem Pfad und Dateiendung?
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#13

AW: TnTImage -> Welche Bildformate unterstützt?

  Alt 2. Jul 2017, 17:49
Danke @nahpets, Der Dateiname war die Ursache der Exception.

Ein Teilproblem ist somit gelöst!

Ein Fall für DUnit! Das aber wird ein gesonderter Strang.

Nun aber macht diese Zeile Schwierigkeiten. Warum das nun wieder?

PictureList.Items.Item[PictureList.Items.Count-1].assign(Image); Diese Zeile bringt dieselbe Exception:

EAccessViolation -> Zugriffsverletzung bei Adresse ...

PictureList.Items.Item[PictureList.Items.Count-1].Data := Image.Picture Wie also muss ich das Bild zuweisen?

Picturelist ist meine TListView.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#14

AW: TnTImage -> Welche Bildformate unterstützt?

  Alt 2. Jul 2017, 19:33
Erste Frage: Gibt es das? PictureList.Items.Item[PictureList.Items.Count-1] Vor der Zuweisung prüfen, ob PictureList.Items.Count größer 0 ist.
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#15

AW: TnTImage -> Welche Bildformate unterstützt?

  Alt 3. Jul 2017, 09:58
Erste Frage: Gibt es das? PictureList.Items.Item[PictureList.Items.Count-1] Vor der Zuweisung prüfen, ob PictureList.Items.Count größer 0 ist.
Ok, danke. War nicht größer als 0.

Wenn ich aber stattdessen den Index auf PictureList.Items.Count setze, erhalte ich die gleiche Exception. Warum das, Ich sollte doch an das Nullte Element zuweisen können.

Habe außerdem folgendes getestet:


PictureList.Items.Item.assign(Image.Picture.bitmap); Hier wird der Index wird jedoch vom Compiler verlangt

    PictureList.Items.assign(Image.Picture.bitmap); Hier wird eine EConvertError-Exception geworfen. Meldung:

TBitmap kann nicht zu TlistItems zugewiesen werden

Wie kriege ich denn da ein Bild in die ListView???
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#16

AW: TnTImage -> Welche Bildformate unterstützt?

  Alt 3. Jul 2017, 10:22
Hallöle...
Ich zeige dir mal ein Beispiel wie ich Icons in die Liste bekomme. Du mußt es auf deine Gegebenheiten anpassen.
1. das SubItem muß bestehen auch wenn es leer = '' ist
2. Im CustomDrawSubItem zeichnest du es.
Hinweis: Um die Freigabe des Images mußt du dich eventuell selbst kümmern. (OnDeletion)
Delphi-Quellcode:
procedure TfrPreferences.ShowList(aList: TListEmployee);
var
  Item: TListItem;
  Employee: TEmployee;
  LastIndex: Integer;
begin
  lvEmployees.BeginUpdate;
  try
    lvEmployees.Items.Clear;
    for Employee in aList do
    begin
      if Employee.State <> ddsDeleted then
      begin
        Item := lvEmployees.Items.Add;
        Item.Data := Employee;
        Item.SubItems.Add(Employee.Name);
        Item.SubItems.Add(Employee.FirstName);
        Item.SubItems.Add(Employee.PersonalNumber);
        Item.SubItems.Add(IntToStr(Integer(Employee.Active)));
        Item.ImageIndex := dmSmall.GetIconDataState(Employee.State); // Standard Image der ersten Spalte
      end;
    end;
  finally
    lvEmployees.Sort;
    lvEmployees.EndUpdate;
  end;
end;

procedure TfrPreferences.lvEmployeesCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  aRect: TRect;
  aIcon: TIcon;
begin
  if SubItem > 3 then
  begin
    aIcon := TIcon.Create;
    try
      DefaultDraw := False;
      ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @aRect);
      case SubItem of // 4.SubItem
        4:
          begin
            dmCommon.GetIconActive(TEmployee(Item.Data).Active, aIcon); // Laden Icon => aIcon hält das Bild
          end;
      end;
      Sender.Canvas.Draw(aRect.Left + ((aRect.Right - aRect.Left - aIcon.Width) div 2), aRect.Top, aIcon); // anzeigen
    finally
      aIcon.Free;
    end;
  end;
end;

Geändert von haentschman ( 3. Jul 2017 um 10:28 Uhr)
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#17

AW: TnTImage -> Welche Bildformate unterstützt?

  Alt 3. Jul 2017, 16:06
Danke, @haentschman, ich werde mich damit auseinandersetzen und melde mich dann wieder. Hoffentlich mit einer Erfolgsmeldung.

Vielleicht ergeben sich ja auch Fragen zu diesem Quelltext.

Geändert von DualCoreCpu ( 3. Jul 2017 um 16:10 Uhr)
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#18

AW: TnTImage -> Welche Bildformate unterstützt?

  Alt 4. Jul 2017, 20:39
Danke @nahpets und @haentschman wie verrückt. So funktioniert das nun so wie ich es haben wollte.


Geändert von DualCoreCpu ( 5. Jul 2017 um 10:48 Uhr)
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#19

AW: TnTImage -> Welche Bildformate unterstützt?

  Alt 5. Jul 2017, 10:48
Moderatoren: Bitte Beitrag #17 löschen! Doppelposting + nicht alle Helfer zum Dank angesprochen!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:49 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