StringGrid, kłopot z drukowaniem

0

Jak wydrukowac zawartosc pola stringGrid? Jak użyć komponentu PrinterSetupDialog aby móc ustawic opcje, np. strona drukowana ma byc jako Pozioma/Pionowa. Pilne!!

0

Wydaje mi się że sa dwie mozliwosci (gotowej funkcji drukowania stringrida chyba nie ma).

  1. Zapisujesz wszytsko do jakiejś bitmapy i drukujesz.
  2. Przepisujesz do memo czy richedita i stamtąd bezposrdnio juz drukujesz.

No ale tak czy naczej musisz zadbac o widocznosc wszytskich wpisow.
Ten temat był juz poruszany i gdzies na fourm jest gotowy kod wpisywania zawartosci Tlistview do Richedita, trzeba poszukac - to zawsze szybciej niz czekac.

0

Ale jak przepisac zawartosc stringgrida na bitmape?

0

Miesjce w ktore pisac znajdziesz w kodzie ktory jest gdzies na forum, o ktorym wspomnialem wczesniej , poszukaj, a potem to juz tylko bitmap.canvas.textout. Pokombinuj. No i jak zadajesz pytanie to moze jakos konkretniej bo to tak troche nieładnie oczekiwac ze ktos podsunie pod nos gotowy kod.

0

Wydaje mi się, że najłatwiej i chyba najlepiej będzie zrobić uniwersalną dla wszystkich tabelek procedurkę rysującą na Image.Canvas. Kiedyś taką robiłem i gdzieś ją chyba mam. No ale to tylko jakieś dwa dni roboty. Każdą komórkę opisywałem rect_komorki:TRect a potem to już można kombinować jak się tylko podoba włącznie ze scalaniem itd. Masz gotowy podgląd wydruku a drukowanie załatwią ci te same proc tylko Printer.Canvas

0

Ja wstawiłem to pod Event`a dla Button1 OnClick.
Wmiare proste, przejrzyste i działa!!!!

Procedure TForm1.Button1Click(Sender: TObject);
Const
x = 100; //margines lewy
y = 100; //margines gorny
odstep = 6; //odstep miedzy wierszami
Var
i,wiersz,wysokosc,skadx:integer;
Procedure drwiersz(nr: Integer);
Var
kolumna: Integer;
Begin
skadx:=x;
For kolumna:=0 To Sg1.ColCount-1 Do
Begin
Printer.Canvas.TextOut(skadx,y+i*wysokosc, Sg1.Cells[kolumna,nr]);
skadx:=skadx+Sg1.ColWidths[kolumna]*4;//tak jakos sobie wymyslilem
End; //mozna dac 3.5 ale wtedy Trunc(Sg1.ColWidths[kolumna]*3.5)
Inc(i);
End;

Begin
Printer.BeginDoc;
Printer.Canvas.Font:=Sg1.Font;
wysokosc:=Printer.Canvas.TextHeight(sg1.cells[0,0])+odstep;//sprawdzanie
i:=0; //wysokosci tekstu
drwiersz(0);
For wiersz:= 1 To Sg1.RowCount-1 Do
Begin
drwiersz(wiersz);
If ((i+1)*wysokosc)>Printer.PageHeight Then //sprawdzamy czy jeszce
Begin //mscimy sie na stronie;
i:=0;
Printer.NewPage;
drwiersz(0);
End;
End;
Printer.EndDoc;
End;

Powodzenia!!</image>

1 użytkowników online, w tym zalogowanych: 0, gości: 1