Bitmap in gleicher größe drucken



  • Hallo,

    ich versuche seit langer zeit ein Bitmap zu drucken. Das schaffe ich auch problemlos. Doch leider weiß ich nicht wie ich es schaffen soll das diese bitmap auf jedem drucker in gleicher größer ausgegebn wird. Den Text und alles andere schaffe ich druckerunabhängig. Alles paßt wunderbar. Egal welchen drucker ich benutze. Nur wenn ich das bitmap drucken will dann kommt mal ein ganz kleines Bitmap und mal ein riesen ding. Ich habe schon versuche die bitmapdatiei zu ändern aber das bringt auch nicht viel. Kann mir jemand vieleicht helfen.

    Für eure hilfe bedanke ich mich jetzt schon.

    hier ist noch ein teil meine codes. vieleicht kann das euch helfen was ich schon versucht habe.

    TPrinter *P = Printer();
    TPrintDialog *PrintDialog1 = new TPrintDialog(this);
    double fh,fw;
    
    if(PrintDialog1->Execute())
    {
    P->Orientation=poLandscape;
    fw=P->PageWidth/296.0;
    fh=P->PageHeight/210.0;
    P->Title="MusterDruck";
    P->BeginDoc();
    P->Canvas->MoveTo(1,1);
    P->Canvas->Font->Name="Arial";
    P->Canvas->Font->Size=16;
    P->Canvas->TextOutA(int(207*fw),int(30*fh),"Hallo GmbH");
    P->Canvas->Font->Size=12;
    P->Canvas->TextOutA(int(207*fw),int(37*fh),"Peterstr. 987");
    P->Canvas->TextOutA(int(207*fw),int(42*fh),"Berlin");
    P->Canvas->TextOutA(int(207*fw),int(47*fh),"Tel.(0123)45679");
    P->Canvas->TextOutA(int(207*fw),int(52*fh),"Fax (0123)456789");
    P->Canvas->Font->Size=20;
    P->Canvas->TextOutA(int(11*fw),int(53*fh),"Datum: "+EditDatum->Text);
    Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
    Bitmap1->LoadFromFile("logo.bmp");
    Bitmap1->Width=int(40*fw);
    Bitmap1->Height=int(15*fh);
    P->Canvas->Draw(int(207*fw),int(5*fh),Bitmap1);
    P->Canvas->TextOutA(int(207*fw),int(22*fh),"Mustermann");
    P->Canvas->Font->Size=10;
    if(RadioButton4->Checked==true)
    {
      P->Canvas->TextOutA(int(11*fw),int(16*fh),"An: ...");
      P->Canvas->TextOutA(int(11*fw),int(21*fh),".....");
    }
    if(RadioButton5->Checked==true)
    {
      P->Canvas->TextOutA(int(11*fw),int(16*fh),"An: ....");
      P->Canvas->TextOutA(int(11*fw),int(21*fh),"......");
    }
    String name;
    if(RadioButton1->Checked==true)
    name="Andrea";
    if(RadioButton2->Checked==true)
    name="Simone";
    if(RadioButton3->Checked==true)
    name="Michaela";
    P->Canvas->TextOutA(int(11*fw),int(42*fh),"Von: "+name);
    P->Canvas->TextOutA(int(11*fw),int(63*fh),"Sehr geehrte Frau...");
    P->Canvas->TextOutA(int(11*fw),int(67*fh),"die nachfolgend .......");
    P->Canvas->Pen->Width=5;
    P->Canvas->MoveTo(int(11*fw),int(72*fh));
    P->Canvas->LineTo(int(290*fw),int(72*fh));
    P->Canvas->TextOutA(int(13*fw),int(73*fh),"Lieferant");
    P->Canvas->TextOutA(int(71*fw),int(73*fh),"Best.-Nr.");
    P->Canvas->TextOutA(int(92*fw),int(73*fh),"Sach-Nr.");
    P->Canvas->TextOutA(int(117*fw),int(73*fh),"Lieferschein");
    P->Canvas->TextOutA(int(143*fw),int(73*fh),"Bezeichnung");
    P->Canvas->TextOutA(int(207*fw),int(73*fh),"Menge");
    P->Canvas->TextOutA(int(228*fw),int(73*fh),"Kolli");
    P->Canvas->TextOutA(int(245*fw),int(73*fh),"Gewicht");
    P->Canvas->TextOutA(int(262*fw),int(73*fh),"Dokumente");
    P->Canvas->TextOutA(int(120*fw),int(77*fh),"Nummer");
    P->Canvas->TextOutA(int(222*fw),int(77*fh),"Zusammen");
    P->Canvas->TextOutA(int(248*fw),int(77*fh),"in kg");
    P->Canvas->MoveTo(int(11*fw),int(82*fh));
    P->Canvas->LineTo(int(290*fw),int(82*fh));
    
    P->EndDoc();
    }
    delete Bitmap1;
    delete PrintDialog1;
    

    Edit:
    Bitte die Code-Tags benutzen. Danke!

    [ Dieser Beitrag wurde am 17.01.2003 um 13:32 Uhr von Jansen editiert. ]



  • Das Problem liegt daran, dass verschiedene Drucker verschiedene Auflösungen haben. Du musst also zuerst die Auflösung auslesen, und darauf in Deinem Code entsprechend reagieren.

    Ein Punkt bleibt zwar ein Punkt, kann aber halt verschiedengrosse Ausmasse haben.



  • Du kannst ja mal unter folgendem nachsehen:

    SetMapMode
    
        GetWindowExtEx
        GetViewportExtEx
    
        SetWindowExtEx
        SetViewportExtEx
    

    Bibo


Anmelden zum Antworten