AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TImage EAccessViolation
Thema durchsuchen
Ansicht
Themen-Optionen

TImage EAccessViolation

Ein Thema von Schwedenbitter · begonnen am 26. Aug 2008 · letzter Beitrag vom 27. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

TImage EAccessViolation

  Alt 26. Aug 2008, 22:34
Hallo,

ich versuche mich grad am Scannen mehrerer Seiten mit TTwain. Das Scannen klappt, wenn ich schon beim Erstellen des Formulars ein TImage anlege, dem dann das Scanresultat zugewiesen wird. Mein Ziel ist es aber, mehrere Dokumente einzuscannen und da ich nicht weiß, wieviel der User auf den Scanner gepackt hat, muss ich die TImages zur Laufzeit anlegen. Ich will die später dann mittels Thread komprimieren und Speichern.

Hier klappt es dann leider nicht mehr:
Delphi-Quellcode:
procedure TForm1.DelphiTwain1TwainAcquire(Sender: TObject;
   const Index: Integer; Image: TBitmap; var Cancel: Boolean);
Var
   T1   : TImage;
begin
   // Und wieder eine Seite...
   Inc(Zaehler);
   // Image im Formular anlegen
   If T1=nil Then
   Begin
      T1:=TImage.Create(Form1);
      //T1:=TImage.Create(Form1);
      T1.Left:=8;
      T1.Top:=8;
      T1.Width:=73;
      T1.Height:=105;
      T1.Stretch:=True;
      T1.AutoSize:=False;
   End;
   //Copies the Image parameter to the TImage
   T1.Picture.Assign(Image);            -> Zugrissverletzung
   //Image1.Picture.Assign(Image);      -> So lief es
   //We only want the first image
   Cancel:=True;
end;
Ich bekomme immer eine EAccessViolation. Wer kann mir sagen warum?

Gruß und Danke im Voraus, Alex
Alex Winzer
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TImage EAccessViolation

  Alt 26. Aug 2008, 22:46
T1.Parent := Form1;
Markus Kinzler
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TImage EAccessViolation

  Alt 27. Aug 2008, 07:41
Danke erstmal für die Antwort.
Zitat von mkinzler:
T1.Parent := Form1;
Hat leider nichts gebracht. Die Fehlermeldung kommt wie eh und je. Vielleicht habe ich es auch an der falschen Stelle:
Delphi-Quellcode:
   Inc(Zaehler);
   // Image im Formular anlegen
   If T1=nil Then
   Begin
      T1:=TImage.Create(Form1);
      T1.Parent:=Form1;
      T1.Left:=8;
      T1.Top:=8;
      T1.Width:=73;
      T1.Height:=105;
      T1.Stretch:=True;
      T1.AutoSize:=False;
   End;
   //Copies the Image parameter to the TImage
   T1.Picture.Assign(Image);
Ich glaube auch, dass das keine Rolle spielen sollte, da ich dem TImage mit TImage.Create(Form1); explizit sage, dass er zu Form1 gehört...
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TImage EAccessViolation

  Alt 27. Aug 2008, 07:43
Und beiT1.Picture.Bitmap.Assign(Image); ?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TImage EAccessViolation

  Alt 27. Aug 2008, 08:15
Hallo DeddyH
Zitat von DeddyH:
Und beiT1.Picture.Bitmap.Assign(Image); ?
Das hat leider auch nichts gebracht. Es sollte letztlich auch ohne .Bitmap klappen. Denn wenn ich das TImage bei der Erstellung anlege, dann klappt es mit dem Befehl Image1.Picture.Assign(Image); schließlich auch ohne .Bitmap.
Nur weil ich TImage zur Laufzeit anlege, dürften doch keine anderen Befehle notwendig werden, oder?
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: TImage EAccessViolation

  Alt 27. Aug 2008, 08:19
Kann es evtl. sein, dass das Image gar nicht erzeugt wird? Ich verstehe eh nicht, wieso Du eine lokale Variable auf nil prüfst, es muss ja sowieso erzeugt werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: TImage EAccessViolation

  Alt 27. Aug 2008, 08:29
Zitat von DeddyH:
Kann es evtl. sein, dass das Image gar nicht erzeugt wird? Ich verstehe eh nicht, wieso Du eine lokale Variable auf nil prüfst, es muss ja sowieso erzeugt werden.
Ich dachte (<>Wissen), dass man mittels der Abfrage auf nil prüfen kann, ob das Object bereits auf dem Formular existiert; also erzeugt ist. Denn ich brauche die TImage nur, weil als Zwischenspeicher für die Scannerresultate. So stelle ich mir meinen Programmcode vor:

Thread 1
- Neues TImage anlegen
- Ergebnis des Scanners reinschreiben
Ende

Thread 2
- Schauen ob TImage(s) vorhanden sind
- Nach png wandeln
- Abspeichern
- betreffendes TImage löschen
Ende

Dazu muss ich zur Laufzeit TImage anlegen, weil ich nicht wissen kann, wieviel Seiten der Benutzer auf den Scanner gepackt hat.
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: TImage EAccessViolation

  Alt 27. Aug 2008, 08:32
Aber dann ist der Ansatz mit einer lokalen Variablen falsch. Falls Du ggf. mehrere dynamisch erzeugt Images brauchst, könntest Du ja beispielsweise eine TObjectList verwenden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: TImage EAccessViolation

  Alt 27. Aug 2008, 09:59
Danke!
Zitat von DeddyH:
Aber dann ist der Ansatz mit einer lokalen Variablen falsch.
Das ist mir jetzt auch aufgefallen. Ich komme sonst von den Threads nicht an die TImage(s) ran. Blöder Fehler von mir!

Zitat von DeddyH:
Falls Du ggf. mehrere dynamisch erzeugt Images brauchst, könntest Du ja beispielsweise eine TObjectList verwenden.
Ich habe mir mal das hier angesehen und es liest sich vielversprechend. Bin (leider) grad auf Arbeit und kann es nicht ausprobieren. Es scheint nur ein Problem zu geben: Gibt es das unter Delphi 6 auch schon? Es sieht leider nicht danach aus

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: TImage EAccessViolation

  Alt 27. Aug 2008, 10:01
Ich habe gerade unter Delphi 5 nachgesehen, da gibt es TObjectlist bereits.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:12 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