private void PrintHeaderTrackList(PrintPageEventArgs e) { float x = e.MarginBounds.Left; float y = e.MarginBounds.Top; float xPos = x; float[] percentageWidths = trackListFields.GetPercentageWidths(); for (int col = 0; col < trackListFields.Count; col++) { string value = dataBase.GetNameOfField(trackListFields[col].Field); // SizeF size = e.Graphics.MeasureString(value, Settings.Current.PrintDetailsFont); StringFormat sf = new StringFormat(); sf.Trimming = StringTrimming.EllipsisCharacter; sf.FormatFlags = StringFormatFlags.NoWrap; int colWidth = (int)((float)e.MarginBounds.Width / (float)100.0 * percentageWidths[col]); RectangleF rect = new RectangleF(xPos, y + headerHeight, colWidth, Settings.Current.PrintDetailsFont.Height); e.Graphics.DrawString(value, Settings.Current.PrintDetailsFont, detailBrush, rect, sf); xPos += (int)((float)e.MarginBounds.Width / (float)100.0 * percentageWidths[col]); } headerHeight += Settings.Current.PrintDetailsFont.Height; e.Graphics.DrawLine(new Pen(Color.Black, 1), x, y + headerHeight, x + e.MarginBounds.Width, y + headerHeight); headerHeight += Settings.Current.PrintDetailsFont.Height * 0.5f; }
private void PrintDataDetailListWithTracks(PrintPageEventArgs e) { // Jetzt noch die Trackdaten CD cd; if (printType == PrintType.CurrentCD) { cd = this.cd; } else { cd = dataBase.GetCDById(CDView.GetCDID(currentPrintRecord)); } // Maximale Länge der Feldnamen ermitteln foreach (Field field in detailListFields) { SizeF size = e.Graphics.MeasureString(dataBase.GetNameOfField(field) + ": ", Settings.Current.PrintDetailsFont); if (size.Width > detailListMaximumFieldWidth) { detailListMaximumFieldWidth = size.Width; } } float y = e.MarginBounds.Top + headerHeight; float yCover = y; float xWidthMax = e.MarginBounds.Width; if (Settings.Current.PrintCDCover) { float coverWidth = (float)e.MarginBounds.Width / (float)100.0 * (float)Settings.Current.PrintCDCoverSize; float coverPos = e.MarginBounds.Left; if (Settings.Current.PrintCDCoverAlign == 1) { coverPos = (float)e.MarginBounds.Left + (float)e.MarginBounds.Width / 2.0f - coverWidth / 2.0f; } if (Settings.Current.PrintCDCoverAlign == 2) { coverPos = (float)e.MarginBounds.Left + (float)e.MarginBounds.Width - coverWidth; } try { Image img = Image.FromFile(Misc.FindCover(cd.CDCoverFrontFilename)); float coverHeight = coverWidth * (float)img.Width / (float)img.Height; RectangleF rect = new RectangleF(coverPos, y, coverWidth, coverHeight); e.Graphics.DrawImage(img, rect); yCover += coverHeight; if (!Settings.Current.PrintTextUnderCDCover) { xWidthMax = coverPos - e.MarginBounds.Left; } } catch { // Ignorieren, wenn Cover nicht geladen werden kann. } if (Settings.Current.PrintTextUnderCDCover) { y = yCover; } } for (int col = 0; col < detailListFields.Count; col++) { float x = e.MarginBounds.Left; string value; if (printType == PrintType.CurrentCD) { value = this.cd.GetStringByField(dataBase, detailListFields[col]); } else { value = CDView.GetRowStringValue(currentPrintRecord, detailListFields[col]); } if (!string.IsNullOrEmpty(value) || detailListPrintEmptyFields) { string fieldName = dataBase.GetNameOfField(detailListFields[col]); e.Graphics.DrawString(fieldName + ":", Settings.Current.PrintDetailsFont, detailBrush, new PointF(x, y)); x += detailListMaximumFieldWidth; RectangleF rect = new RectangleF(x, y, xWidthMax - detailListMaximumFieldWidth, Settings.Current.PrintDetailsFont.Height); StringFormat sf = new StringFormat(); sf.Trimming = StringTrimming.EllipsisCharacter; sf.FormatFlags = StringFormatFlags.NoWrap; e.Graphics.DrawString(value, Settings.Current.PrintDetailsFont, detailBrush, rect, sf); y += Settings.Current.PrintDetailsFont.Height; } } if (yCover > y && !Settings.Current.PrintTextUnderCDCover) { y = yCover; } y += Settings.Current.PrintDetailsFont.Height; // Header der Trackdaten float[] percentageWidthsHeader = trackDetailsListFields.GetPercentageWidths(); float xpos = e.MarginBounds.Left; for (int col = 0; col < trackDetailsListFields.Count; col++) { string value = dataBase.GetNameOfField(trackDetailsListFields[col].Field); // SizeF size = e.Graphics.MeasureString(value, Settings.Current.PrintDetailsFont); StringFormat sf = new StringFormat(); sf.Trimming = StringTrimming.EllipsisCharacter; sf.FormatFlags = StringFormatFlags.NoWrap; int colWidth = (int)((float)e.MarginBounds.Width / (float)100.0 * percentageWidthsHeader[col]); RectangleF rect = new RectangleF(xpos, y, colWidth, Settings.Current.PrintDetailsFont.Height); e.Graphics.DrawString(value, Settings.Current.PrintDetailsFont, detailBrush, rect, sf); xpos += ((float)e.MarginBounds.Width / (float)100.0 * percentageWidthsHeader[col]); } y += (float)Settings.Current.PrintDetailsFont.Height * 1.1f; e.Graphics.DrawLine(new Pen(Color.Black, 1), e.MarginBounds.Left, y, e.MarginBounds.Left + e.MarginBounds.Width, y); y += Settings.Current.PrintDetailsFont.Height * 0.2f; for (int i = currentPrintTrackRecord; i < cd.Tracks.Count; i++) { if (y > e.MarginBounds.Bottom) { if (printDocument.PrintController.IsPreview) { // Im Preview nur die ersten 10 Seiten anzeigen, dauert sonst eventuell zu lang. if (currentPage >= 9) { break; } } e.HasMorePages = true; currentPrintTrackRecord = i; currentPage++; return; } int x = e.MarginBounds.Left; float[] percentageWidths = trackDetailsListFields.GetPercentageWidths(); for (int col = 0; col < trackDetailsListFields.Count; col++) { string value = cd.GetTrackStringByField(i, trackDetailsListFields[col].Field); if (value != null) { // SizeF size = e.Graphics.MeasureString(value, Settings.Current.PrintDetailsFont); StringFormat sf = new StringFormat(); sf.Trimming = StringTrimming.EllipsisCharacter; sf.FormatFlags = StringFormatFlags.NoWrap; int colWidth = (int)((float)e.MarginBounds.Width / (float)100.0 * percentageWidthsHeader[col]); RectangleF rect = new RectangleF(x, y, colWidth, Settings.Current.PrintDetailsFont.Height); e.Graphics.DrawString(value, Settings.Current.PrintDetailsFont, detailBrush, rect, sf); } x += (int)((float)e.MarginBounds.Width / (float)100.0 * percentageWidths[col]); } y += Settings.Current.PrintDetailsFont.Height; } currentPrintTrackRecord = 0; if (printType != PrintType.CurrentCD && currentPrintRecord < CDView.Rows.Count - 1) { if (printDocument.PrintController.IsPreview) { // Im Preview nur die ersten 10 Seiten anzeigen, dauert sonst eventuell zu lang. if (currentPage >= 9) { e.HasMorePages = false; return; } } e.HasMorePages = true; currentPrintRecord++; currentPage++; return; } e.HasMorePages = false; }