kake_fisk Skrevet 29. april 2008 Del Skrevet 29. april 2008 Jeg lager en Rich Text program, men jeg har et lite problem med printe funksjonen. Når jeg printer ut kommer det ikke noe bilder eller farger eller teksttyper, bare vanlig kjedelig skrift med liten skriftstørelse. Hvordan kan jeg gjøre sånn at jeg får printa ut forskjellige fonts, farger og bilder? Koden min: PrintDialog1.Document = PrintDocument1 If PrintDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then PrintDocument1.Print() End If Lenke til kommentar
Manfred Skrevet 29. april 2008 Del Skrevet 29. april 2008 Jeg skrev en egen print-funksjon Med measurestring og alt for å finne ut om det er linjeskift, osv... Lenke til kommentar
kake_fisk Skrevet 29. april 2008 Forfatter Del Skrevet 29. april 2008 Jeg hadde ikke sakt neitakk til den koden Lenke til kommentar
Manfred Skrevet 29. april 2008 Del Skrevet 29. april 2008 Den ble aldri særlig bra, så jeg tror du hadde sagt nei takk Hehe. Jeg kan se om jeg finner den på jobben i morra, så kan jeg slenge ut prinsippet i alle fall. Lenke til kommentar
kake_fisk Skrevet 29. april 2008 Forfatter Del Skrevet 29. april 2008 Okay, takk Det er ganske irriterende å lese på et ark med så liten skrift :S Lenke til kommentar
Manfred Skrevet 30. april 2008 Del Skrevet 30. april 2008 kjøp forstørrelsesglass! Lenke til kommentar
GeirGrusom Skrevet 30. april 2008 Del Skrevet 30. april 2008 Enten så skriver du ut med annen font, eller du kan også "zoome" med e.Graphics.ScaleTransform. Lenke til kommentar
kake_fisk Skrevet 30. april 2008 Forfatter Del Skrevet 30. april 2008 Men hvordan kan jeg skifte utskriftsfont og sånt? document1.font? Lenke til kommentar
GeirGrusom Skrevet 30. april 2008 Del Skrevet 30. april 2008 Printer du fra Rich textbox kontrollen? Da må du isåfall sette fonten der. Fonten settes når dokumentet rendres, altså i Document.Print eventet eller hva det nå en er. Så det er i funksjonen som blir kalt av Document.Print som setter fonten. Lenke til kommentar
kake_fisk Skrevet 30. april 2008 Forfatter Del Skrevet 30. april 2008 Hmm, kjønner det egentlig ikke helt, det hadde vært fint med et eksempell. Men du trenger ikke hvis det er for mye bry Lenke til kommentar
Manfred Skrevet 30. april 2008 Del Skrevet 30. april 2008 Du kan jo sette og endre fonten direkte i RTF-kontrollen. Lenke til kommentar
GeirGrusom Skrevet 30. april 2008 Del Skrevet 30. april 2008 public System.Drawing.Printing.PrintDocument Document { get { return m_document; } } public EditorForm() { m_comps = new List<BaseComponent>(); m_sel = new List<BaseComponent>(); arrow_pen = new Pen(Brushes.LightGreen); arrow_pen.EndCap = LineCap.ArrowAnchor; InitializeComponent(); zoom = 1.0f; m_meta = new Dictionary<string, string>(); m_filename = ""; [b]m_document = new System.Drawing.Printing.PrintDocument();[/b] [b]m_document.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(m_document_PrintPage);[/b] UpdatePageBounds(); } Er constructoren for Editor formen i ElectroShack programmet mitt De linjene som er i fet skrift er relatert til print funksjonen void m_document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { [b]Print(e.Graphics);[/b] e.HasMorePages = false; } public void Print(Graphics g) { BaseComponent.StandardPen = Pens.Black; BaseComponent.PrintMode = true; [b]Render(g);[/b] } Render funksjonen er egendefinert, men hvis du synes det kan hjelpe, slenger jeg den med her. Klikk for å se/fjerne innholdet nedenfor public void Render(Graphics g) { foreach (BaseComponent comp in m_comps) { if (float.IsNaN(comp.Transform.OffsetX) || float.IsNaN(comp.Transform.OffsetY)) comp.Transform = new Matrix(comp.Transform.Elements[0], comp.Transform.Elements[1], comp.Transform.Elements[2], comp.Transform.Elements[3], 0, 0); // Get object center PointF center = new PointF(comp.Transform.OffsetX, comp.Transform.OffsetY); // Store object position PointF offset = new PointF(comp.Transform.OffsetX, comp.Transform.OffsetY); PointF[] pts = new PointF[] { center }; comp.Render(g); if (!BaseComponent.PrintMode) { if (m_sel.Contains(comp)) { // Store matrix Matrix mat = g.Transform; g.MultiplyTransform(comp.Transform); Rectangle rect = new Rectangle((int)comp.Bounds.X - 2, (int)comp.Bounds.Y - 2, (int)comp.Bounds.Width + 4, (int)comp.Bounds.Height + 4); g.DrawRectangle(BaseComponent.StandardPen, rect); // Restore matrix g.Transform = mat; if (is_rotating) { g.FillPie(new SolidBrush(Color.FromArgb(64, Color.Red)), center.X - 16, center.Y - 16, 32, 32, 0, rotate_angle / ((float)Math.PI / 180)); g.DrawEllipse(Pens.White, new RectangleF(center.X - 16, center.Y - 16, 32, 32)); g.DrawLine(arrow_pen, center.X, center.Y, center.X + (float)Math.Cos(rotate_angle) * 15.0f, center.Y + (float)Math.Sin(rotate_angle) * 15.0f); } } } } if (start_connector != null) { Pen connector_pen; connector_pen = new Pen(BaseComponent.StandardPen.Color, 2); connector_pen.EndCap = LineCap.ArrowAnchor; connector_pen.DashStyle = DashStyle.Dash; PointF[] arr = new PointF[] { start_connector.Point }; start_connector.Parent.Transform.TransformPoints(arr); g.DrawLine(connector_pen, arr[0].X, arr[0].Y, xx, yy); } } Det eneste jeg sier her, er at det du skriver er det du får; dersom du skriver en font med Size 100 så er det det som dukker opp på papiret. Så du må sette fonten i riktig størrelse på dokumentet du har tenkt til å skrive ut (dersom dette er fra en RichTextBox så må du sette [RichTextBox].Font = new Font("Arial", 100) f.eks. Lenke til kommentar
kake_fisk Skrevet 30. april 2008 Forfatter Del Skrevet 30. april 2008 Oi, burde kanskje ha sagt at jeg bruker fontdialog og colordialog. fontdialog: If FontDialog1.ShowDialog() = DialogResult.OK Then RichTextBox1.SelectionFont = FontDialog1.Font End If Lenke til kommentar
GeirGrusom Skrevet 30. april 2008 Del Skrevet 30. april 2008 (endret) Det spiller forsåvidt ingen rolle. Sett opp font størrelsen der; så vil det blir større på papiret. edit: jeg skal prøve å bli bedre på å skrive VB istedet for C# i VB forumet Endret 30. april 2008 av GeirGrusom Lenke til kommentar
Manfred Skrevet 30. april 2008 Del Skrevet 30. april 2008 Du bare skriver feil VB-kode du, GeirGrusom! Lenke til kommentar
kake_fisk Skrevet 30. april 2008 Forfatter Del Skrevet 30. april 2008 Aww, jeg er så dårlig i C# at jeg nesten ikke skjønner noe av det... :S Lenke til kommentar
GeirGrusom Skrevet 1. mai 2008 Del Skrevet 1. mai 2008 (endret) Den siste koden er ikke viktig public System.Drawing.Printing.PrintDocument Document { get { return m_document; } } Dette er en property i C# I VB.NET direkte oversatt blir det slik: Public ReadOnly Property Document() As System.Drawing.Printing.PrintDocument Get Return m_document End Get End Property Jeg tror jeg vet hvilken av de to jeg liker best Public Sub New() m_comps = new List(Of BaseComponent) m_sel = new List(Of BaseComponent) arrow_pen = new Pen(Brushes.LightGreen) arrow_pen.EndCap = LineCap.ArrowAnchor InitializeComponent() zoom = 1.0 m_meta = new Dictionary(Of string, string) m_filename = "" m_document = New System.Drawing.Printing.PrintDocument() AddHandler m_document.PrintPage, AddressOf m_document_PrintPage UpdatePageBounds() End Sub Public Sub m_document_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Print(e.Graphics) e.HasMorePages = False End Sub Public Sub Print(ByVal g As Graphics) BaseComponent.StandardPen = Pens.Black BaseComponent.PrintMode = True Render(g) End Sub Endret 1. mai 2008 av GeirGrusom Lenke til kommentar
kake_fisk Skrevet 1. mai 2008 Forfatter Del Skrevet 1. mai 2008 fikk en error: Error 1 Value of type 'System.Drawing.Graphics' cannot be converted to 'Integer'. C:\Documents and Settings\Ørjan\Mine dokumenter\Visual Studio 2008\Projects\Text Editor\Text Editor\Form1.vb 181 15 WordBoard Lenke til kommentar
GeirGrusom Skrevet 1. mai 2008 Del Skrevet 1. mai 2008 Det er ikke meningen at du skal kopiere koden, siden den er avhengig av veldig mye fra det programmet. Du kan se resultatet her, prøv å print ut. ElectroShack.zip Lenke til kommentar
kake_fisk Skrevet 5. juli 2008 Forfatter Del Skrevet 5. juli 2008 Jeg fant ut hva som var galt nå. Jeg bruker denne koden for å sjekke hvilken font jeg skal printe: Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 'Get what is on the text box. Dim yPos As Single = e.MarginBounds.Top Dim xPos As Single = e.MarginBounds.Left Dim printFont As Font = RichTextBox1.Font Dim myBrush As New SolidBrush(Color.Black) e.Graphics.DrawString(RichTextBox1.Text, printFont, myBrush, xPos, yPos) End Sub Men den blir bare sjekket når programmet starter, så det vil ikke virke velldig bra... Så er det noen måte for å opdatere den koden når jeg skifter font? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå