|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Il fatto è che lui programma per console e non per DOS (la cosa è diversa)... Magari con una applicazione DOS funziona... |
|
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Quote:
Normalmente, nei sistemi multitasking (come Linux) non è possibile fare un'accesso alla memoria video in quanto ogni applicazione potrebbe fare il bello ed il cattivo tempo sullo schermo...sai che casino... Però, questo non vieta che vi siano delle zone di memoria il cui accesso (in sola lettura) viene permesso a tutte le applicazioni, e magari il nostro l'indirizzo incriminato è tra questi. C'è solo da provare Bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Ragazzi non ci capisco niente !!!! Mi aiutate a fare sta cosa molto più semplicemente ?
|
|
|
|
|
|
#24 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Prova a fare l'ultima cosa che ti ho scritto, cioè la chiamata alla funzione int86.
Se ti dà ancora errore prova a togliere il controllo fatto su result (cancelli tutte le righe che lo riguardano). Se non funziona ancora, Bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Il problema è che non capisco proprio quelle istruzioni cosa fanno .
|
|
|
|
|
|
#26 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Prova con questo codice :
Codice:
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;
void MyErrorExit(char *s)
{
cout << "Errore: " << s;
exit(1);
}
void main(void)
{
HANDLE hStdout;
SMALL_RECT srctReadRect;
CHAR_INFO chiBuffer[2000]; //80x25
COORD coordBufSize;
COORD coordBufCoord;
BOOL fSuccess;
// Get a handle to the STDOUT screen buffer to copy from and
// create a new screen buffer to copy to.
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if (! hStdout)
MyErrorExit("GetStdHandle");
cout << "Questa e' una prova" << endl << "ciao" << endl << "bau" << endl;
srctReadRect.Top = 0; // top left: row 0, col 0
srctReadRect.Left = 0;
srctReadRect.Bottom = 24; // bot. right: row 1, col 79
srctReadRect.Right = 79;
coordBufSize.Y = 25;
coordBufSize.X = 80;
coordBufCoord.X = 0;
coordBufCoord.Y = 0;
fSuccess = ReadConsoleOutput(
hStdout, // screen buffer to read from
chiBuffer, // buffer to copy into
coordBufSize, // col-row size of chiBuffer
coordBufCoord, // top left dest. cell in chiBuffer
&srctReadRect); // screen buffer source rectangle
if (! fSuccess)
MyErrorExit("ReadConsoleOutput");
ofstream f("prnfile.$$$");
for(int i=0; i<25; ++i, f << endl)
for(int j=0; j<80; ++j)
f << chiBuffer[j+i*80].Char.AsciiChar;
f.close();
system("type prnfile.$$$ > prn");
Sleep(1500);
DeleteFile("prnfile.$$$");
}
|
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Ho provato il codice . A livello di sintassi è ok infatti compila bene . Ma lo lancio e non mi stampa niente . Non si apre neppure la finestra della stampante .
|
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Potrebbe essere il fatto che la stampante non ha driver sotto dos ?
|
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In pratica con GetStdHandle si preleva l'handle dello standard output...
Con ReadConsolOutput si legge un rettangolo (srctReadRect) di corrdinate (0,0),(79,24) (cioè tutto lo schermo) e lo metto alla posizione (0,0) (coordBufCoord) in un buffer 80x25 (chiBuffer, la cui dimensione è specificata da coordBufSize)... Il buffer è del tipo CHAR_INFO in cui è specificata sia la caratteristica di ogni posizione (colore di sfondo, colore del testo, se lampeggia) e il carattere contenuto nella posizione (chiBuffer[x].Char.AsciiChar)... Ora scansiono il buffer (il carattere di posizione j,i è contenuto nella cella j+i*80) e scrivo ogni carattere nel file... Ogni volta che incremento la riga mando anche a capo ilf iel di testo... Dopo lo stampo ed elimino il file... |
|
|
|
|
|
#30 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#31 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Quote:
|
|
|
|
|
|
|
#32 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non so cosa dirti...altrimenti dobbiamo percorrere altre strade...
Tempo fa ho stampato del testo in una mia applicazione...guardo di tirarci fuori qualcosa... |
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Quote:
|
|
|
|
|
|
|
#34 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ecco qua:
Codice:
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;
void MyErrorExit(char *s)
{
cout << "Errore: " << s;
exit(1);
}
void main(void)
{
HANDLE hStdout;
SMALL_RECT srctReadRect;
CHAR_INFO chiBuffer[2000]; //80x25
COORD coordBufSize;
COORD coordBufCoord;
BOOL fSuccess;
// Get a handle to the STDOUT screen buffer to copy from and
// create a new screen buffer to copy to.
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if (! hStdout)
MyErrorExit("GetStdHandle");
cout << "Questa e' una prova" << endl << "ciao" << endl << "bau" << endl;
srctReadRect.Top = 0; // top left: row 0, col 0
srctReadRect.Left = 0;
srctReadRect.Bottom = 24; // bot. right: row 1, col 79
srctReadRect.Right = 79;
coordBufSize.Y = 25;
coordBufSize.X = 80;
coordBufCoord.X = 0;
coordBufCoord.Y = 0;
fSuccess = ReadConsoleOutput(
hStdout, // screen buffer to read from
chiBuffer, // buffer to copy into
coordBufSize, // col-row size of chiBuffer
coordBufCoord, // top left dest. cell in chiBuffer
&srctReadRect); // screen buffer source rectangle
if (! fSuccess)
MyErrorExit("ReadConsoleOutput");
string txtBuf;
PRINTDLG pd;
DOCINFO di;
ZeroMemory(&pd,sizeof (PRINTDLG)) ;
pd.lStructSize = sizeof (PRINTDLG);
pd.Flags = PD_ALLPAGES | PD_COLLATE | PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE | PD_HIDEPRINTTOFILE | PD_NOSELECTION;
pd.nCopies = 1;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Stampa orario";
di.lpszOutput = NULL;
di.lpszDatatype= NULL;
di.fwType = 0;
if(PrintDlg(&pd)!=0)
{
StartDoc(pd.hDC, &di);
StartPage(pd.hDC);
//modifica il 55 per regolare la stampa verticale (per avvicinare le linee)
int cy = ::GetDeviceCaps(pd.hDC, VERTRES)/55;
int y = 0;
for(int i=0; i<25; ++i)
{
txtBuf = "";
for(int j=0; j<80; ++j)
txtBuf += chiBuffer[j+i*80].Char.AsciiChar;
TextOut(pd.hDC, 0, y+=cy, txtBuf.c_str(), txtBuf.length());
}
EndPage(pd.hDC);
EndDoc(pd.hDC);
}
DeleteDC(pd.hDC);
}
|
|
|
|
|
|
#35 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Grandissimo !!! Hai utilizzato il driver di windows ? Soltanto una cosa : "Questa è una prova " mi è uscito scritto tutto attaccato . Come mai ? Ah... Cionci .. senti qua : ho dichiarato una variabile intera o reale . Quando il programma è in esecuzione l'utente potrebbe inserirmi un carattere quando io sto leggendo invece un intero . Questo genererebbe ub bel errore . C'è un metodo per ovviare ? Grazie ancora per stampa . Sei grande !!!
|
|
|
|
|
|
#36 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perchè ho sbagliato... Aspetta... Correggo il listato sopra...
|
|
|
|
|
|
#37 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Hai corretto ?
|
|
|
|
|
|
#38 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì
|
|
|
|
|
|
#39 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Ok ora va bene . Non oggi , magari domani , potresti spiegarmela passo passo questa funzione ? Per quanto riguarda il fatto della variabile ?
|
|
|
|
|
|
#40 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
C'è un metodo per ovviare, ma c'è molta teria del C++ dietro...
Si chiamano eccezioni... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:23.



















