![]() |
StringGrid Drucken erweiterung
Hallöchen Delphianer,
(bevor jemand kommt mit - Wie man ein StringGrid druckt, steht hier schoon 1000X - mal - ich weiß:-D) alsoo vorab: Ich hab folgende routine in mein Programm eingebaut und angepasst, funktioniert alles auch sooweit wie gewollt: ![]() Nun hab ich aber eine kleine frage: Wenn ich mit dieser routine etwas ausdrucke, dann geht das zwar, allerdings zeigt es mir KEINE raster auf dem ausdruck an...dies möchte ich ändern, ich will dass man die Horizontalen sowie die vertikalen linien sieht... kann mir jemand sagen, Wie/Wo/Was ich verändern muss, dass die Linien mitgedruckt werden?? Danke im Vorraus ^^:thumb: |
AW: StringGrid Drucken erweiterung
Es gibt da den Abschnitt
Delphi-Quellcode:
, wo aktuell nur Text gedruckt wird (TextOut)
//Zeilen drucken
und man mag es nicht glauben, aber wenn man nun auch die Linien haben will, dann wird man das ebenfalls dort mit einbauen müssen. Wie man Linien zeichnet, kannst du dir ja bei Header und Footer abgucken, wo es bereits gemacht wird. Die Berechnung für die Position der Linien kann man sich aus dem TextOut der Zellen ableiten. PS: Kontakt/Fragen zum Ersteller des Codes, siehe ![]() |
AW: StringGrid Drucken erweiterung
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
if EigeneDruckerEinstellungen.rgLinien.ItemIndex = 0 then
begin Printer.Canvas.MoveTo(XPos, -YPos); end; Printer.Canvas.TextOut(XPos, -YPos, Grid.Cells[j, i + (Seite - 1) * Zeilen - 1]); XPos := XPos + Grid.ColWidths[j] * 3; if EigeneDruckerEinstellungen.rgLinien.ItemIndex = 0 then begin Printer.Canvas.LineTo(XPos, -YPos); end; kurze erklärung: Wenn der Itemindex der Radiogroup 0 ist, soll mit linien gedruckt werden... |
AW: StringGrid Drucken erweiterung
Ohne mir jetzt großartig den Source anzuschauen. Das sieht aus, als würde er pro Zeile die Linie wieder mit dem Text übermalen. Das bedeutet, dass die Linie zu nah an deinem Text klebt. Um das zu ändern, müsstest du die Linie weiter weg vom Text zeichnen oder den BrushStyle der Texte auf bsClear setzen.
Delphi-Quellcode:
Canvas.BrushStyle := bsClear;
|
AW: StringGrid Drucken erweiterung
Nach dem TextOut korrigierst du XPos. Das LineTo machst du mit der korrigierten XPos, denke daran liegt das.
|
AW: StringGrid Drucken erweiterung
Zitat:
Heyy, das mit dem Busstyle funktioniert irgendwie gar nicht...er stellt mir den brushstyle auf bsClear um, aber eine veränderung seh ich nicht... Zitat:
|
AW: StringGrid Drucken erweiterung
Zitat:
Kleine Hilfe: Mit TextOut gibst Du den Text aus. Dann kommt XPos := XPos + .... in dieser Zeile wird XPos ein neuer Wert zugewiesen. Danach willst Du die Linie zeichnen. Du musst die Linie natürlich voher zeichnen, bevor XPos einen neuen Wert bekommt. |
AW: StringGrid Drucken erweiterung
Natürlich muss sich "XPos" bei "MoveTo" und "LineTo" unterscheiden, sonst gibt es keine Linie.
Aber warum ausgerechnet um den Wert "Grid.ColWidths[j] * 3", soll damit die horizontale Linie für eine Zelle gezeichnet werden? Viel sinnvoller währe es, die horizontale Linie einmal pro Zeile über die ganze Tabellenbreite zu zeichnen. Auf jeden Fall sollte sich "YPos" beim Zeichnen der Linie und des Textes unterscheiden. Der Rahmen soll ja nicht durch den Text gehen, sondern darüber oder darunter gezeichnet werden. Pseudocode:
Delphi-Quellcode:
YPos := InitYPos;
for Y := 0 to MaxY do begin XPos := InitXPos; ZeichneZeilenLinie(XPos, XPosMax, YPos); YPos := BerücksichtigeHoeheDerLinie(YPos); for X := 0 to MaxX do begin ZeichneZellenText(XPos, YPos); XPos := BruecksichtigeBreiteDerZelle(XPos); end; YPos := BerücksichtigeHoeheDerZelle(YPos); end; |
AW: StringGrid Drucken erweiterung
Zitat:
Und bei TextOut wird die PenPos auf die rechte obere Ecke gesetzt und somit wird die Linie selbstverständlich gezeichnet.
Delphi-Quellcode:
Diese Ausgabe ergibt den 'Text1' mit einer Linie darüber, obwohl XPos nicht geändert wurde.
procedure TForm1.Button1Click(Sender: TObject);
var XPos: Integer; YPos: Integer; begin XPos := 20; YPos := 20; Canvas.MoveTo(XPos, YPos); Canvas.TextOut(XPos, YPos, 'Text1'); Canvas.LineTo(XPos, YPos); end; |
AW: StringGrid Drucken erweiterung
Zitat:
Delphi-Quellcode:
procedure TCanvas.TextOut(X, Y: Integer; const Text: String);
begin Changing; RequiredState([csHandleValid, csFontValid, csBrushValid]); if CanvasOrientation = coRightToLeft then Inc(X, TextWidth(Text) + 1); Windows.ExtTextOut(FHandle, X, Y, FTextFlags, nil, Text, Length(Text), nil); MoveTo(X + TextWidth(Text), Y); Changed; end; ![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz