Forum

visual c++ drukowanie

[+] Twoje konto

Subskrybuj kanał najnowszych wypowiedzi w tym temacie

Wątek Forum > Porady > Programowanie > visual c++ drukowanie

Jak wydrukować RTF z kontrolki RichEdit
Idź do strony:1
Ocena: (Ocen: 0)
Wypowiedzi 1 - 2 z 2
 Gość PAWEŁ Kopiuj nick (78.133.238.*)
Wypowiedź dodana: 4 lipca 2013, 22:59:14
« Opcje

mam taki problem że nie wiem jak napisać programik drukujący richtext za pomocą przycisku, niby wszytko jest ok ale nie działa proszę o jakiś kod jak to ma wyglądać w richtext w przycisku żeby drukarka się obudziła

 Gość REKLAMA Kopiuj nick (*->*)
Wypowiedź dodana: 4 lipca 2013, 22:59:15

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (176.102.83.*) |  
Wypowiedź dodana: 6 lipca 2013, 12:37:28
« Opcje

Drukowanie obiektu RichEdit polega po prostu na utworzeniu Canvy drukarki i przeniesieniu na niego obrazu strona po stronie. Jako, że wszystko odbywa się poprzez komunikaty i WinAPI, kod jest dość uniwersalny.

W konwencji Pascala kod wygląda tak:

procedure RichEditPrint(RichEditHandle: Cardinal; PageWidth, PageHeight, LeftMargin, TopMargin, RightMargin, BottomMargin: Extended);
const
EM_FORMATRANGE = WM_USER + 57;
type
TRichCharRange = record
cpMin: Longint;
cpMax: LongInt;
end;
TRichFormatRange = record
hdc: HDC;
hdcTarget: HDC;
rc: TRect;
rcPage: TRect;
chrg: TRichCharRange;
end;
var
Range: TRichFormatRange;
LastChar, MaxLen, LogX, LogY, OldMap, PageW, PageH: Integer;
PageRect: TRect;
DC : HDC;
begin
FillChar(Range, SizeOf(TRichFormatRange), 0);
DC := GetDC(0);
LogX := GetDeviceCaps(DC, LOGPIXELSX);
LogY := GetDeviceCaps(DC, LOGPIXELSY);
try
PDFPrinter.BeginDoc;
// Initialize Page and output parameter
PageW := Round( PageWidth * LogX / 2.54);
PageH := Round( PageHeight * LogY / 2.54);
PageRect.Left := Round( LeftMargin * 1440 / 2.54);
PageRect.Right := Round( (PageWidth-RightMargin) * 1440 / 2.54);
PageRect.Top := Round( TopMargin * 1440 / 2.54);
PageRect.Bottom := Round( (PageHeight-BottomMargin) * 1440 / 2.54);
// Initilaize Format Parameters
LastChar := 0;
MaxLen := SendMessage(RichEditHandle, WM_GETTEXTLENGTH, 0, 0);
Range.rcPage := PageRect;
Range.chrg.cpMax := -1;
Range.hdcTarget := DC;
Range.hdc := DC;
SendMessage(RichEditHandle, EM_FORMATRANGE, 0, 0);
try
//!!!inicjujemy drukarkę
repeat
//Tu tworzymy nową stronę
Range.rc := PageRect;
Range.chrg.cpMin := LastChar;
Range.hdcTarget := //!!!uchwyt do canvy drukarki;
Range.hdc := //!!!uchwyt do canvy drukarki;
LastChar := SendMessage(RichEditHandle, EM_FORMATRANGE, 1, Longint(@Range));
until (LastChar >= MaxLen) or (LastChar = -1);
// !!!kończymy wydruk
finally
SendMessage(RichEditHandle, EM_FORMATRANGE, 0, 0); // flush buffer
end;
finally
ReleaseDC(0,DC);
end;
end;

Sama obsługa drukarki została całkiem przyzwoicie opisana tutaj:
http://cpp0x.pl/kursy/Kurs-WinAPI-C++/Zaawansowane/Drukowanie/372 - z tego wystarczy pobrać kod odpowiedzialny za zainicjowanie drukarki oraz zakończenie wydruku. Samo "przelanie" RTF na drukarkę jest już pokazane w powyższym kodzie.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 
Idź do strony:1

[+] Pokaż/odśwież listę czytających i monitorujących ten wątek

Podobne tematy:
Tytuł wątkuDziałWypowiedziWyświetleńOcenaOstatnia wypowiedź
WątekKody źródłowe kilku programów C/C++ i Visual C++
Komentarze do programu Kody źródłowe kilku programów C/C++ i Visual C++
Komentarze / Moje programy i teksty2161 28.05.2013 18:22:52
WątekKody źródłowe kilku programów C/C++ i Visual C++
Komentarze dotyczące programu Kody źródłowe kilku programów C/C++ i Visual C++
Komentarze / Moje programy i teksty21 016 26.02.2008 08:40:54

Nowa wypowiedź

Nowa wypowiedź
Nie jesteś zalogowany; będziesz traktowany jako gość!
Zaloguj Zaloguj
Nick (gość): | Przepisz ten kod [?]: 9dc42:
Tekst:

 

Subskrybuj kanał najnowszych wypowiedzi w tym temacie


Chcesz mieć też takie forum na swojej stronie? Napisz!

Strona istnieje od 25.01.2001
Ta strona używa plików Cookie
 
archive To tylko kopia strony wykonana przez robota internetowego! Aby wyświetlić aktualną zawartość przejdź do strony.
Ładowanie...

Optymalizowane dla przeglądarki Firefox
© Copyright 2001-2017 Dawid Najgiebauer. Wszelkie prawa zastrzeżone.
Ostatnia aktualizacja podstrony: 22.09.2014 12:12
Wszystkie czasy dla strefy czasowej: Europe/Warsaw