Mam dwa problemy.
Pierwszy to problem z przekształceniem Baronowej funkcji drukującej zawartość tabeli StringGrid. Chodzi o przekształcenie tej funkcji tak aby to wykropkowanie w razie zbyt długiego wyrazu w komórce odnosiło się tylko do pierwszej kolumny a nie do całej tabeli. Heh niby proste ale mi takie głupoty potem w praktyce drukuje że proszę tutaj o radę. Jak to zrobić ?
Poniżej kod funkcji :
{
Printer()->BeginDoc();
int x = Printer()->PageWidth;
int y = Printer()->PageHeight;
int k;
float tmp = 0.0;
for(int i = 0; i < Grid->ColCount; i++)
tmp = tmp + (float)Grid->ColWidths[i];
float ratio_x = x/tmp;
int w, h = 0;
int ratio_y = Grid->Canvas->TextHeight("TEXT");
Printer()->Canvas->Brush->Style = bsClear;
for(int i = 0; i < Grid->RowCount; i++)
{
w = 0;
for(int j = 0; j < Grid->ColCount; j++)
{
String tekst = Grid->Cells[j][i];
//lab_1:
//if(Printer()->Canvas->TextWidth(tekst) + ratio_y >= Grid->ColWidths[j] * ratio_x)
//{
//tekst = tekst.SubString(1, tekst.Length() - 4) + "...";
//goto lab_1;
//}
Printer()->Canvas->Rectangle(
w * ratio_x,
h * ratio_x,
(w + Grid->ColWidths[j]) * ratio_x,
(h + Grid->RowHeights[i] + ratio_y) * ratio_x
);
Printer()->Canvas->TextOut(w * ratio_x + ratio_y, h * ratio_x + ratio_y, tekst);
w = w + Grid->ColWidths[j];
}
h = h + Grid->RowHeights[i] + ratio_y;
if((h + Grid->RowHeights[i] + (ratio_y * 4)) * ratio_x >= y)
{
h = 0;
Printer()->Canvas->TextOut(0, y - (ratio_y * 3), "strona " + (String)Printer()->PageNumber);
Printer()->NewPage();
}
}
Printer()->Canvas->TextOut(0, y - (ratio_y * 3), "strona " + (String)Printer()->PageNumber);
Printer()->EndDoc();
}
Mam tam komentarz w kilku miejscach tak tymczasowo przynajmniej nigdzie nie mam kropek.
A drugi. Czy da się i ew. jak przekazać informacje do PrintDialog żeby zawsze domyślnie drukował stronę w poziomie ?