Elikkäs, olen jo jonkin aikaa tehnyt Delphillä ohjelmaa, joka tulostaa paperille nuottiviivastoja. Ohjelmassa annetaan joitakin säätöjä käyttäjälle, kuten nuottiviivastojen määrä/sivu ja tulostettavien sivujen määrän. Ongelmana on kuitenkin juuri tuo tulostaminen, Delphihän tulostaa tunnetusti kuvat paljon pienempänä kuin mitä ne ovat "luonnossa", joten sain käsiini koodin, joka suhteuttaa kuvan kirjoittimen resoluutioon:
procedure TForm1.Button1Click(Sender: TObject); var ScaleX, ScaleY: Integer; R: TRect; R2: TRect; begin Printer.BeginDoc; with Printer do try ScaleX := GetDeviceCaps(Handle, logPixelsx) div PixelsPerInch; ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch; R := Rect(250, 0, Image1.Picture.Width * ScaleX, Image1.Picture.Height * ScaleY); Canvas.StretchDraw(R, Image1.Picture.Graphic); finally EndDoc; end; end;
Mutta mitenkäs onnistuukin vaikkapa kymmenen nuottiviivaston tulostaminen? Olen jo kokeillut toistaa koodia erinimisillä muuttujilla, mutta tuloksetta. Tietenkin, jos joku tietää helpomman tavan niin sanokoon. (joku oli tehnyt mm. Visual Basicilla tämän tapaisen ohjelman)
Itse en Delphiä osaa, mutta luulisin, että paras tapa olisi tehdä for-looppi sopivalla askeleella, joka nostaa joka kerralla printterille kopioitavan kuvan kohdan y-arvoa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.