Autor Beitrag
stathis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Do 01.09.05 11:49 
Hallo!

ich habe in meinem Programm ein stringgrid mit ondrawcell :
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  //Text linksbündig ohne Zeilenumbruch in der ersten Zeile
 // if ARow = 0 then
  //  StringGridAlignment(StringGrid1, Rect, ACol, ARow, taLeftJustify, False);

  //Text zentriert mit Zeilenumbruch in der zweiten Zeile
  if (ARow = 1or (ARow = 0 ) then
    StringGridAlignment(StringGrid1, Rect, ACol, ARow, taCenter, True);

  //Text rechtsbündig ohne Zeilenumbruch restliche Zeilen
  if ARow > 1 then
    StringGridAlignment(StringGrid1, Rect, ACol, ARow, taRightJustify, False);
  if ACol = 6 then
   StringGridAlignment(StringGrid1, Rect, ACol, ARow, taLeftJustify, False);

end;

formatiert.

Ich drucke dieses stringgrid mit folgende Code:

procedure TForm2.Button1Click(Sender: TObject);
var z,zh,s,sb,gr:integer;//zh=zeilenhöhe;sb=spaltenbreite
begin
If PrintDialog1.Execute
then
  begin
   Printer.Title:='Text';//angezeigter Text im Druckmanager
   Printer.Canvas.Font.Size:=9;
   Printer.BeginDoc;
   gr:=Printer.Canvas.Font.Height*-1 div Printer.Canvas.Font.size;
   zh:=0;//Abstand oben
   For z:=0 to StringGrid1.RowCount-1 do
    begin
    if (z=1or (z=0then
    begin
      printer.canvas.brush.color:=clsilver;
    end
    else
    begin
     printer.canvas.brush.color:=clwhite;
    end;
     sb:=0;//Absand beim Drucken von links
     For s:=0 to StringGrid1.ColCount-1 do 
      begin
       //Rechteck
       Printer.Canvas.Rectangle(sb,zh,sb+StringGrid1.ColWidths[s]*gr,zh+StringGrid1.RowHeights[z]*gr);
       //Text 
       Printer.Canvas.TextOut(sb+3*gr,zh+3*gr,StringGrid1.Cells[s,z]);
       sb:=sb+StringGrid1.ColWidths[s]*gr; 
      end;
     zh:=zh+StringGrid1.RowHeights[z]*gr; 
     If Printer.PageHeight-zh-StringGrid1.RowHeights[z+1]*gr<0
      then 
       begin
        zh:=0;//Abstand oben 
        Printer.NewPage;
       end
    end;
   Printer.EndDoc; 
  end;
end;

aber die formatierung wirt nicht mitausgedruckt (links- oder rechtsbündig). :(

haben Sie eine Lösung für mich?

Ich danke Ihnen

Stathis

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 01.09.05 11:59 
Was meinst du mit Formatierung? Links- und Rechtsbündig? Warum sollte diese Formatierung auch mit ausgedruckt werden? Jedenfalls sehe ich in der Druck-Procedure keine Sonderbehandlung wie du es in der OnDrawCell Procedure gemacht hast.

Lg Martin
stathis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Do 01.09.05 12:29 
also mit dem Ondrawcell wenn das stringgrid1 angezeigt wird auf dem Monitor der Text ist rechtsbündig(auf die rechte Seite der Spalte) aber wenn den Stringgrid ausgedruckt ist der Text lingsbündig(auf die linke Seite der Spalte).

ich danke dir

Stathis
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 01.09.05 12:35 
Danke für das nochmalige erklären deiner Frage. ;-) Ich hab diese aber verstanden.

Aber anscheind hast du meine Antwort nicht verstanden. Du musst, genauso wie in der OnDrawCell-Procedure, eine Behandlung einbauen die deinen Text auf das Priter.Canvas Objekt Rechts- oder Linksbündig zeichnet.

Da du das bei der OnDrwaCell Procedure auch hinbekommen hast sollte das für die Printer-Procedure eigentlich kein Problem sein.

Lg Martin
stathis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Do 01.09.05 12:45 
Die beide Proceduren habe ich irgendwo im Internet gefunden. Kannst du mir villeicht mit dem Code weitzer helfen?
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 01.09.05 12:54 
In Zeile 51 wird folgendes aufgerufen:
ausblenden Delphi-Quelltext
1:
Printer.Canvas.TextOut(sb+3*gr,zh+3*gr,StringGrid1.Cells[s,z]);					

damit zeichnest du den Text auf das Priter-Objekt. Der erste Parameter gibt die horizontale Position an wo der Text gezeichnet werden soll. Damit du jetzt einen Text rechtsbündig zeichnen kannst musst du zuvor die Zellenbreite kennen (StringGrid1.ColWidths[s]) und den Platz den der eigentliche Text benötigt (Printer.Canvas.TextWidth).

Mit hilfe dieser beiden Angaben kannst du dann den Text rechtsbündig ausrichtigen. In dem du einfach die Zellenbreite minus die Textbreite nimmst. Dann erhälst du die Horizontale Position an dem der Text gezeichnet werden muss.

Such mal hier im Forum nach Suche in: Delphi-Forum, Delphi-Library CANVAS RECHTSBÜNDIG.

Lg Martin
stathis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Do 01.09.05 13:25 
Ich weiss nicht aber geht es nicht, ich kann das nicht machen

trotzdem ich danke dir