Kako si štampao iz TMemo i TListBox? Zapravo, u čemu je fora kod POS printera (nisam u toku)?
Za svoje potrebe sam jednom napravio instant kod koji štampa iz TListView-a. Kod je na C++ Builderu, ali je uglavnom čist VCL, pa ako te ne mrzi konvertuj ga u Delphi ili barem pogledaj ideju. Pošto ti se niko ne javlja, evo koda:
Code:
void TLanMsgMainForm::PrintItems( bool Selected )
{
ListView->Enabled = false;
try
{
int margin_pixels = 30;
Printer()->BeginDoc();
if ( Selected )
Printer()->Title = "Selektovane...";
else
Printer()->Title = "Sve...";
Printer()->Canvas->Font->Name = "Terminal";
Printer()->Canvas->Font->Size = 9;
Printer()->Canvas->Font->Charset = EASTEUROPE_CHARSET;
Printer()->Canvas->Font->Pitch = fpFixed;
int line = 0;
int real_line = 0;
for ( int i=0; i<ListView->Items->Count; i++ )
{
if ( Selected && !ListView->Items->Item[i]->Selected )
continue;
++line;
++real_line;
AnsiString LineToPrint =
Format( "%4s.%4s%10s%12s%11s%10s%25s%30s",
ARRAYOFCONST(( (IntToStr(real_line)),
(ListView->Items->Item[i]->SubItems->Strings[0]),
(ListView->Items->Item[i]->SubItems->Strings[1]),
(ListView->Items->Item[i]->SubItems->Strings[2]),
(ListView->Items->Item[i]->SubItems->Strings[3]),
(ListView->Items->Item[i]->SubItems->Strings[4]),
(ListView->Items->Item[i]->SubItems->Strings[5]),
(ListView->Items->Item[i]->SubItems->Strings[6]) )) );
int TH = Printer()->Canvas->TextHeight( LineToPrint );
int top = margin_pixels + ( line * TH );
if ( ( top + 2*margin_pixels + TH ) >= Printer()->PageHeight )
{
Printer()->NewPage();
line = 1;
top = margin_pixels + ( line * TH );
}
Printer()->Canvas->TextOut( margin_pixels, top, LineToPrint );
}
Printer()->NewPage();
Printer()->EndDoc();
}
__finally
{
ListView->Enabled = true;
}
}
A ovo što ti je rekao priki ima smisao. Bilo bi najbolje da ti je dizajn koda takav da ListView služi samo za PRIKAZ podataka, a da izvor ipak bude neki drugi kontejner, čak je i neki privremeni fajl dobar. Tada će ti i kod koji već kažeš da imaš za Memo i ListBox biti od koristi.