Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Delphi Twain (https://www.delphipraxis.net/179061-delphi-twain.html)

ngott2 12. Feb 2014 12:37

Delphi Twain
 
Hallo,
mein Scan Programm ist nun fast fertig.
Das Design steht und der Upload klappt.
Nun habe ich noch einen neuen Scanner dazubekommen.
Der macht mir allerdings 2 Probleme.
Problem 1 den alten Scanner habe ich so ausgewählt
Delphi-Quellcode:
SelectedSource := 0;


nun muss ich es so machen
Delphi-Quellcode:
SelectedSource := fTwain.SelectSource;
Dabei geht ein Fenster auf wo man den richtigen Scanner wählen kann.
Dies soll aber automatisch geschen es wird nur ein Scanner genutzt.

Problem 2 : Ich muss den neuen Scanner wenn das Programm läuft einmal neu Starten, weil ich sonst eine access violation bekomme.
Hat jemand eine Idee woran es liegen kann, die Exception wird irgendwo in der Twain Komponente ausgelöst.
Wenn keiner eine Idee hat woran es liegt dann würde ich gerne wissen wie kann man an besten den Scanner einmal trennen Software-seitig und ihn dann neu erkennen ? (Gerät deaktivieren und wieder aktivieren ohne das der Nutzer das macht.)




Ich hoffe das mir jemand helfen kann.

hathor 12. Feb 2014 12:45

AW: Delphi Twain
 
Zitat:

Zitat von ngott2 (Beitrag 1247537)
Wenn keiner eine Idee hat woran es liegt dann würde ich gerne wissen wie kann man an besten den Scanner einmal trennen Software-seitig und ihn dann neu erkennen ? (Gerät deaktivieren und wieder aktivieren ohne das der Nutzer das macht.)


Das sollte mit DEVCON gehen.
Suche bei msdn devcon.

Guido R. 12. Feb 2014 13:33

AW: Delphi Twain
 
Benutzt Du die DelphiTwain-Komponente von Kluug ?

IdF. kannst Du doch mit fTwain.SourceCount leicht ermitteln, wie viele Quellen Dir zur Verfügung stehen
und für den Fall dass Du mehrere Sourcen hast, kommst Du über FTwain.Sources[x] an alle relevanten
Informationen und somit auch an den Index einer bestimmten Source.

Gruß

Guido R.

ngott2 12. Feb 2014 14:19

AW: Delphi Twain
 
Ich verwende folgende Twain Komponente http://delphitwain.sourceforge.net/

ngott2 12. Feb 2014 14:34

AW: Delphi Twain
 
Ich habe es jetzt so gelöst wenn mehr als ein Scaner gefunden werden dann muss man ihn einmal auswählen und den behält er dann bis das Programm neu gestartet wird.

Bloß das der Scaner neu erkannt werden muss macht mir noch Bauchschmerzen.
Und ihn einfach einmal zu deaktivieren und wieder aktivieren finde ich ein bisschen unsauber. Aber ich werde es vorerst so lösen.

Danke ihr beiden.

Guido R. 12. Feb 2014 14:52

AW: Delphi Twain
 
Ähm... ja.
Im Grunde die gleiche Komponente, nur dass diese Version seit 2004 nicht mehr verändert wurde.
Unter www.kluug.net/delphitwain.php findest Du eine Unicode-fähige Version vom 21. Dezember 2013.
Vielleicht löst eine aktuelle Version Dein Problem direkt.

Wie gehst Du grundsätzlich vor ?
Führst Du das LoadLibrary zu Programmstart aus und gibst die Library zum Programmende wieder frei,
oder führst Du LoadLibrary und UnloadLibrary bei Bedarf aus ?

Gruß
Guido R.

ngott2 12. Feb 2014 15:12

AW: Delphi Twain
 
So gehe ich vor

ftwain gibt es auf jeden Fall schon.

Code:
  FreeAndNil(ftwain);
  fTwain :=TDelphiTwain.Create(nil);
  try
    if fTwain.LoadLibrary then
    begin
      fTwain.SourceManagerLoaded := True;
      {Allow user to select source}
      SelectedSource := fTwain.SelectSource;
      ShowMessage(IntToStr (fTwain.SourceCount));
      if (SelectedSource <> -1) then
      begin
        {Load source, select transference method and enable display interface}
        fTwain.Source[SelectedSource].Loaded := True;
        {Show scanconfig!}
        fTwain.Source[SelectedSource].ShowUI := False;
        fTwain.Source[SelectedSource].Enabled := True;
      end
      else
      begin
        ShowMessage('Twain is not installed.');
      end;
    end;
  except
    ShowMessage('Twain is not installed.');
  end;

ngott2 12. Feb 2014 15:36

AW: Delphi Twain
 
Mit der neuen Twain Unit geht es wirklich ohne Probleme danke :)

Guido R. 12. Feb 2014 15:46

AW: Delphi Twain
 
Ich würde nicht bei jedem Aufruf die Komponente zerstören und neu aufbauen...
Ausserdem wo gibst Du an, was mit dem gescannten Bild passieren soll und dass nach einem Bild Schluss sein soll ?

Probier mal anstelle von
Delphi-Quellcode:
   FreeAndNil(ftwain);
   fTwain :=TDelphiTwain.Create(nil);
das hier :

Delphi-Quellcode:
 
  if not Assigned(fTwain)
   then begin
         fTwain := TDelphiTwain.Create(Self);
         fTwain.OnTwainAcquire := fTwainTwainAcquire;
        end;
{...}

Delphi-Quellcode:
procedure TForm1.FTwainTwainAcquire(Sender: TObject; const Index: Integer;
  Image: TBitmap; var Cancel: Boolean);
begin
  Image.SaveToFile('C:\Temp\MyImage.BMP'); {Mach was mit dem Bild}
  Cancel := TRUE; {Nur ein Bild scannen}
end;
Wenn Du dann noch SelectedSource global definierst, mit -1 initialisierst und nur mit fTwain.SelectSource
neu zuweist, wenn der Wert für SelctedSource=-1 ist, dann kannst Du die Abfragen nach der Scanquelle auf
einmal pro Programmausführung reduzieren ;)


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