Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit Scannen über delphitwain (https://www.delphipraxis.net/182467-problem-mit-scannen-ueber-delphitwain.html)

Natcree 27. Okt 2014 14:17

Problem mit Scannen über delphitwain
 
Hallo ich möchte mit diesem Code ein Bild einscannen und in eine Datenbank ablegen

Delphi-Quellcode:
procedure TForm1.DelphiTwain1TwainAcquire(Sender: TObject;
  const Index: Integer; Image: TBitmap; var Cancel: Boolean);
begin
  clientdataset1.FieldByName('personalausweishinten').Assign(image);
  Cancel := TRUE; {Only want one image}
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  SelectedSource: Integer;
begin
  {It is always recommended to load library dynamically, never forcing}
  {final user to have twain installed}
  if delphiTwain1.LoadLibrary then
  begin

    {Load source manager}
    delphiTwain1.SourceManagerLoaded := TRUE;
    {Allow user to select source}
    SelectedSource := delphiTwain1.SelectSource;
    if SelectedSource <> -1 then
    begin
      {Load source, select transference method and enable (display interface)}
      delphiTwain1.Source[SelectedSource].Loaded := TRUE;
      delphiTwain1.Source[SelectedSource].TransferMode := ttmMemory;
      delphiTwain1.Source[SelectedSource].Enabled := TRUE;
    end {if SelectedSource <> -1}

  end
  else
    showmessage('Twain is not installed.');
end;
Er scannt nur das dbimage1 bleibt leer. woran kann das liegen

Guido R. 27. Okt 2014 15:11

AW: Problem mit Scannen über delphitwain
 
Beim Speichern von Bildern in eine DB empfiehlt sich die Verwendung eines Streams (Memorystream).
Außerdem solltest Du Dir überlegen, ob das Bild im Bitmap-Format oder doch lieber z.B. im JPG-Format in die DB gespeichert werden soll.

Gruß
Guido R.

Natcree 27. Okt 2014 15:24

AW: Problem mit Scannen über delphitwain
 
er liest es nicht einmal in ein einfaches Timage

Hier mal der code dazu

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SelectedSource: Integer;
begin
  {It is always recommended to load library dynamically, never forcing}
  {final user to have twain installed}
  if delphiTwain1.LoadLibrary then
  begin

    {Load source manager}
    delphiTwain1.SourceManagerLoaded := TRUE;
    {Allow user to select source}
    SelectedSource := delphiTwain1.SelectSource;
    if SelectedSource <> -1 then
    begin
      {Load source, select transference method and enable (display interface)}
      delphiTwain1.Source[SelectedSource].Loaded := TRUE;
      delphiTwain1.Source[SelectedSource].TransferMode := ttmMemory;
      delphiTwain1.Source[SelectedSource].Enabled := TRUE;
    end {if SelectedSource <> -1}

  end
  else
    showmessage('Twain is not installed.');
end;

procedure TForm1.DelphiTwain1TwainAcquire(Sender: TObject;
  const Index: Integer; Image: TBitmap; var Cancel: Boolean);
begin
  Image1.Picture.Assign(image);
  Cancel := TRUE; {Only want one image}
end;
wo ist der fehler ? er scannt und will auch die datei einladen aber die image compo bleibt leer

Dejan Vu 27. Okt 2014 15:35

AW: Problem mit Scannen über delphitwain
 
Speicher das image doch mal auf die Platte und lies es mit einem Paint-Programm ein...

Natcree 27. Okt 2014 15:42

AW: Problem mit Scannen über delphitwain
 
wie mache ich das

DeddyH 27. Okt 2014 15:48

AW: Problem mit Scannen über delphitwain
 
Der Parameter Image ist doch vom Typ TBitmap, welches eine SaveToFile-Methode besitzt.

himitsu 27. Okt 2014 15:51

AW: Problem mit Scannen über delphitwain
 
So
Delphi-Quellcode:
Image1.Picture.Bitmap.Assign(image);
geht es auch nicht?

Natcree 27. Okt 2014 15:57

AW: Problem mit Scannen über delphitwain
 
Zitat:

Image1.Picture.Bitmap.Assign(image); geht es auch nicht?
nein den will er auch nicht?

Jens01 27. Okt 2014 16:14

AW: Problem mit Scannen über delphitwain
 
Das DelphiTwain von hier auch probiert?

Natcree 27. Okt 2014 17:28

AW: Problem mit Scannen über delphitwain
 
danke jens01 daran hats gelegen
;)

Natcree 3. Dez 2014 09:53

AW: Problem mit Scannen über delphitwain
 
Liste der Anhänge anzeigen (Anzahl: 1)
So nun mehr habe ich ein neues Problem.

Das Scannen klappt und er speichert es auch in eine Datenbank ab siehe Code.

Delphi-Quellcode:
procedure TForm1.TwainTwainAcquire(Sender: TObject; const Index: Integer;
  Image: TBitmap; var Cancel: Boolean);
begin
  clientdataset1.Fieldbyname('Bild').Assign(Image);
  Cancel := True;//Only want one image
end;

procedure TForm1.DoDestroy;
begin
  Twain.Free;//Don't forget to free Twain!

  //inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
