Funkcja drukujÄ…ca tabelÄ™ StringGrid

dział ogólny

Funkcja drukujÄ…ca tabelÄ™ StringGrid

Nowy postprzez Pitek » Å›roda, 16 grudnia 2009, 23:12

Używam funkcji podanej w tutku na stronie Barona. Jednak moja tabela jest zbyt duża i nie mieści sie na stronie A4 i funkcja ta prawie wszędzie wstawia "...".
Moje pytanie : Jak zmodyfikować kod tej funkcji aby drukowanie odbywało się podobnie jak to jest w Excelu. Czyli drukowanie normalnych rozmiarów z dostosowaniem tylko szerokościowym przy druku poziomym (bo tylko tak będzie drukowana ta tabela) a obcięta reszta tabeli drukowała by się na następnej stronie.I tak np. mając 2 kartki z dostosowaniem szerokościowym w druku poziomym otrzymałbym 2 pełne kartki i 2 resztki brakujące do poprzednich.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: Funkcja drukujÄ…ca tabelÄ™ StringGrid

Nowy postprzez Cyfrowy Baron » czwartek, 17 grudnia 2009, 11:51

Trzeba opracować nowy algorytm. Jak zapewne zauważyłeś, za przeniesienie drukowania na nową stronę odpowiedzialny jest ten mechanizm:

Kod: Zaznacz cały
for(int i = 0; i < Grid->RowCount; i++)
{
.....
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();
}


Czyli ten fragment kodu musisz wyrzucić:

Kod: Zaznacz cały
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;
}


Potrzebujesz też dodatkowej pętli do obliczania szerokości kolumn, a potem postępujesz podobnie jak z wierszami, tylko zamiast Grid->RowHeights[i] potrzebujesz Grid->ColWidths[j].
Przeanalizuj kod i dodaj mechanizm przerzucający na nową stronę, w przypadku gdy kolumny nie mieszczą się na jednej stronie, wzoruj się przy tym na mechanizmie odnoszącym się do wysokości (Heights) tabeli.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Pitek
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Funkcja drukujÄ…ca tabelÄ™ StringGrid

Nowy postprzez Pitek » niedziela, 20 grudnia 2009, 17:10

Bardzo dziękuję za całą pomoc udzieloną mi w temacie mojego programu !
Dałem rade z tą funckją.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Google [Bot] i 5 gości