Newsgroup: it.comp.lang.delphi
Titolo: stampare moduli in d5

Non è la prima volta che chiedo aiuto su questo tema, ma non ancora
riesco a trovare la soluzione, quindi propongo ancora una volta il
quesito.
Devo stampare dei moduli prestampati su fogli a4 quindi devo riempire
gli spazio di nome cognome etc....
Uso la Unit Printers e imposto la procedura di stampa in questo modo:
procedure stampamodulo;
begin
PRINTER.begin.doc
PRINTER.CANVAS.TEXTOUT(TARATURA.DX+POSIZIONE_DX_NOME,TARATURA.GIU+POSIZIONE_GIU_NOME,
NOME)
PRINTER.CANVAS.TEXTOUT(TARATURA.DX+POSIZIONE_DX_COGNOME,TARATURA.GIU+POSIZIONE_GIU_COGNOME,
COGNOME);
PRINTER.NEXTPAGE;
PRINTER.ENDdoc;
end;
Questa procedura riempie i campi del mio modulo sull mia stampante che
è settata sui 360 dpi, ma se setto i 180 o vado su una stampante che
ha una capacità di risoluzione grafica maggiore, le scritte non
corrispondono.
Come posso fare per stampare in posizioni relative esatte
indipendentemente dalla risoluzione di stampa impostata?
Faccio presente che D5 Standard non supporta ne dbase nè qreport,
quindi devo stampare a basso livello.
Grazie!
Tos_att+x*interlinea,carattere);

Se hai pazienza  forse domani ti posto un po' di codice, ho fatto molta
reportistica con Delphi 1 tutta a manina ...

Allora, questo è il codice, si basa tutto su queste tre funzioni, ci sono
riferimenti a tabelle mie ma mi sembra tutto chiaro, prova un po'.
Non chiedermi il perchè dei nomi di certi parametri (gino :PP) ...
function  TSchedeFRM.StampaLinea(var gino: TFontStyles; var Numeropagina:
integer; var Y:integer;X,FontSize,InterLinea :
 Integer; Stringa, NomeFont: string; Printer: TPrinter): integer;
begin
     Stampres:=GetdeviceCaps(Printer.handle,LOGPIXELSY)/150;
     if Printer.Printing = True then
     begin
     end
     else
     begin
         Printer.Begindoc;
         Y := StampaIntestazione(gino,NumeroPagina,Printer,X,Y);
     end;
     if Y > (Printer.PageHeight - Printer.Canvas.TextHeight('Yy')*3) then
     begin
         Printer.NewPage;
         Y := StampaIntestazione(gino,NumeroPagina,Printer,X,Y);
     end;
   {  Printer.canvas.Font.Name:=Printer.Fonts[5];
     Printer.Canvas.Font.Size:=FontSize;}
     Printer.Canvas.Textout(X,Y,Stringa);
     Y:=Y + Printer.Canvas.TextHeight('Yy') + Interlinea;
     result := Y;
end;
function TSchedeFRM.StampaIntestazione(var gino:TfontStyles; var
NumeroPagina: integer; Printer:TPrinter;X:integer;var Y :
integer): integer;
var
    Info               : PBitmapInfo;
    InfoSize           : Longword;
    Image              : Pointer;
    ImageSize          : Longword;
    incrementa         : integer;
    Salvax             : integer;
    SalvaY             : integer;
    Altimmagine        : integer;
    Contimmagine       : integer;
begin
     Stampres:=GetdeviceCaps(Printer.handle,LOGPIXELSY)/150;
Y:=0;
Printer.Canvas.Font.Size:=round(10{*stampres});
Printer.Canvas.Font.Style:=[];
Printer.Canvas.Font.Style:=[];
WITH Cimmagine1.Picture.BitMap DO
Begin
     GetDIBSizes(Handle, InfoSize, ImageSize);
     Info  := AllocMem(InfoSize);
     Image := AllocMem(ImageSize);
     GetDIB(Handle, Palette, Info^, Image^);
     WITH Info^.bmiHeader DO
     Begin
        StretchDIBits(Printer.Canvas.Handle,
        X, Y,
((Printer.Canvas.TextHeight('Yy')+5)*6),((Printer.Canvas.TextHeight('Yy')+5)
*6),
        0, 0, biWidth, biHeight,
        Image, Info^, DIB_RGB_COLORS, SRCCOPY);
     End;
     FreeMem(Image, ImageSize);
     FreeMem(Info, InfoSize);