clientdataset1.Insert;
  //Create Twain
  if Twain = nil then begin
    Twain := TDelphiTwain.Create;
    Twain.OnTwainAcquire := TwainTwainAcquire;
  end;

  //Load Twain Library dynamically
  if Twain.LoadLibrary then
  begin
    //Load source manager
    Twain.SourceManagerLoaded := TRUE;

    //Allow user to select source -> only the first time
    if not Assigned(Twain.SelectedSource) then
      Twain.SelectSource;

    if Assigned(Twain.SelectedSource) then begin
      //Load source, select transference method and enable (display interface)}
      Twain.SelectedSource.Loaded := TRUE;
      Twain.SelectedSource.ShowUI := TRUE;//display interface
      Twain.SelectedSource.Enabled := True;
    end;

  end else begin
    ShowMessage('Twain is not installed.');
  end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
clientdataset1.Post;
end;
Jedoch wenn ich mein Programm beende meldet er folgendes siehe Bild.

himitsu 3. Dez 2014 09:59

AW: Problem mit Scannen über delphitwain
 
Und wo tritt nun der Fehler auf?
Der Debugger ist ein cooles Ding und das sollte man benutzten.


Delphi-Quellcode:
procedure TForm1.DoDestroy;
begin
  Twain.Free;//Don't forget to free Twain!

  //inherited; <<<<<< WIESO?
end;

Natcree 3. Dez 2014 10:02

AW: Problem mit Scannen über delphitwain
 
das inherited habe ich wieder aktiviert aber die meldung kommt immer noch

Natcree 3. Dez 2014 10:03

AW: Problem mit Scannen über delphitwain
 
beim schließen des Programms

DeddyH 3. Dez 2014 10:06

AW: Problem mit Scannen über delphitwain
 
Und wo genau beim Schließen des Programms (Zeile)?

Natcree 3. Dez 2014 10:09

AW: Problem mit Scannen über delphitwain
 
Liste der Anhänge anzeigen (Anzahl: 1)
er gibt mir keine zeile nur das siehe Bild

himitsu 3. Dez 2014 10:22

AW: Problem mit Scannen über delphitwain
 
Ich bin mir sehr sicher, daß D7 auch schon einen Stacktrace kannte.

Und dann kann man immernoch einen Haltepunkt in das DoDestroy legen und durchsteppen.

DeddyH 3. Dez 2014 10:23

AW: Problem mit Scannen über delphitwain
 
http://www.delphipraxis.net/41047-tu...ortgeschr.html

Natcree 3. Dez 2014 10:30

AW: Problem mit Scannen über delphitwain
 
ich glaub ich habe den Fehler

wenn ich einen breakpoint bei

Delphi-Quellcode:
procedure TForm1.DoDestroy;
begin
  Twain.Free;//Don't forget to free Twain!// Hier breakpoint setze
  inherited;
end;
dann beendet er kann es sein das er beim programm schließen twain noch mal freigeben will?

DeddyH 3. Dez 2014 10:31

AW: Problem mit Scannen über delphitwain
 
Kommentier die Zeile doch einfach mal aus, dann merkst Du es.

[edit] Oder einfach so versuchen:
Delphi-Quellcode:
procedure TForm1.DoDestroy;
begin
  FreeAndNil(Twain);//Don't forget to free Twain!// Hier breakpoint setze
  inherited;
end;
Wann wird die Methode denn eigentlich aufgerufen? Im FormDestroy, oder evtl. auch woanders? [/edit]

himitsu 3. Dez 2014 11:21

AW: Problem mit Scannen über delphitwain
 
Zitat:

Zitat von DeddyH (Beitrag 1282086)
Wann wird die Methode denn eigentlich aufgerufen?

Vom Namen her ist es das überschriebene TObject.DoDestroy (da drin, im Inherited, wird dann OnDestroy aufgerufen und die Instanz freigegeben)

Wenn nicht, dann schäm dich.

Dejan Vu 3. Dez 2014 12:59

AW: Problem mit Scannen über delphitwain
 
Bei Twain muss man aufpassen, die DLL ist ziemlich blöd, und wenn der Wrapper die stringete 'schließen/beenden/deaktivieren' (oder wie war die Reihenfolge) nicht implizit (und freundlicherweise) im eigenen Destroy implementiert hat, muss man das selbst machen.

Mach also alle 'öffnen/aktivieren/enablen/' Aktionen in umgekehrter Reihenfolge wieder rückgängig.
Im schlimmsten Fall verbessert sich die Lage nicht (aber es sieht wenigstens sauberer aus).
Mit ein wenig Glück funktioniert es dann aber.

PS: Das mit dem Debuggen ist so eine Sache (außer für Fortgeschrittene natürlich), wenn der Fehler -wie unschwer zu erkennen- außerhalb der VCL bzw. des schönen Exceptionhandlings auftritt. Ich jedenfalls bin nicht in der Lage, eine Fremd-DLL so einfach zu debuggen.

himitsu 3. Dez 2014 13:06

AW: Problem mit Scannen über delphitwain
 
Im Zweifelsfall sucht man eben nicht den Fehler in der (Fremd)Komponente, sondern sucht nach dem letzten eigenem Code und schaut dort, ob man was falsch gemacht hat, bzw. wendet sich dann an den jeweiligen Support "wenn ich das aufrufe, dann ..." .

Dejan Vu 3. Dez 2014 15:32

AW: Problem mit Scannen über delphitwain
 
Support ist bei Frickelkomponenten von Torry etc. so eine Sache (Falls das Twain-Teil so eine DLL ist).


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