Einzelnen Beitrag anzeigen

messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#7

Re: StringGrid.OnDrawCell ohne Anzeige auslösen

  Alt 30. Mär 2007, 12:55
Zitat von uwewo:
Kannst Du mir sagen wie, oder durch welche function das Grid an den Drucker geschickt wird?
Würde das Problem gerne nachstellen.
Delphi-Quellcode:
  form := TTntForm.Create(Application);
  form.Width := 200; //nur damit das Grid nicht beschnitten wird. Denn auch dann
  form.Height := 300;//wird das OnDrawCell für nicht sichtbare Zellen übersprungen.
  SG := TTntStringGrid.Create(form);
  SG.Parent := form;
  SG.Align := alClient;
  SG.Font.Size := 8;
  //Zuweisung der Events - entspricht den Ondrawcell was auch im Form stehen könnte
  SG.OnDrawCell := ObjectUtils.SGDrawCell;
  SG.OnGetEditMask := ObjectUtils.SGGetEditMask;
  dpihor:=GetDeviceCaps(Printer.Handle, LOGPIXELSX);
  dpiver:=GetDeviceCaps(Printer.Handle, LOGPIXELSY);
  //in ShowHeizProg wird das Grid gefüttert - wird im Prog mehrfach benutzt
  //wenn die Forms gezeigt werden, wird auch OnDrawCell aufgerufen
  //im OnDrawCell werden die Größe der Zellen der Schrift angepaßt
  //und Zeilenumbrüche eingebaut.
  ShowHeizProg(SG,Eval.Heizprog);
  //form.ShowModal; -> damit gehts, aber dann muß ich ja das From wegklicken.
  
  //hier wird dann gedruckt. Zellenweise zu Fuß, da scheint es nichts besseres zu geben
  //am elegantesten wäre es, ans Canvas des Grids zu kommen aber das läuft nicht.
  PrintGrid(PP.Canvas,SG,dpihor,dpiver,x,y);

  SG.Free;
  form.Free;
Im Prinzip könnte man das Malen von Kästen und Text ja gleich ganz zu Fuss machen statt über ein Grid aber alle anderen Routinen sind ja schon vorhanden. Überhaupt ist die Windows-Druckerei ein Graus aber das steht auf einem anderen Blatt.

Grüße, Messie
  Mit Zitat antworten Zitat