AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

StringGrid Drucken erweiterung

Ein Thema von PaddyVII · begonnen am 16. Apr 2015 · letzter Beitrag vom 20. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von PaddyVII
PaddyVII

Registriert seit: 20. Nov 2014
Ort: Pforzheim
75 Beiträge
 
Delphi XE6 Enterprise
 
#1

StringGrid Drucken erweiterung

  Alt 16. Apr 2015, 16:19
Hallöchen Delphianer,

(bevor jemand kommt mit - Wie man ein StringGrid druckt, steht hier schoon 1000X - mal - ich weiß)

alsoo vorab: Ich hab folgende routine in mein Programm eingebaut und angepasst, funktioniert alles auch sooweit wie gewollt: http://www.swissdelphicenter.ch/de/showcode.php?id=1577

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 ^^
"Irren ist menschlich, aber wenn man richtigen Mist bauen will, braucht man einen Computer."
Dan Rather

Geändert von PaddyVII (16. Apr 2015 um 16:20 Uhr) Grund: AAAAAH sry warn falscher link drin - habs korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.016 Beiträge
 
Delphi 12 Athens
 
#2

AW: StringGrid Drucken erweiterung

  Alt 16. Apr 2015, 17:00
Es gibt da den Abschnitt //Zeilen drucken , wo aktuell nur Text gedruckt wird (TextOut)
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 http://www.swissdelphicenter.ch/de/sendmail.php?id=1577 (aber eigentlich sollte man das auch locker selber hinbekommen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Apr 2015 um 17:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von PaddyVII
PaddyVII

Registriert seit: 20. Nov 2014
Ort: Pforzheim
75 Beiträge
 
Delphi XE6 Enterprise
 
#3

AW: StringGrid Drucken erweiterung

  Alt 17. Apr 2015, 11:24
Es gibt da den Abschnitt //Zeilen drucken , wo aktuell nur Text gedruckt wird (TextOut)
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 http://www.swissdelphicenter.ch/de/sendmail.php?id=1577 (aber eigentlich sollte man das auch locker selber hinbekommen)
Najaa, ich bekomms aber irgendwie trotzdem nicht hin...alsoo ich hab die routine an der stelle soo abgeändert, jedoch zeichnet der die linien irgendwie komisch, nicht durchgängig (screenshot häng ich an)... folgendermaßen habe ich den Quellcode erweitert...:

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...
Miniaturansicht angehängter Grafiken
unbenannt.png  
"Irren ist menschlich, aber wenn man richtigen Mist bauen will, braucht man einen Computer."
Dan Rather

Geändert von PaddyVII (17. Apr 2015 um 11:26 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: StringGrid Drucken erweiterung

  Alt 17. Apr 2015, 11:32
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. Canvas.BrushStyle := bsClear;
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: StringGrid Drucken erweiterung

  Alt 17. Apr 2015, 11:39
Nach dem TextOut korrigierst du XPos. Das LineTo machst du mit der korrigierten XPos, denke daran liegt das.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von PaddyVII
PaddyVII

Registriert seit: 20. Nov 2014
Ort: Pforzheim
75 Beiträge
 
Delphi XE6 Enterprise
 
#6

AW: StringGrid Drucken erweiterung

  Alt 17. Apr 2015, 13:06
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. Canvas.BrushStyle := bsClear;

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:
Nach dem TextOut korrigierst du XPos. Das LineTo machst du mit der korrigierten XPos, denke daran liegt das.
aber auf welchen wert korrigieren??
"Irren ist menschlich, aber wenn man richtigen Mist bauen will, braucht man einen Computer."
Dan Rather
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#7

AW: StringGrid Drucken erweiterung

  Alt 17. Apr 2015, 15:22
aber auf welchen wert korrigieren??
Schau Dir den Quellcode, welchen Du gepostet hast an und versuche ihn zu verstehen.

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.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: StringGrid Drucken erweiterung

  Alt 20. Apr 2015, 09:36
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;
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#9

AW: StringGrid Drucken erweiterung

  Alt 20. Apr 2015, 10:02
Natürlich muss sich "XPos" bei "MoveTo" und "LineTo" unterscheiden, sonst gibt es keine Linie.
Das ist natürlich Käse, denn Du hast das TextOut vergessen.

Und bei TextOut wird die PenPos auf die rechte obere Ecke gesetzt und somit wird die Linie selbstverständlich gezeichnet.

Delphi-Quellcode:
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;
Diese Ausgabe ergibt den 'Text1' mit einer Linie darüber, obwohl XPos nicht geändert wurde.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.016 Beiträge
 
Delphi 12 Athens
 
#10

AW: StringGrid Drucken erweiterung

  Alt 20. Apr 2015, 10:07
obwohl XPos nicht geändert wurde.
Wer behauptet denn, daß Textout nicht den Cursor verschiebt?

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;
Delphi-Referenz durchsuchenTCanvas.TextOut
Zitat:
After a call to TextOut, the PenPos property indicates the point at the top right of the text on the canvas.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz