Einzelnen Beitrag anzeigen

schlumsch

Registriert seit: 15. Jun 2005
1 Beiträge
 
#1

Stringgrid und bmp auf eine seite drucken

  Alt 15. Jun 2005, 13:28
Hallo allerseits,

also ich hab folgendes Problem.
Ich habe eine Stringgrid welche ich erfolgreich über meinen Drucker ausgeben kann. Nun möchte ich allerdings gerne vor der Grid ein bmp-File ausdrucken, also auf die gleiche Seite. Kann mir wer sagen wie ich das bewerkstellige - ein simples printer.canvas.draw(x,y,bmp) geht irgendwie nicht.
Ich poste mal die Druckmethode... (zugegeben nicht von mir *g* )

Delphi-Quellcode:

procedure TAlarmform.termin_GridDruck(grd: TStringGrid; links, oben, vSpalte, bSpalte, vZeile,
  bZeile: integer; scal: double; farbig: boolean);
var
  Bmp: TBitmap;
  x, y, li, ob, re, un, waag, senk, a: integer;
  fix, grund, schrift: TColor;
  r: Trect;
  function rech(i, j: integer): integer;
  begin
    result := round(((i * j) / 72) * scal);
  end;
begin
  Bmp := TBitmap.Create;
  bmp.LoadFromFile(pdaten.prog_dir + '\data\pics\tman.bmp');
  if vZeile < 0 then vZeile := 0;
  if vSpalte < 0 then vSpalte := 0;
  if (bZeile >= grd.rowcount) or (bZeile < 0)
    then bZeile := grd.rowcount - 1;
  if (bSpalte >= grd.colcount) or (bSpalte < 0)
    then bSpalte := grd.colcount - 1;
  if vZeile > bZeile then begin
    a := vZeile;
    vZeile := bZeile;
    bZeile := a;
  end;
  if vSpalte > bSpalte then begin
    a := vSpalte;
    vSpalte := bSpalte;
    bSpalte := a;
  end;
  if (scal > 0) and (vZeile < grd.rowcount) and (vSpalte < grd.colcount)
    then begin
    if farbig then begin
      fix := grd.fixedcolor;
      grund := grd.color;
      schrift := grd.font.color;
    end else begin
      fix := clsilver;
      grund := clwhite;
      schrift := clblack;
    end;
    waag := getdevicecaps(printer.handle, logpixelsx);
    senk := getdevicecaps(printer.handle, logpixelsy);
    links := rech(links, waag);
    oben := rech(oben, senk);
    li := getdevicecaps(printer.handle, physicaloffsetx) + 1 + links;
    a := rech(3, waag);
        with printer do begin
      title := 'Grid-Druck';
      BeginDoc;
      Canvas.Draw(100, 50, Bmp);
      if grd.gridlinewidth > 0 then begin
        canvas.pen.color := $333333;
        canvas.pen.width := 1;
        canvas.pen.style := pssolid
      end else canvas.pen.style := psclear;
      canvas.font := grd.font;
      canvas.font.color := schrift;
      canvas.font.size := round((grd.font.size / 0.72) * scal);
      for x := vSpalte to bSpalte do begin
        ob := getdevicecaps(printer.handle, physicaloffsety) + 1 + oben;
        re := li + rech(grd.ColWidths[x] + 1, waag);
        for y := vZeile to bZeile do begin
          un := ob + rech(grd.RowHeights[y] + 1, senk);
          if (x < grd.fixedcols) or (y < grd.fixedrows)
            then canvas.brush.color := fix
          else canvas.brush.color := grund;
          canvas.rectangle(li, ob, re + 2, un + 2);
          r := rect(li + a, ob + 1, re - a, un - 2);
          drawtext(canvas.handle, pchar(grd.Cells[x, y]), length(grd.Cells[x, y]),
           r, DT_SINGLELINE or DT_VCENTER);

          ob := un;
        end;
        li := re;
      end;
      enddoc;
    end;
  end;
end;
  Mit Zitat antworten Zitat