![]() |
AW: TnTImage -> Welche Bildformate unterstützt?
Zitat:
Dies, nachdem ich den Quelltextabschnitt meines ersten Post wie folgt geändert habe:
Delphi-Quellcode:
sonstiger Quellcode, siehe oben, erster Post!
[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; 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. |
AW: TnTImage -> Welche Bildformate unterstützt?
In der Fehlermeldung steht
Code:
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.
'Unbekannte Bilddateierweiterung (.)'
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.
Delphi-Quellcode:
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
Delphi-Quellcode:
herauskommt. Ist das ein gültiger Dateiname mit vollständigem Pfad und Dateiendung?
FFileName := String(Dateiname);
|
AW: TnTImage -> Welche Bildformate unterstützt?
Danke @nahpets, Der Dateiname war die Ursache der Exception.
Ein Teilproblem ist somit gelöst! :love: Ein Fall für DUnit! Das aber wird ein gesonderter Strang. Nun aber macht diese Zeile Schwierigkeiten. Warum das nun wieder?
Delphi-Quellcode:
Diese Zeile bringt dieselbe Exception:
PictureList.Items.Item[PictureList.Items.Count-1].assign(Image);
EAccessViolation -> Zugriffsverletzung bei Adresse ...
Delphi-Quellcode:
Wie also muss ich das Bild zuweisen? :wall:
PictureList.Items.Item[PictureList.Items.Count-1].Data := Image.Picture
Picturelist ist meine TListView. |
AW: TnTImage -> Welche Bildformate unterstützt?
Erste Frage: Gibt es das?
Delphi-Quellcode:
Vor der Zuweisung prüfen, ob PictureList.Items.Count größer 0 ist.
PictureList.Items.Item[PictureList.Items.Count-1]
|
AW: TnTImage -> Welche Bildformate unterstützt?
Zitat:
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:
Delphi-Quellcode:
Hier wird der Index wird jedoch vom Compiler verlangt
PictureList.Items.Item.assign(Image.Picture.bitmap);
Delphi-Quellcode:
Hier wird eine EConvertError-Exception geworfen. Meldung:
PictureList.Items.assign(Image.Picture.bitmap);
TBitmap kann nicht zu TlistItems zugewiesen werden Wie kriege ich denn da ein Bild in die ListView??? :wall: |
AW: TnTImage -> Welche Bildformate unterstützt?
Hallöle...:P
Ich zeige dir mal ein Beispiel wie ich Icons in die Liste bekomme. Du mußt es auf deine Gegebenheiten anpassen. :zwinker: 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; |
AW: TnTImage -> Welche Bildformate unterstützt?
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. |
AW: TnTImage -> Welche Bildformate unterstützt?
Danke @nahpets und @haentschman wie verrückt. So funktioniert das nun so wie ich es haben wollte.
:hello: |
AW: TnTImage -> Welche Bildformate unterstützt?
Moderatoren: Bitte Beitrag #17 löschen! Doppelposting + nicht alle Helfer zum Dank angesprochen!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr. |
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