Einzelnen Beitrag anzeigen

Kellerassel

Registriert seit: 31. Aug 2003
Ort: NRW
24 Beiträge
 
Delphi 2010 Professional
 
#1

Grid drucken mit Zeilen umbruch (wordbreak)?

  Alt 7. Apr 2004, 21:20
Habe ne Frage zum Stringgrid
Ich kann mein grid zwar drucken, aber der Text in meinem grid wird nicht mit Zeilenumbruch gedruckt. beim anzeigen ist alles richtig mit DT_CENTER+DT_WORDBREAK kann mir jemand helfen?

ich verwende folgende (bereit bekannte) druck procedure

Delphi-Quellcode:
procedure GridDruck(grd:TStringGrid;links,oben:word;scal:double);
var
  x,y,li,ob,re,un,waag,senk,h,a: integer;
  s: string;

function rech(i,j:integer):integer;
begin
  result:=round(((i*j) / 72) * scal);
end;

begin
  if scal > 0 then
  begin
    waag:=getdevicecaps(printer.handle,logpixelsx);
    senk:=getdevicecaps(printer.handle,logpixelsy);
    links:=rech(links,waag);
    oben:=rech(oben, senk);
    a:=rech(3,waag);
    li:=getdevicecaps(printer.handle,physicaloffsetx)+1+links;
    with printer do
    begin
      s:='Grid-Druck';
      title:=s;
      BeginDoc;
      canvas.font:=grd.font;
      canvas.font.size:=round((grd.font.size / 0.72) * scal);
      
      // meine IDee
     // Falsch SetTextAlign(canvas.Handle,TA_CENTER+DT_wordbreak);
     
      h:=canvas.textheight(s);
      canvas.pen.color:=$333333;


   for x:=0 to grd.colcount-1 do
      begin
        if grd.gridlinewidth > 0 then
        begin
          canvas.pen.style:=pssolid;
          canvas.pen.width:=1;
        end
        else
          canvas.pen.style:=psclear;
        ob:=getdevicecaps(printer.handle,physicaloffsety)+1+oben;
        re:=li+rech(grd.ColWidths[x]+1,waag);
        for y:=0 to grd.rowcount-1 do
        begin
          un:=ob+rech(grd.RowHeights[y]+1,senk);
          if (x < grd.fixedcols) or
             (y < grd.fixedrows) then
            canvas.brush.color:=grd.fixedcolor
          else
          canvas.brush.color:=grd.color;
          canvas.rectangle(li,ob,re,un);
          canvas.brush.style:=bsclear;
          //x,y,text
          canvas.textrect(rect(li+a,ob+1,re-a,un-1),
          li+a,ob+(un-ob-h)div 2,grd.Cells[x,y]);
          ob:=un;

        end;
        canvas.brush.color:=clwhite;
        canvas.pen.style:=psclear;
        canvas.rectangle(li,ob+1,re,ob+h);
        li:=re;
      end;
      enddoc;
    end;
  end;
end;
[edit=Admin]Code in Delphi-Tags ([ delphi]...[ /delphi]) gesetzt. Nächstes Mal bitte selber machen. Mfg, Daniel[/edit]
Auf jede komplizierte Frage gibt es eine kurze knappe Antwort, die falsch ist.
  Mit Zitat antworten Zitat