StringGrid - Begrenzungslinien der Zellen werden nicht gedruckt



  • Nach langem Nachforschen hier in den Beiträgen hab ich es geschafft, ein Stringgrid auszudrucken.
    Leider werden aber nur die Zellinhalte und die Zellfarben gedruckt, nicht aber die Begrenzungslinien 😕 . Auch eine Verbreiterung dieser Linien (GridLineWith) hat nichts gebracht. Ebenso nicht, wenn ich die Zellen nicht einfärbe.

    Wer hat einen Tip: Die Zellen mit Farbe, Inhalt und Zell-Begrenzungslinie auszudrucken, so dass der Ausdruck etwa so aussieht wie auf dem Schirm.

    Hier noch meine AusdruckRoutine:

    //....
    TPrinter *Prntr = Printer();
      zoom = Prntr->PageWidth  /( StringGrid1 -> Width  ); //Zoom für Blattgröße
    
      Prntr->BeginDoc();
      //auf Blattgröße vergrößern
      StringGrid1 -> Width =   StringGrid1 -> Width * zoom;
      StringGrid1 ->DefaultColWidth =  StringGrid1 ->DefaultColWidth  * zoom;
      StringGrid1 -> Height = StringGrid1 -> Height *  zoom   ;
      StringGrid1 ->DefaultRowHeight = StringGrid1 ->DefaultRowHeight * zoom;
      StringGrid1 -> Font ->Height = StringGrid1 -> Font ->Height * zoom;
      //Ausdrucken
      StringGrid1->PaintTo(Prntr->Handle, 200,200);
    
      Prntr->EndDoc();
    //....
      }
    

    Bis auf die fehlenden Begrenzungslinie funktioniert das Ganze recht passabel.

    Über eine Antwort würde ich mich freuen.

    Grüße von sehreilig



  • Hallo

    schalt die Begrenzungslinien des Grids aus und zeichne selber die Linien in deiner gewünschten Farbe.

    bis bald
    akari



  • Hallo Akari,

    danke für deine schnelle Antwort.
    Allerdings macht mich dein Tip ziemlich ratlos:

    1. bedeutet er, dass es deines Wissens wirklich keine Möglichkeit gibt, das Grid mit dessen Zellbegrenzungslinien auszudrucken ?

    2. Ich finde keine Linien in der Komponentenleiste zum Zeichnen (oder hab ich die übersehen ?)

    3. Meine Druckroutine dürfte dann nicht funktionieren, denn die druckt ja nur das Grid, nicht die zusätzlichen Linien.

    Es grüßt sehreilig



  • Hallo

    wenn du doch bereits die OnDraw.. Evente benutzt, weißt du doch das du alles mit den Canvas-Methoden alles selber zeichen kannst. Entweder nimmst du FrameRect oder LineTo.

    Wie druckst du denn das StringGrid aus?

    bis bald
    akari



  • Hallo akari,

    meine Ausdruckroutine hab ich weiter oben bekanntgemacht.
    Ich bin heut Abend auch darauf gekommen, die Linien mit LineTo zu zeichnen, konnte dies aber noch nicht so recht erproben.
    Ich werd mir auch mal FrameRect ansehen.

    Insgesamt hab ich Probleme, die Canvas-Methoden einzusetzen. Gibt es da eine gute Hilfe mit Beispielen ?
    Ich hab mir alles in der BorlandHilfe, den Foren und FAQs zusammengeholt, habe aber keinen rechten Überblick.

    Vielen dank nochmal
    Grüße vom sehreilig



  • Hallo

    achja, da steht ja PrintTo. Dann ist das doch kein Problem, denn dann werden auch alle Canvas-Operationen ausgedruckt.
    Zu den Methoden von Canvas kannst du in der BCB-Hilfe unter TCanvas nachlesen, dort gibt es auch Beispiele.

    bis bald
    akari



  • ist der zoom vergrössernd oder verkleinernd?

    wenn du verkleinerst, kann es durchaus passieren, dass die 1 pixel breiten gitterlinien verschwinden (werden einfach ins nirvana gezoomt).

    ausserdem veränderst du das stringgrid auf blattgrösse und fängst erst ab 200x200 an zu zeichnen.



  • @akari

    So, ich hab mich nun durchgebissen. Dank deines Tips hatte ich ja das Ziel vor Augen.
    Meine Lösung für die Linien:

    //jetzt noch 10 * 2 Linien ziehen
    for (int i = 0; i < 10; i++)
      {
       StringGrid1 ->Canvas->MoveTo( (StringGrid1->DefaultColWidth + StringGrid1 -> GridLineWidth )* i - StringGrid1 -> GridLineWidth , 0) ;
    
       StringGrid1->Canvas->LineTo( (StringGrid1->DefaultColWidth + StringGrid1 -> GridLineWidth ) * i - StringGrid1 -> GridLineWidth, StringGrid1->Width);
    
       StringGrid1 ->Canvas->MoveTo(0, (StringGrid1->DefaultColWidth + StringGrid1 -> GridLineWidth )* i - StringGrid1 -> GridLineWidth) ;
    
       StringGrid1->Canvas->LineTo(StringGrid1->Height,  (StringGrid1->DefaultColWidth + StringGrid1 -> GridLineWidth ) * i - StringGrid1 -> GridLineWidth);
       }
    

    Die Linien müssen nach allen anderen Zeichenoperationen gezeichnet werden, sonst werden sie wieder überschrieben.
    Also, nochmal danke für den Tip.

    @Sunday
    Der Zoom vergrößert, das eine Problem trat nicht auf.
    Das problem mit dem auf Blattgröße vergrößerten Grid und dem Rand trat bisher nicht auf, weil wohl durch den

    int zoom
    

    einiges hinter dem Komma wegfiel - Glück gehabt. Ich hab jetzt den zoom etwas verkleinert, jetzt sollte nichts mehr schiefgehen.
    Vielen dank von sehreilig


Anmelden zum Antworten