![]() |
AW: Hardware ansteuern
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. |
AW: Hardware ansteuern
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:
Hat jemand eine Idee? Erst mal vielen Dank für die bisherigen Antworten! :wink:
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. |
AW: Hardware ansteuern
Moin...
Zitat:
|
AW: Hardware ansteuern
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 |
AW: Hardware ansteuern
Die Lade stammt von METAPACE und ist das Modell METAPACE K1 mit RJ11-Bus über den Bondrucker. Der Bondrucker ist mit USB angeschlossen.
|
AW: Hardware ansteuern
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 |
AW: Hardware ansteuern
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. |
AW: Hardware ansteuern
Ich besitze einen EPSON TM-T 88V
|
AW: Hardware ansteuern
Und was sagt die Dokumentation von dem Drucker zum Thema Kassenlade öffnen?
Luggi |
AW: Hardware ansteuern
Es gibt die Möglichkeit, die Lade über den Treiber zu öffnen; ich würde es aber lieber mit Steuerzeichen machen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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