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!

 
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 teksty2175 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 029 26.02.2008 08:40:54
WątekKomputer w lato - jak zadbać o właściwe chłodzenie
Komentarze do porady Komputer w lato - jak zadbać o właściwe chłodzenie
Komentarze / Porady3330 17.08.2012 18:05:17
Wątekjak ocenicie to co piszePogaduchy271 2.11.2005 11:28:47
WątekJak odblokowac nokie 6300 ??Pogaduchy1561 13.04.2009 08:23:20

Nowa wypowiedź

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

 
* Wysyłając formularz wyrażasz zgodę na przetwarzanie przekazanych danych w zakresie wskazanym w Regulaminie

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.
Korzystając z niej wyrażasz zgodę na przetwarzanie danych a zakresie podanym w Polityce Prywatności.
Reklama  
archive To tylko kopia strony wykonana przez robota internetowego! Aby wyświetlić aktualną zawartość przejdź do strony.

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