Bonjour, je cherche le moyen de remplacer mon imprimante OKI par une imprimante informatique avec delphi. Mais le protocole lu par l'OKI est READY/BUSY.
Pouvez vous m'aider?
Merci d'avance
Version imprimable
Bonjour, je cherche le moyen de remplacer mon imprimante OKI par une imprimante informatique avec delphi. Mais le protocole lu par l'OKI est READY/BUSY.
Pouvez vous m'aider?
Merci d'avance
Bonjour,Ne voulez vous pas plutôt dire que vous voulez remplacer un imprimante matricielle par une imprimante graphique (laser, à jet d'encre, etc) ?
Et la, sauf erreur de ma part, je crois que vous posez mal le problème, à savoir comment envoyer des données à l'imprimante ?
Il vous faut oublier les concepts occupé/disponible (aka Ready/Busy) de l'imprimante et passer par les mécanismes communs à tous les pilotes d'imprimantes graphiques sous windows : dessiner dans un Canvas, que ce soit du texte, des éléments géométriques (ellipses, rectangles, etc), des images.
Voila une base de départ pour tout cela : L'impression avec Delphi
http://alphomega.developpez.com/imprimer/
http://alphomega.free.fr/delphi/tuto.../Imprimer1.htm
Bonjour, en fait je cherche effectivement à remplacer une imprimante matricielle OKI mais par un PC avec delphi qui li ce qui arrive sur le port com. Mais comme je ne connais pas comment lire ce protocole, je ne reçois que des caractères spéciaux! Avez vous une idée
Cordialement
Quel est le mode de l'imprimante (exemple pour une FX890) ? Emulation Epson LQ ? IBM ProPrinter ?
Bonjour tourlourou,
Excuse pour la réponse tardive, petit pb d'internet
Elle fonctionne avec le driver oki ML 280 Elite (IBM).
Je lis ici qu'elle peut émuler IBM graphics (autres références ici et là, par exemple).
Voilà les caractères spéciaux et leurs significations.
Bonjour Tourlourou,
J'ai consulté les sites que tu m'a indiqué mais ils ne m'aiderons pas!
Je te joint un .doc qui montre ce que je reçois avec mon appli delphi et un .pdf qui montre ce que reçois l'imprimante lors d'un test d'impression, tu comprendra mieux mon pb
Fred
Il faudrait voir le test dans un éditeur Hexa : sauve le Memo dans un fichier .txt et poste-le.
Je te file le code en même temps :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, CPort, CPortCtl, ComCtrls, jpeg, Menus; type TForm1 = class(TForm) ComPort1: TComPort; Timer1: TTimer; ComLed3: TComLed; Label3: TLabel; Timer2: TTimer; Button2: TButton; Edit1: TEdit; Edit2: TEdit; Image1: TImage; Button4: TButton; Label12: TLabel; Label13: TLabel; Label14: TLabel; Memo: TMemo; MainMenu1: TMainMenu; Fichier1: TMenuItem; Quitter1: TMenuItem; Aide1: TMenuItem; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure ComPort1RxChar(Sender: TObject; Count: Integer); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure MemoChange(Sender: TObject); procedure Quitter1Click(Sender: TObject); procedure Aide1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; AllowedDateTime: string; NomFich: string; NomFich1: string; Ext: string; LegalDateTime : string; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); // Gestion du Port Com begin If comport1.Port = 'COM1' Then begin comport1.SetDTR(true); // met à l'état de travail "0" la sortie DTR (+10V) comport1.SetRTS(true); // met à l'état de travail "0" la sortie RTS (+10V) end Else begin comport1.SetDTR(false) ; comport1.SetRTS(false); end; end; procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled:=true; Application.Title:='Alarmes CMR'; end; // Retourne un string sous la forme "ddmmyyyyhhmmss" : function AllowedStrDateTime(const sDate, sTime: string): string; var AllowedStrDate, AllowedStrTime: string; begin AllowedStrDate := Copy(sDate, 1 , 2) +' '+ Copy(sDate, 4, 2) +' '+ Copy(sDate, 7, 4); AllowedStrTime := Copy(sTime, 1, 2) +'H'+ Copy(sTime, 4, 2) +'min'+ Copy(sTime, 7, 2)+'s'; Result := AllowedStrDate + ' à ' + AllowedStrTime; end; procedure TForm1.Timer2Timer(Sender: TObject);// gestion de date et heure, Enregistrement Auto const EnregistAuto=('00:00:00'); Begin label14.Caption := FormatDateTime('dddddd tt', Now); Edit1.Text := DateToStr(Date); Edit2.Text := TimeToStr(Time); if Edit2.Text = EnregistAuto then begin // envoi sur un disque local NomFich := 'E:\page test.txt '; Ext := ExtractFileExt(NomFich); Delete(NomFich, Pos(Ext, NomFich), Length(Ext)); AllowedDateTime := AllowedStrDateTime (Edit1.Text,Edit2.Text); NomFich := Format('%s %s %s', [NomFich, AllowedDateTime, Ext]); Memo.Lines.SaveToFile(NomFich); label12.Visible := true; label12.Caption := AllowedDateTime; { // envoi sur le disque X du réseau NomFich1 := 'X:\02 - Chef Mécanicien\Alames machine\Alarmes machine.txt '; Ext := ExtractFileExt(NomFich1); Delete(NomFich1, Pos(Ext, NomFich1), Length(Ext)); AllowedDateTime := AllowedStrDateTime(Edit1.Text,Edit2.Text); NomFich1 := Format('%s %s %s', [NomFich1, AllowedDateTime, Ext]); Memo.Lines.SaveToFile(NomFich1); memo.Clear (); } end; end; procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); // Gestion de lecture du port Com var mess : string; begin comport1.ReadStr(mess,count); memo.Lines.Text:= memo.Lines.Text + mess; end; procedure TForm1.Button2Click(Sender: TObject); begin showmessage('Nb de lignes ' + inttostr(memo.lines.Count)) ; end; procedure TForm1.Button4Click(Sender: TObject); begin // envoi sur un disque local NomFich := 'E:\page test.txt '; Ext := ExtractFileExt(NomFich); Delete(NomFich, Pos(Ext, NomFich), Length(Ext)); AllowedDateTime := AllowedStrDateTime (Edit1.Text,Edit2.Text); NomFich := Format('%s %s %s', [NomFich, AllowedDateTime, Ext]); Memo.Lines.SaveToFile(NomFich); label12.Visible := true; label12.Caption := AllowedDateTime; {// envoi sur le disque X du réseau NomFich1 := 'X:\02 - Chef Mécanicien\Alames machine\Alarmes machine.txt '; Ext := ExtractFileExt(NomFich1); Delete(NomFich1, Pos(Ext, NomFich1), Length(Ext)); AllowedDateTime := AllowedStrDateTime(Edit1.Text,Edit2.Text); NomFich1 := Format('%s %s %s', [NomFich1, AllowedDateTime, Ext]); Memo.Lines.SaveToFile(NomFich1); } End; procedure TForm1.MemoChange(Sender: TObject); begin SendMessage(Memo.Handle,WM_VSCROLL,SB_BOTTOM,0); // Permet au scrollBar de se positionner en bas du memo end; procedure TForm1.Quitter1Click(Sender: TObject); begin comport1.SetDTR(false); // met à l'état de repos "1" la sortie DTR (-10V) comport1.SetRTS(false); // met à l'état de repos "1" la sortie RTS (-10V) comport1.Connected:=false; close; end; procedure TForm1.Aide1Click(Sender: TObject); begin showmessage ('Enregistrement sur le ''E:\Journal alarmes CMR\alarmes machine.txt '' et ''X:\02 - Chef Mécanicien\Alarmes machine\Alarmes machine.txt ''à chaque passage à 0h, mais il est possible d''effectuer un enregistrement immediat avec la touche enregistrement.'); end; end.
Bonjour Tourlourou,
Est ce que ce que j'ai posté te donne une idée?
Bonjour à tous,
Après différents tests, je me suis rendu compte qu'en fait, la pace pour mon libellé n'était pas suffisante, et que donc elle se superpose avec la valeur du seuil!!
Je vais reformulé mon pb dans une autre discussion.
Merci