Zwei TCharts auf ein Blatt drucken



  • hallo ^^

    also ich denke der Titel genügt als Frage..!
    Ich möchte zwei TCharts gleich auf ein Papier drucken können...
    also Hochformat und das erste oben, das zweite unten..
    hab aber leider keinen ansatz, wie ich das lösen könnte!

    Die Druckvorschau:

    ChartPreview(this,Chart1);
    

    hat mir ja sehr gefallen, bezweifle aber, dass man da das zweite
    Chart einfach so hinzufügen kann? 😕

    mfg
    wolfshuendchen



  • Das ist richtig. Das kann man nicht.
    Wenn du über die Variante mit dem Metafile gehst, die wir letztens diskutiert hatten, kannst du ja zwei Metafiles erzeugen und die dann passend auf dem Blatt positionieren.



  • hab ich schon befürchtet ^^'
    weil ich kann mit dem code nicht viel anfangen, da ich doch nur wirklich
    c kann.. und nicht cplusplus (wird zwar noch nachgeholt, aber nicht vor den
    abschlussprüfungen) -.-'
    und das is eben doof, da ich das ja eigentlich selbst schreiben will!

    also wenn ich das versuche und total scheitere *gg*, dann hoffe ich doch auf hilfe 😉



  • 🤡
    ich hab schon aufgegeben, weil das hier so nen interessanten papierverschleiss gibt *g* (und weil die Diagramme gar nicht so wollen wie ich 😉 )

    das hab ich mal gemacht ^^

    Controls::TBevelCut oldbevel = Chart1->BevelOuter;
        Chart1->BevelOuter = Controls::bvNone;
        TColor oldcolor = Chart1->Color;
        Chart1->Color = clWhite;
        std::auto_ptr<TMetafile> tmpmeta(Chart1->TeeCreateMetafile( true, Chart1->ClientRect));
    
        Controls::TBevelCut oldbevel2 = Chart2->BevelOuter;
        Chart2->BevelOuter = Controls::bvNone;
        TColor oldcolor2 = oldcolor;
        Chart2->Color =clWhite;
        std::auto_ptr<TMetafile> tmpmeta2(Chart2->TeeCreateMetafile( true, Chart2->ClientRect));
    
        int width, height;
        try
        {
            Printer()->Orientation = Printers::poPortrait;
            int pw(Printer()->PageWidth), ph(Printer()->PageHeight);
            width = pw-20;
            double fact = width*1.0/tmpmeta->Width;
            height = tmpmeta->Height*fact;
            if( (height + 100) > ph)
            {
               height = ph - 110;
               width = width*fact;
            }
            Printer()->BeginDoc();
            Printer()->Canvas->StretchDraw(Rect(10,100,width+10, height+100), tmpmeta.get());
            Printer()->Canvas->StretchDraw(Rect(10,!!!,width+10, height+100), tmpmeta2.get());
            Printer()->EndDoc();
        }
        __finally
        {
            Chart1->BevelOuter = oldbevel;
            Chart1->Color = oldcolor;
        }
    

    welche Zahl kommt denn am besten bei !!! hin? bei mir war das eine Diagramm plötzlich nicht mehr so hoch, dafür am richtigen Ort (von den oberen Ecken her)
    ^^'



  • Versuchs mal damit (ungetestet)

    Printer()->Orientation = Printers::poPortrait;
            int pw(Printer()->PageWidth), ph(Printer()->PageHeight);
            height = (ph - 30) / 2;
            double ratio1 = tmpmeta->Height / tmpmeta->Width;
            double ratio2 = tmpmeta2->Height / tmpmeta2->Width;
            double fact = std::min(double(height) / tmpmeta->Height, double(height) / tmpmeta2->Height);
            width = tmpmeta->Width * fact;
            if( (width + 20) > pw)
            {
               width = pw - 20;
            }
            Printer()->BeginDoc();
            Printer()->Canvas->StretchDraw(Rect(10,10,width+10, width*ratio1+10), tmpmeta.get());
            Printer()->Canvas->StretchDraw(Rect(10,width*ratio1+20,width+10, width*(ratio1+ratio2)+20), tmpmeta2.get());
            Printer()->EndDoc();
    


  • wolfshuendchen schrieb:

    ...
    ich hab schon aufgegeben, weil das hier so nen interessanten papierverschleiss gibt *g* [...]

    Tip: Installiere dir PDF-Creator, der gaukelt dem System einen Drucker vor und gibt die Druckseite als *.pdf aus... Das spart unheimlich Papier! 😉



  • Kolumbus schrieb:

    wolfshuendchen schrieb:

    ...
    ich hab schon aufgegeben, weil das hier so nen interessanten papierverschleiss gibt *g* [...]

    Tip: Installiere dir PDF-Creator, der gaukelt dem System einen Drucker vor und gibt die Druckseite als *.pdf aus... Das spart unheimlich Papier! 😉

    der is natürlich drauf, aber auf die idee muss man mal erst kommen 😉 danke!



  • @ Braunstein

    da gibts leider nur ganz viele schwarze striche zuoberst auf dem blatt :S



  • Geh mit dem Debugger durch und schau dir die werte für die Positionen und die Seitengrößen an. Vielleicht findest du den Fehler ja dann.
    Wenn ich Zeit habe kann ich es bei mir ja mal ausprobieren.



  • hm..

    folgendes scheint zu stimmen:
    width = 4107;
    height =2945;
    fact=8,97865...

    und bei den beiden ratios wohl dann nicht:

    ratio1= 328/504 =>0
    ratio2= 328/504 =>0

    was meinst du?



  • Das alte Integer-Divisions-Problem. Einfach einen der Dividenden nach double casten.

    double ratio1 = double(tmpmeta->Height) / tmpmeta->Width;
    double ratio2 = double(tmpmeta2->Height) / tmpmeta2->Width;
    

Anmelden zum Antworten