Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dimenzije RTF dokumenta u pixelima ili nekim drugim 'unitima'

[es] :: C/C++ programiranje :: Dimenzije RTF dokumenta u pixelima ili nekim drugim 'unitima'

[ Pregleda: 2512 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mirko Rajkovača
Subotica

Član broj: 18458
Poruke: 119
213.244.212.*



Profil

icon Dimenzije RTF dokumenta u pixelima ili nekim drugim 'unitima'27.03.2007. u 18:33 - pre 207 meseci
Kako mogu unapred da odredim dimenzije nekog rtf dokumenta u pixelima (ili nekim drugim jedinicama)? Tj. kako mogu da odredim gde je kraj jedne strane rtf-a i pocetak druge samo na osnovu rtf fajla i dimenzija papira na kojem se stampa?
Svaka ideja je dobrodosla
(izvinjavam se ako je tema off topic ali programiram u C++ pa sam je tu stavio)

Hvala unapred
Razlika izmedju softvera i hardvera je:
Softver je nesto sto mozes psovati, a hardver je... pa hardver je nesto sto mozes sutati
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Dimenzije RTF dokumenta u pixelima ili nekim drugim 'unitima'28.03.2007. u 08:52 - pre 207 meseci
Ne znam šta konkretno želiš da postigneš, ali možda ti ovaj kod pomogne. Kod je za BCB, a kako
se radi o API-jima, verovatno se može modifikovati i za druge kompajlere.

Koristim ga za određivanje širine i visine RichEdit prozora za prikaz prevoda u Di rečniku. To je neki
isečak koji sam uspeo da izolujem iz ostatka koda. Takođe, iz iskustva znam da sistemski DPI ima
strahovotog uticaja na celu ovu priču...

Dalje, svakako pretresi sajt Robert Dunn-a, koji je jedan od ljudi specijalizovanih za manipulacijom
RichText-om:
http://home.att.net/~robertdunn/Yacs.html
Ima dosta primaera, FAQ, i sl...

I konačno, šta fali nekom alatu za Reporting tipa QR, Rave reports, Cristalreports, itd?


Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   POINTL pt;
   int line_idx, line_len;
   int width = 0;
   int height = 0;

   int char_height;
   CHARFORMAT fmt;
   CHARRANGE cr;

   // twips->pixels
   HDC hdc = GetDC( RichEdit1->Handle);
   int LogicalPixelsY = GetDeviceCaps( hdc, LOGPIXELSY );
   ReleaseDC( RichEdit1->Handle, hdc );

   int RichEditLines = RichEdit1->Lines->Count;

   for ( int i=0; i<RichEditLines; i++ )
   {
      line_idx = RichEdit1->Perform( EM_LINEINDEX, i, 0 );
      line_len = RichEdit1->Perform( EM_LINELENGTH, line_idx, 0 );

      RichEdit1->Perform( EM_POSFROMCHAR, (WPARAM)&pt,  line_idx+line_len );
      if ( width < pt.x )
         width = pt.x;
   }

   for( int x=0; x<line_len; ++x )
   {
      memset( &fmt, 0, sizeof( fmt ) );
      fmt.cbSize = sizeof( fmt );
      fmt.dwMask = CFM_SIZE;

      cr.cpMin = ( line_idx + x );
      cr.cpMax = ( cr.cpMin + 1 );

      RichEdit1->Perform( EM_EXSETSEL, 0, (int)&cr );
      RichEdit1->Perform( EM_GETCHARFORMAT, SCF_SELECTION,(int)&fmt );
      RichEdit1->Perform( EM_POSFROMCHAR, (int)&pt,cr.cpMin );

      char_height = MulDiv( fmt.yHeight / 20, LogicalPixelsY, 72 );

      if ( height < ( pt.y + char_height ) )
         height = ( pt.y + char_height );
   }


   int MAGIC_NUMBER_FOR_HEIGHT = 6;
   int MAGIC_NUMBER_FOR_WIDTH = 6;

   RichEdit1->Height = height + MAGIC_NUMBER_FOR_HEIGHT;
   RichEdit1->Width = width + MAGIC_NUMBER_FOR_WIDTH;
}

 
Odgovor na temu

Mirko Rajkovača
Subotica

Član broj: 18458
Poruke: 119
82.208.250.*



Profil

icon Re: Dimenzije RTF dokumenta u pixelima ili nekim drugim 'unitima'30.03.2007. u 09:36 - pre 207 meseci
Hvala XFiles ovo mi je trebalo, samo mi jos jedna stvar nije jasna

Code:
char_height = MulDiv( fmt.yHeight / 20, LogicalPixelsY, 72 );

Sta pretstavljaju konstante 20 i 72?

Sto se tice pitanja sto ne koristim QReport ili nesto sl. - doradjujem neki postojeci engine koji koristi RTF stampu pa odatle i ovo.

Hvala jos jednom
Razlika izmedju softvera i hardvera je:
Softver je nesto sto mozes psovati, a hardver je... pa hardver je nesto sto mozes sutati
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Dimenzije RTF dokumenta u pixelima ili nekim drugim 'unitima'30.03.2007. u 10:55 - pre 207 meseci
Citat:

Code:

char_height = MulDiv( fmt.yHeight / 20, LogicalPixelsY, 72 );

Sta pretstavljaju konstante 20 i 72?


Deljenje sa 20 konvertuje twips-e u points-e, a onda se koristi MulDiv() da konvertuje points-e u pixel-e.

Uostalom, pogledaj kako se uopšte došlo do tog rešenja:
http://tinyurl.com/37h6nc
 
Odgovor na temu

[es] :: C/C++ programiranje :: Dimenzije RTF dokumenta u pixelima ili nekim drugim 'unitima'

[ Pregleda: 2512 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.