END;
    X:=X+((Printer.Canvas.TextHeight('Yy')+5)*7);
    incrementa:=Printer.Canvas.TextHeight('Yy')+5;
    Printer.Canvas.Textout(X,Y,'Galeno srl - Materie Prime Farmaceutiche');
    SalvaX:=X;
    X:=round(
    ((Printer.PageWidth)/2+(Printer.PageWidth)/4)+
    (((Printer.PageWidth)/4)-Printer.Canvas.TextWidth('Pagina
N°'+IntToStr(NumeroPagina)))/2);
    Printer.Canvas.Textout(X,Y,'Pagina N°'+IntToStr(NumeroPagina));
    X:=SalvaX;
    Y:=Y+incrementa;
    Printer.Canvas.Textout(X,Y,'Via Petrarca 53/b - 59015 Comeana - PO');
    Y:=Y+incrementa;
    Salvax:=X;
    Printer.Canvas.Font.Size:=round(20{*stampres});
    X:=round(
    ((Printer.PageWidth)/2)+
    (((Printer.PageWidth)/2)-Printer.Canvas.TextWidth('SCHEDA DI
SICUREZZA'))/2);
    Printer.Canvas.Textout(X,Y,'SCHEDA DI SICUREZZA');
    X:=SalvaX;
    Printer.Canvas.Font.Size:=round(10{*stampres});
    Printer.Canvas.Textout(X,Y,'tel. 0039-55-8719921/8   FAX
0039-55-8719926');
    Y:=Y+incrementa;
    Printer.Canvas.Textout(X,Y,'Partita IVA 01574520977');
    Y:=Y+incrementa;
    Salvax:=X;
    Printer.Canvas.Font.Size:=round(14{*stampres});
    Printer.Canvas.Font.Style:=[fsBold];
    X:=round(
    ((Printer.PageWidth)/2)+
    (((Printer.PageWidth)/2)-Printer.Canvas.TextWidth('Codice Galeno:  '+
Modulo.TBLSchesi.FieldByName('Codice').AsString))/2);
    Printer.Canvas.Textout(X,Y,'Codice Galeno:  '+
Modulo.TBLSchesi.FieldByName('Codice').AsString);
    Printer.Canvas.Font.Style:=[];
    X:=SalvaX;
    Printer.Canvas.Font.Size:=round(10{*stampres});
    Printer.Canvas.Textout(X,Y,'
http://www.galeno.it
  E-MAIL:
gal...@ats.it
');
    Y:=Y+incrementa;
    Printer.Canvas.Textout(X,Y,'Autorizzazione Regionale n° 8357 del
05/12/96');
    Y:=Y+incrementa;
    Y:=Y+incrementa;
    Printer.Canvas.Font.Size:=round(26{*stampres});
    Printer.Canvas.Font.Style:=[fsUnderline];
    X:=round(
    (
(((Printer.PageWidth))-Printer.Canvas.TextWidth(UpperCase(Modulo.TBLSchesi.F
ieldByName('Descrizione').Asstring)))/2));
Printer.Canvas.Textout(X,Y,UpperCase(Modulo.TBLSchesi.FieldByName('Descrizio
ne').Asstring));
    Printer.Canvas.Font.Style:=[];
    Y:=Y+incrementa;
    Printer.Canvas.Font.Size:=round(10{*stampres});
    X:=0;
    Y:=Y+incrementa;
    Y:=Y+incrementa;
SalvaY:=Y;
AltImmagine:=trunc(((Printer.PageHeight)-Y)/10);
for Contimmagine := 1 to 9 do
begin
WITH Cimmagine2.Picture.BitMap DO
Begin
     GetDIBSizes(Handle, InfoSize, ImageSize);
     Info  := AllocMem(InfoSize);
     Image := AllocMem(ImageSize);
     GetDIB(Handle, Palette, Info^, Image^);
     WITH Info^.bmiHeader DO
     Begin
        StretchDIBits(Printer.Canvas.Handle,
        X, SalvaY,
(Printer.pageheight+trunc(printer.pageheight/100*14)),Altimmagine,
        0, 0, biWidth, biHeight,
        Image, Info^, DIB_RGB_COLORS, SRCCOPY);
     End;
     FreeMem(Image, ImageSize);
     FreeMem(Info, InfoSize);
     SalvaY:=SalvaY+Altimmagine;
END;
end;
    Y:=Y+incrementa;
    Y:=Y+incrementa;
    Printer.Canvas.Font.Style:=Gino;
    NumeroPagina:=NumeroPagina+1;
    result:=Y;
end;
procedure TSchedeFrm.StampaDavvero(printer:Tprinter);
var
   i,pippo,interlinea,Y,x: integer;
   NumeroPagina: Integer;
   gino: TFontStyles;
begin
     NumeroPagina:=1;
     interlinea:=5;
     Stampres:=GetdeviceCaps(Printer.handle,LOGPIXELSY)/150;
     Y:=0;
     x:=0;
     Printer.canvas.Font.Name:='Arial';
     Printer.Canvas.Font.Size:=round(10{*stampres});
     for i:=3 to (Modulo.TBLscheSi.FieldCount)-18 do
     begin
         Printer.Canvas.Font.Style:=[fsBold,fsUnderline];
         DBmemoPrint.DataField:=Modulo.TBLSChesi.Fields[i].FieldName;
         gino:=Printer.Canvas.Font.Style;
        {  Printer.Canvas.Font.Style:=[fsBold];}
          Interlinea:=5;
          case i of
          3: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'1 -
IDENTIFICAZIONE DEL PRODOTTO', 'Arial',Printer);
          4: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'2 -
COMPOSIZIONE/INFORMAZIONI SUGLI INGREDIENTI',
          'Arial',
          Printer);
          5: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'3 -
INDICAZIONI SUI PERICOLI', 'Arial',Printer);
          6: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'4 - MISURE
DI PRIMO SOCCORSO', 'Arial',Printer);
          7: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'5 - MISURE
ANTINCENDIO', 'Arial',Printer);
          8: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'6 - MISURE
IN CASO DI FUORIUSCITA OCCASIONALE',
          'Arial',
                    Printer);
          9: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'7 -
MANIPOLAZIONE E STOCCAGGIO', 'Arial',Printer);
          10: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'8 -
CONTROLLO ESPOSIZIONE/PROTEZIONE INDIVIDUALE',
          'Arial',
          Printer);
          11: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'9 -
PROPRIETA'' FISICHE E CHIMICHE', 'Arial',Printer);
          12: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'10 -
STABILITA'' E REATTIVITA''', 'Arial',Printer);
          13: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'11 -
INFORMAZIONI TOSSICOLOGICHE', 'Arial',Printer);
          14: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'12 -
INFORMAZIONI ECOLOGICHE', 'Arial',Printer);
          15: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'13 -
CONSIDERAZIONI SULLO SMALTIMENTO', 'Arial',
          Printer);
          16:
          begin
          Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'14 -
INFORMAZIONI SUL TRASPORTO', 'Arial',Printer);
          Modulo.TBLSChesi.edit;
          DBMapp2.DataField:=Modulo.TBLSchesi.FieldByName('info
trasporto').FieldName;
          DBMapp2.text:=memo1.text;
          Modulo.TBLSchesi.FieldByName('info
trasporto').Assign(DBMapp2.Lines);
 
Modulo.TBLSchesi.post
;
          end;
          17: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'15 -
INFORMAZIONI SULLA REGOLAMENTAZIONE', 'Arial',
          Printer);
          18: Y:= StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,'16 -
ALTRE INFORMAZIONI - BIBLIOGRAFIA', 'Arial',
          Printer);
     end;
     Printer.Canvas.Font.Style:=[];
     gino:=Printer.Canvas.Font.Style;
          for pippo:=0 to DBmemoPrint.lines.count do
          begin
               Y :=
StampaLinea(gino,NumeroPagina,Y,x,10,InterLinea,DBmemoprint.lines[pippo],
'Arial',Printer);
          end;
     end;
     Printer.EndDoc;
     ShowMessage('Stampa Inviata');
end;

 ha scritto nel messaggio
news:3c7d4148...@news.tiscalinet.it...
