AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Hardware ansteuern

Ein Thema von Pfl · begonnen am 22. Okt 2012 · letzter Beitrag vom 29. Okt 2012
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#11

AW: Hardware ansteuern

  Alt 22. Okt 2012, 22:19
Nuja, die Funktion findest Du in #5...
Also beispielsweise vor Deinem Aufruf in den implementation Teil packen, oder in eine Unit (z.B. tools) verfrachten, die Deklaration in den interface-Abschnitt die Routine in den implementation Abschnitt un die Unit in die uses Deines "Aufrufformulars" übernehmen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Pfl

Registriert seit: 5. Jun 2012
Ort: Berlin
65 Beiträge
 
Delphi XE6 Architect
 
#12

AW: Hardware ansteuern

  Alt 23. Okt 2012, 21:14
Vielen Dank, Bummi. Ich hab den Fehler zwar behoben, leider will der dämliche Drucker nicht die Lade öffnen.

Hier ist der komplette Source:

Delphi-Quellcode:
unit Unit9;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, ComCtrls, ButtonWithColor, Registry, IniFiles,
  OleServer, CmAdmCtl, Printers, cyBaseButton, cyBitBtn;

type
  TForm9 = class(TForm)
    Image1: TImage;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    ComboBox1: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    Label3: TLabel;
    Edit1: TEdit;
    Label4: TLabel;
    Edit2: TEdit;
    Label5: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    Label6: TLabel;
    UpDown1: TUpDown;
    PrinterSetupDialog1: TPrinterSetupDialog;
    PrintDialog1: TPrintDialog;
    Edit3: TEdit;
    ComboBox4: TComboBox;
    Label7: TLabel;
    BitBtn1: TBitBtn;
    ComboBox5: TComboBox;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    ComboBox6: TComboBox;
    Edit4: TEdit;
    Edit5: TEdit;
    ComboBox7: TComboBox;
    Label11: TLabel;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    ComboBox8: TComboBox;
    Label12: TLabel;
    GroupBox5: TGroupBox;
    CheckBox5: TCheckBox;
    COMAdminCatalog1: TCOMAdminCatalog;
    RichEdit1: TRichEdit;
    cyBitBtn1: TcyBitBtn;
    procedure SpeedButton2Click(Sender: TObject);

    procedure CheckBox5Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure cyBitBtn1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);

  private
    { Private-Deklarationen }
      IniFile : TMemIniFile;
  public
    { Public-Deklarationen }
  end;
  function SendEscapeToPrinter(const PrinterName: String; Const S: AnsiString): Boolean;
var
  Form9: TForm9;
  Reg: TRegistry;
  Ini : TIniFile;
  p: TPrinter;
implementation

{$R *.dfm}

procedure TForm9.BitBtn1Click(Sender: TObject);
begin


  if PrintDialog1.Execute then
  begin
    printer.BeginDoc;
  printer.NewPage;
    printer.EndDoc;
    Application.MessageBox('Dokument wurde in Auftrag gegeben.','',mb_ICONINFORMATION or mb_OK);
  end;
end;

