FastReport Delphi MultipleColumn nyomtatás

FastReport Delphi MultipleColumn nyomtatás
2022-09-19T22:48:04+02:00
2022-11-26T16:41:42+01:00
2022-11-26T17:00:33+01:00
csanesz
Sziasztok!

A programomban FastReport nyomtatvány kezelőt használok. Etikett címkéket szeretnék etikett papírra nyomtatni. Ezek már előre legyártott papírok, tehát a hordozoanyag tartja össze a papírt. A papírok előre be vannak vágva.
A riportban beállítottam a multiple column lehetőséget, és hogy balról jobbra nyomtassa az adatokat. Tehát egy 2 oszlop 7 sor esetén 1 oszlop 1 sor, 2 oszlop 1 sor és így tovább.
Ez így jól működik. Hogy tudom megoldani hogy az adatok pl a 4.sor 2.oszlopában kezdődjön?
A lényege az lenne hogy egy már kinyomtatott papírra tudjak tovább nyomtatni. 
Kicsit tákolásnak hangzik, de töltsem fel üres rekordokkal a tábla első x rekordját?

Köszönöm
Mutasd a teljes hozzászólást!

  • Pedig ez a "tákolás" a legegyszerűbb módja, hogy "pozícionáld".
    Mutasd a teljes hozzászólást!
  • Szia!

    Ezzel csak egy problémám adódik, hogy mi van abban az esetben, ha tényleg feltöltöm üres adatokkal az első X rekordot, viszont a report-on nem csak adatmezők vannak, hanem konstans szövegek, ábrák is, amit a designerben felraktam rá. Akkor azok ott maradnak, és mivel a report szabadon szerkeszthető lenne, nem tudom azt mondani, hogy ha üres az egyik adatmező, akkor a konstans szöveg és kép legyen láthatatlan, mivel akár több is lehet rajta.
    Mutasd a teljes hozzászólást!
  • Ezeket a konstans szövegeket és ábrákat el tudod rejteni, ha a kérdéses mező OnAfterData eseményében FastScript-tel elrejted. Pl:

    procedure memPartnerOnAfterData(Sender: TfrxComponent) ; begin memDate.Visible := <frxdsDelivery."PARTNER"> <> '' ; imgLogo.Visible := memDate.Visible ; end ;
    Mutasd a teljes hozzászólást!
  • Itt van arra lehetőség, mint a Delphiben a komponenseken végigmenni?

    For I:=0 To Form1.ComponentCount-1 Do Begin Component[I]. ... End;
    Esetleg a paraméterben átadott TfrxComponent lehet a megoldás erre?
    Mert akkor ki tudnám szűrni, hogy ami nem Adatmező típusú, azokat elrejtem.

    Az a gond, hogy mivel szabad szerkesztésű a nyomtatvány, így lehet hogy 2 kép, és egy konstans szöveg van rajta, lehet nincs is rajta szöveg, de lehet hogy kép nincs, de az is lehet hogy van 5 konstans szöveg.
    Mutasd a teljes hozzászólást!
  • Ebben az esetben az OnManualBuild-et javaslom, itt van példa, hogyan "pozícionáld" a Masterdata-t, persze neked kell kiszámolni.
    Mutasd a teljes hozzászólást!
  • Én ezt anno úgy tudtam végül megoldani, hogy:
    1.
     A főoldalra csak egy SubReport-ot tettem ki
    2.
     Létrehoztam néhány paramétert, amelyekre szükség volt.
    (Tehát minden adatot paraméterezve adtam át, nem kapcsoltam adatbázishoz a nyomtatást! )
    3.
     A Subreport minden elemének (LOGO, vonalkód, stb.) MEMO >> Script részébe bemásoltam, hogy:

    visible := [latszik];
    Height := [magas];

    4.
     és így pontosan meg tudtam határozni, mely részeket ugorja át, milyen legyen a rácsfelosztás, stb.
    https://pizzaprogram.hu/123/Delphi_Report_ontapados.jpg

    5.
    Itt a forrás legmacerásabb része:

    procedure TFrm_Torzskartyak.FR_TKBeginDoc; const c_left = 111; // pixel = 31.12mm .. mennyire vannak eltolva a memo-k var pv : TfrPictureView; im : TImage; mm : TfrMemoView; p : TfrPage; begin FR_TK.Title := 'Vonalkód-Etikett kártya nyomtatás - ' + matrica_meret.Items[matrica_meret.itemIndex]; FR_TK.DoublePass := True; p := FR_TK.Pages[0]; // arányszámok if (ed3_MargoBal.Value = 0) and (ed4_MargoFent.Value = 0) then p.UseMargins := WordBool(0) else p.UseMargins := WordBool(1); p.pgMargins := Rect(round(ed3_MargoBal.Value * c_pixel_per_mm_W), round(ed4_MargoFent.Value * c_pixel_per_mm_H), -1, -1); p.ColCount := ed1_oszlop.Value; p.ColGap := 0; Blokk_szeles := round(ed5_szeles.Value * c_pixel_per_mm_W) ; Blokk_magas := round(ed6_magas.Value * c_pixel_per_mm_H) ; Blokk_memoW := (Blokk_szeles - c_left) -5; // ha szélesebb, mint egy hitelkártya (85mm) if Blokk_memoW > (84 * c_pixel_per_mm_W) then Blokk_memoW := round(84 * c_pixel_per_mm_W); mm := TfrMemoView( FR_TK.FindObject('Memo1') ); mm.SetBounds(c_left, 0, Blokk_memoW, 24); mm := TfrMemoView( FR_TK.FindObject('Memo2') ); mm.SetBounds(c_left, 27, Blokk_memoW, 36); mm := TfrMemoView( FR_TK.FindObject('Memo3') ); mm.SetBounds(c_left, 63, Blokk_memoW, 40); if cb_etterem_Logo.Checked then begin im := Foform.img_LOGO; if im <> nil then begin pv := TfrPictureView( FR_TK.FindObject('Picture1')) ; if pv <> nil then pv.Picture.Assign(im.Picture); end; end; end;
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd