Drucken-das leidige größenproblem



  • Hi
    ich will ein TStringGrid ausdrucken...
    das klappt mit

    void __fastcall TForm1::PrintClick(TObject *Sender)//Print isn button
    {
    TPrinter *pri = Printer();
    TPrintDialog *PrintDialog1 = new TPrintDialog(this);
    if(PrintDialog1->Execute())
    {
    int wi = pri->PageWidth;
    pri->BeginDoc();
    Bon->PaintTo(pri->Handle,wi/2-212,0); //Bon ist das StringGrid
    pri->EndDoc();
    }
    }
    

    auch schon ganz gut aber
    was glaubt ihr wohl kommt jetzt... es ist minimal klein...
    wie kann ich das jetzt vergrößern... die breite(nur die breite ist mir erstma wichtig) bekomm ich mit pri->PageWidth in pixeln, aber wie vergrößere ich das Grid jetzt?
    ne formel, die das mit der breite des papiers berechnet, müsste ich dann nochma machen... 😃
    vorträglich ist gut
    beim zeichnen auf den canvas des drucker is gut
    nachträglich is auch gut :p

    wenn ich noch was vergessen hab, edit ichs noch...

    Ele



  • Du erstellst ein neues TBitmap und zeichnest da dein StringGrid rein.

    Dann kannst du mit StretchDraw das Bitmap auf den Drucker Canvas skalieren

    und als Info, das dir beim skalieren hilft:

    int PageHorzSize_px=Printer()->PageWidth;
    int PageVertSize_px=Printer()->PageHeight;
    int PageHorzSize_mm=GetDeviceCaps(Printer()->Handle,HORZSIZE);
    int PageVertSize_mm=GetDeviceCaps(Printer()->Handle,VERTSIZE);
    

    bzw. schau dir mal Allgemein GetDeviceCaps in der Hilfe an da bekommt man sehr
    viele Informationen über die Zeichenfläche



  • jetzt sieht mein code wie folgt aus, aber nun is nix mehr aufm ausdruck...

    void __fastcall TForm1::PrintClick(TObject *Sender)
    {
    TPrinter *pri = Printer();
    TPrintDialog *PrintDialog1 = new TPrintDialog(this);
    if(PrintDialog1->Execute())
    {
    Graphics::TBitmap *prt=new Graphics::TBitmap;
    pri->Title="Titel";
    pri->BeginDoc();
    Bon->PaintTo(prt->Canvas,0,0);
    pri->Canvas->Draw(0,0,prt);
    pri->EndDoc();
    }
    }
    

    übrigens nutze ich als drucker FreePDF_XP(damit ich nich soviel tintee verschwende^^) das gibt doch wohl keine probleme oder?

    ich hab das eh noch nicht so ganz verstanden...mit dem skalieren und so...
    es wär su lieb, wenn ihr ein bisschen mehr kot (sry, code) posten würdet...

    ➡ Ele



  • Du erstellt das Bitmap aber gibst den keine Größe an (Height/Width)

    und zum skalieren schau mal in der Hilfe nach StretchDraw da steht alles drinnen



  • alsoo
    das hab ich hingekriegt...
    mein problem war/ist dass ich den TStrinGrid nicht in den Bitmap bekomme, iwie scheint das mit TStrinGrid->PaintTo(prt->Canvas/*oder Handle*/,0,0); nicht zu klappen... wie mach ich das sonst?

    Ele(aba schon ma danke)



  • PaintTo benötigt das Handle der Zeichenfläche

    also

    PaintTo(prt->Canvas->Handle,0,0)
    


  • void __fastcall TForm1::PrintClick(TObject *Sender)
    {
    TPrinter *pri = Printer();
    TPrintDialog *PrintDialog1 = new TPrintDialog(this);
    if(PrintDialog1->Execute())
    {
    Graphics::TBitmap *prt=new Graphics::TBitmap;
    pri->Title="Titel";
    TRect tr=Rect(0,0,Bon->Width,Bon->Height);
    pri->BeginDoc();
    Bon->PaintTo(prt->Canvas->Handle,0,0);
    pri->Canvas->StretchDraw(tr,prt);
    pri->EndDoc();
    }
    }
    

    hmm. 😮 immernoch nix aumf Blatt????

    was mache ich blos falsch? 😡
    Ele



  • Du hast meinen Tip nicht verfolgt das Bitmap in der Größe an zu passen

    desweiteren erstellst du mit new neue Objekte und löscht diese nicht!

    TPrinter *pri = Printer();
    	TPrintDialog *PrintDialog1 = new TPrintDialog(this);
    	if(PrintDialog1->Execute())
    	{
    		Graphics::TBitmap *prt=new Graphics::TBitmap;
    		prt->Width = sgTable->Width;
    		prt->Height = sgTable->Height;
    		pri->Title="Titel";
    		TRect tr=Rect(0,0,sgTable->Width,sgTable->Height);
    		pri->BeginDoc();
    		sgTable->PaintTo(prt->Canvas->Handle,0,0);
    		pri->Canvas->StretchDraw(tr,prt);
    		pri->EndDoc();
    
    		delete prt;
    	}
    	delete PrintDialog1;
    

    so jetzt siehst du wieder das Bild aber immer noch so klein da ja der Drucker eine andere DPI hat als dein Bildschirm. Also musst du dein TRect tr so verändern das du deine gewünschte Druckgröße bekommst.



  • hey thx jetzt gehts...

    Du hast meinen Tip nicht verfolgt das Bitmap in der Größe an zu passen

    Du erstellt das Bitmap aber gibst den keine Größe an (Height/Width)

    ich dachte ich solls grade nicht in der größe angeben... 😮 vllt hab ich das auch nur valsch verstanden 🕶 aber egal jetzt gehts ja... die berechnungen für die vergrößereungen stell ich noch auf, und dann...

    Danke VergissEs

    mfg Ele


Anmelden zum Antworten