procedure TForm9.BitBtn2Click(Sender: TObject);
begin
WriteLn ('Hallo Text');
  WriteLn ('Jetzt wird abgeschnitten');
  Write (#029#086#065#010);

end;

procedure TForm9.BitBtn3Click(Sender: TObject);
begin

if SendEscapeToPrinter(ComboBox1.Text,Combobox7.Text) then
Application.MessageBox('Wurde die Lade geöffnet?','Impulstest Kassenlade',mb_ICONQUESTION or mb_YESNO);

end;



procedure TForm9.CheckBox5Click(Sender: TObject);
begin
  if CheckBox1.Checked=true then
  begin
  cyBitBtn1.Enabled:=true;
  end;
end;

procedure TForm9.cyBitBtn1Click(Sender: TObject);
begin
   Application.MessageBox('Möchten Sie ApoPlus 2010 wirklich in den Autostart-Ordner des Systems schreiben? Falls Ja, muss das System neu gestartet werden','Registry-Eintrag Autostart',mb_ICONWARNING or mb_YESNO);

end;

procedure TForm9.FormActivate(Sender: TObject);
var ini : TiniFile;
begin

  Ini:=TIniFile.Create('C:\Settings\Control.ini');
  try
    Combobox1.Text := Ini.ReadString('Printer', 'Output','') ;
    ComboBox2.Text := Ini.ReadString('Printer', 'Interface','') ;
    ComboBox3.Text := Ini.ReadString('Printer', 'Hersteller','') ;
    //Ini.ReadString('Printer', 'Anzahl', Edit1.Text);
    //Ini.ReadString('Printer', 'Speed', Edit2.Text);
    IF Ini.ReadString('Printer', 'AutoCutEnabled','') = 'YES'
    then CheckBox1.Checked := true
    else CheckBox1.Checked := false;


    Edit3.Text := Ini.ReadString('Printer', 'Breite','');

    //ComboBox4.Text := Ini.WriteString('Printer', 'Format' );

    if Ini.ReadString('Display', 'Enabled','') = 'YES'
    then CheckBox2.Checked := true
    else CheckBox2.checked := false;


    //ComboBox5.Text := Ini.WriteString('Display', 'Interface' );
    //ComboBox6.Text := Ini.WriteString('Display', 'Steuerzeichen');
    //Edit4.Text + Edit5.Text := Ini.WriteString('Display', 'Text' );

    //if CheckBox4.Checked
    //then Ini.WriteString('POS', 'Enabled', 'YES')
    //else Ini.WriteString('POS','Enabled','NO');

    //Ini.WriteString('POS', 'Algorithmus', ComboBox7.Text);

    //if CheckBox3.Checked
    //then Ini.WriteString('EC', 'Enabled', 'YES')
    //else Ini.WriteString('EC', 'Enabled', 'NO');

    //ComboBox8.Text := Ini.WriteString('EC','Interface');
  finally
    Ini.Free;

     p := TPrinter.Create;
  try
    ComboBox1.Items.Assign(p.Printers)
  finally
    p.Free;
  end;
end;
end;


procedure TForm9.SpeedButton1Click(Sender: TObject);

begin
  Ini:=TIniFile.Create('C:\Settings\Control.ini');
  try
    Ini.WriteString('Printer', 'Output', Combobox1.Text);
    Ini.WriteString('Printer', 'Interface', ComboBox2.Text);
    Ini.WriteString('Printer', 'Hersteller', ComboBox3.Text);
    Ini.WriteString('Printer', 'Anzahl', Edit1.Text);
    Ini.WriteString('Printer', 'Speed', Edit2.Text);
    if CheckBox1.Checked
    then Ini.WriteString('Printer', 'AutoCutEnabled', 'YES')
    else Ini.WriteString('Printer', 'AutoCutEnabled', 'NO');


    Ini.WriteString('Printer', 'Breite', Edit3.Text);
    Ini.WriteString('Printer', 'Format', ComboBox4.Text);

    if CheckBox2.Checked
    then Ini.WriteString('Display', 'Enabled', 'YES')
    else Ini.WriteString('Display', 'Enabled', 'NO');

    Ini.WriteString('Display', 'Interface', ComboBox5.Text);
    Ini.WriteString('Display', 'Steuerzeichen', ComboBox6.Text);
    Ini.WriteString('Display', 'Text', Edit4.Text + Edit5.Text);

    if CheckBox4.Checked
    then Ini.WriteString('POS', 'Enabled', 'YES')
    else Ini.WriteString('POS','Enabled','NO');

    Ini.WriteString('POS', 'Algorithmus', ComboBox7.Text);

    if CheckBox3.Checked
    then Ini.WriteString('EC', 'Enabled', 'YES')
    else Ini.WriteString('EC', 'Enabled', 'NO');

    Ini.WriteString('EC','Interface',ComboBox8.Text);
  finally
    Ini.Free;
  Application.MessageBox('Ihre Änderungen wurden übernommen. Eventuell muss das Programmm neu gestartet werden. Übername in C:\Settings\.','Änderungen gesichert',mb_ICONINFORMATION or mb_OK);
  Form9.Close;
end;
end;
procedure TForm9.SpeedButton2Click(Sender: TObject);
begin
  if Application.MessageBox('Sind Sie sicher, dass Sie abbrechen wollen?', 'Abbruch bestätigen', MB_ICONQUESTION or MB_YESNOCANCEL) = IDYES
  then close;
end;

function SendEscapeToPrinter(const PrinterName: String; Const S: AnsiString): Boolean;
type
  TPrnBuffRec = record
    bufflength: Word;
    Buff_1: array [0 .. 255] of AnsiChar;
  end;
var
  Buff: TPrnBuffRec;
  TestInt: Integer;
  OldIndex: Integer;
begin
  OldIndex := Printer.PrinterIndex;
  try
    Result := Printer.printers.IndexOf(PrinterName) > -1;
    Printer.PrinterIndex := Printer.printers.IndexOf(PrinterName);
    Printer.BeginDoc;
    TestInt := PassThrough;
    if Escape(Printer.Handle, QUERYESCSUPPORT, SizeOf(TestInt), @TestInt, nil) > 0 then
    begin
      StrPCopy(Buff.Buff_1, S);
      Buff.bufflength := StrLen(Buff.Buff_1);
      Escape(Printer.Canvas.Handle, PassThrough, 0, @Buff, nil);
      Result := True;
      Printer.EndDoc;
    end
    else
      Result := False;
  finally
    Printer.PrinterIndex := OldIndex;
  end;
end;
end.
Hat jemand eine Idee? Erst mal vielen Dank für die bisherigen Antworten!
Friedrich
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Hardware ansteuern

  Alt 24. Okt 2012, 05:48
Moin...
Zitat:
Hat jemand eine Idee?
...allerdings. Du hast dich auf den Quellcode gestürzt wie eine Fliege auf einen ...haufen. Du solltest erst mal klären wo die Geräte physikalisch dran hängen. Wenn deine Kassenlade am RS232 hängt kannst du Steuersequenzen zum Druckerport schicken wie du willst.
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Hardware ansteuern

  Alt 24. Okt 2012, 17:25
Was ist denn das für eine Kassenlade? Ich hab hier z.B. Exemplare, die hängen an einem Bondrucker dran. An den schickt man in einer bestimmten Schriftart ein bestimmtes Zeichen, dann geht die Kassenlade auf.

Also: Doku der verwendeten Hardware lesen oder zumindest mitteilen, was du genau für Hardware hast, mit der du reden sollst...

Luggi
  Mit Zitat antworten Zitat
Pfl

Registriert seit: 5. Jun 2012
Ort: Berlin
65 Beiträge
 
Delphi XE6 Architect
 
#15

AW: Hardware ansteuern

  Alt 27. Okt 2012, 21:21
Die Lade stammt von METAPACE und ist das Modell METAPACE K1 mit RJ11-Bus über den Bondrucker. Der Bondrucker ist mit USB angeschlossen.
Friedrich
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#16

AW: Hardware ansteuern

  Alt 28. Okt 2012, 10:07
Also, wenn das Teil nur am Bon-Drucker angeschlossen ist und nicht am PC direkt dann muss auch die Öffnung über den Bon-Drucker passieren. Womit wir wieder bei der Frage nach der Hardware wären: Was für ein Bon-Drucker ist das denn? Was steht denn in der Doku zum Drucker wie man den Kontakt für die Lade auslöst?

Luggi
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Hardware ansteuern

  Alt 28. Okt 2012, 10:58
Da gibt es mehrere Lösungsmöglichkeiten:

1. Kassenlade geht immer auf, wenn gedruckt wird: Kann man in der Regel bei den Druckereinstellungen so konfigurieren, keine weiteren Maßnahmen notwendig.

2. Steuercode an den Drucker in die Druckdaten mit aufnehmen; z.B. Schrift Control + Steuerzeichen. Lade geht auf wenn dieser Text geschickt wird. Nachteil ist, das wenn man nur das Steuerzeichen schickt ein leerer Papierschnipsel aus dem Drucker kommt.

3. Bei einigen USB-Druckern (z.B. Epson, Star usw) kann man einen virtuellen Comport erstellen und über diesen den Befehl zum Öffnen an den Drucker schicken. Ist wohl die beste Lösung, wenn man die Schublade über den Drucker steuert. Port darf immer nur kurz geöffnet werden, sonst funktioniert der Druck über den Windows-Treiber ev. nicht mehr.

4. Schubladenöffner mit USB-Anschluss verwenden: Kostet extra (rund 50 Euro) braucht Versorgungsspannung (12V) geht nur für 12V Schubladen.

5. Kassenrechner hat Schubladenanschluss: ev. Programmieraufwand, HW-Ports müssen gesetzt werden. Treiber notwendig. Bei jedem Hersteller anders.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
Pfl

Registriert seit: 5. Jun 2012
Ort: Berlin
65 Beiträge
 
Delphi XE6 Architect
 
#18

AW: Hardware ansteuern

  Alt 28. Okt 2012, 21:02
Ich besitze einen EPSON TM-T 88V
Friedrich
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#19

AW: Hardware ansteuern

  Alt 28. Okt 2012, 21:04
Und was sagt die Dokumentation von dem Drucker zum Thema Kassenlade öffnen?

Luggi
  Mit Zitat antworten Zitat
Pfl

Registriert seit: 5. Jun 2012
Ort: Berlin
65 Beiträge
 
Delphi XE6 Architect
 
#20

AW: Hardware ansteuern

  Alt 28. Okt 2012, 22:07
Es gibt die Möglichkeit, die Lade über den Treiber zu öffnen; ich würde es aber lieber mit Steuerzeichen machen.
Friedrich
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:32 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