Ir para conteúdo
Fórum Script Brasil
  • 0

Milena Adão

Pergunta

Boa tarde!!

Desenvolvi um sistema em C# (WINDOWS FORMS) que cria alguns desenho em graphics de acordo com algumas medidas enviadas pelo usuário. Neste mesmo sistema o usuário tem a opção de imprimir a imagem em escala real ou em tamanho A4 e esta escala real muitas vezes é maior que uma folha A4 e precisa ser impressa em mais de uma folha, mas não estou conseguindo fazer isso, está imprimindo apenas a primeira folha. Preciso de algo parecido com o paint, que imprime em várias paginas, alguém me ajuda??

egue meu código:

private void button3_Click(object sender, EventArgs e)
{
//Documento que será impresso
printDialog1.Document = printDocument1;
//Se clicar no botão print
if( printDialog1.ShowDialog()==DialogResult.OK )
{
//Imprimimi o que está no documento. Esse documento será preenchido na função PrintDocument1_PrintPage.
printDocument1.Print();
}

#region desenhar
QuadradoRedondo quadred = new QuadradoRedondo();
quadrado_redondo quadrado_redondo = new quadrado_redondo();
Titulo tituilo = new Titulo();
quadred.Controls.Clear();
cgomo_real cv = new cgomo_real();
Graphics graphics = this.CreateGraphics();
graphics.Clear(Color.Black);
double R, x, altura, altura_peca, espessura, rzao, espaco, maior, dif, dif_prox2, xx, yy, reta_ab, reta_aa, reta_b4;
string text;
int divisoes;
//dados de entrada
R = double.Parse(txtrzao.Text);//dado digitado pelo usuario
xx = double.Parse(txtx.Text);//dado digitado pelo usuario
yy = double.Parse(txty.Text);//dado digitado pelo usuario
altura_peca = double.Parse(txtaltura.Text);//dado digitado pelo usuario
espessura = double.Parse(txt_espessura.Text);//dado digitado pelo usuario
divisoes = int.Parse(combodivisoes.Text);
//fim
double[] alturas = new double[divisoes + 1];
//calcular alturas
alturas = quadrado_redondo.Calculo_Alturas(R, xx, yy, altura_peca, espessura, divisoes);
//fim
double z = yy - (R / 2);
reta_b4 = Math.Sqrt((altura_peca * altura_peca) + (z * z));
reta_aa = yy - (espessura * 2);
reta_ab = (xx - (espessura * 2));
double espacototal = 2 * Math.PI * ((R / 2) - espessura);
if (espacototal < 0) { espacototal = espacototal * -1; }
espacototal = Math.Round(espacototal, 2);
espaco = espacototal / 12;
espaco = Math.Round(espaco, 2);
label6.Text = espaco.ToString();
rzao = R / 2;
x = 250;
//calcular maior altura
maior = cv.Calcular_Maior(alturas, divisoes * 2);
//fim
//desenho inicio
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
// quadrado_redondo.Desenho(e.Graphics, alturas, alturas, espacototal, divisoes, maior, espacototal, "1:1", yy, R, xx, altura_peca, espessura);
#region desenho
x=0;
double esp = 0, diag, x1, x2, y1, y2, diag2, x12, x22, y12, y22;
espaco = espacototal / (divisoes);
espaco = Math.Round(espaco, 2);
Pen Azul = new Pen(Color.LightBlue, Convert.ToInt32(0.5));
Pen Amarelo = new Pen(Color.Yellow, Convert.ToInt32(0.5));
Pen Branco = new Pen(Color.Black, Convert.ToInt32(0.5));
Pen vermelho = new Pen(Color.Red, Convert.ToInt32(0.5));
Pen verde = new Pen(Color.Green, Convert.ToInt32(0.5));
string myText;
PointF pointF7 = new PointF();
SolidBrush solidBrushAzul = new SolidBrush(Color.LightBlue);
SolidBrush solidBrushAmarelo = new SolidBrush(Color.Yellow);
SolidBrush solidBrushBranxo = new SolidBrush(Color.White);
SolidBrush solidBrushvermelho = new SolidBrush(Color.Red);
FontFamily fontFamily = new FontFamily("Arial");
PointF pointF = new PointF();
Font font = new Font(fontFamily, 10, FontStyle.Regular, GraphicsUnit.Point);
StringFormat stringFormat = new StringFormat();
stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
StringFormat stringFormat2 = new StringFormat();
stringFormat2.FormatFlags = StringFormatFlags.DirectionRightToLeft;
#region Retas
double reta_ab_desenho =quadrado_redondo.Retas("ab", yy, R, xx, altura_peca, espessura), diag3, x123, y123, x223, y223;
double reta_aa_desenho = quadrado_redondo.Retas("aa", yy, R, xx, altura_peca, espessura);
z = (xx - R);
double reta_b4_desenho = quadrado_redondo.Retas("b4", yy, R, xx, altura_peca, espessura);
maior = maior + 15;
Azul = new Pen(Color.Black, Convert.ToInt16(0.5));
Amarelo = new Pen(Color.Black, Convert.ToInt16(0.5));
Branco = new Pen(Color.Black, Convert.ToInt16(0.5));
vermelho = new Pen(Color.Black, Convert.ToInt16(0.5));
verde = new Pen(Color.Black, Convert.ToInt16(0.5));
solidBrushAzul = new SolidBrush(Color.Black);
solidBrushAmarelo = new SolidBrush(Color.Black);
solidBrushBranxo = new SolidBrush(Color.Black);
x = 2;
#endregion
for (int a = 0; a <= divisoes; a++)
{
x1 = (x + reta_ab_desenho + (reta_aa_desenho / 2) - esp);
x2 = (x + reta_ab_desenho);
y1 = maior;
y2 = maior - alturas[a];
diag = (Math.Pow(x1 - x2, 2) - Math.Pow(y1 - y2, 2));
if (diag < 0)
{
diag = diag * -1;
}
diag = Math.Sqrt(diag);
diag = Math.Round(diag);
dif = diag - alturas[a];
dif = maior - (alturas[a] + dif);
if (a != divisoes)
{
e.Graphics.DrawLine(Branco, Convert.ToInt32(x + reta_ab_desenho), Convert.ToInt32((maior)), Convert.ToInt32(x + reta_ab_desenho + (reta_aa_desenho / 2) - esp), Convert.ToInt32((dif)));//linhas vesticais
e.Graphics.DrawLine(Branco, Convert.ToInt32(x + reta_ab_desenho + reta_aa_desenho), Convert.ToInt32(maior), Convert.ToInt32(x + reta_ab_desenho + (reta_aa_desenho / 2) + esp), Convert.ToInt32(dif));//linhas vesticais
}
else
{ e.Graphics.DrawLine(Branco, Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) - esp)), Convert.ToInt32((dif)), Convert.ToInt32(x + reta_ab_desenho), Convert.ToInt32((maior)));//linhas vesticais
e.Graphics.DrawLine(Branco, Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) + esp)), Convert.ToInt32((dif)), Convert.ToInt32(x + reta_ab_desenho + reta_aa_desenho), Convert.ToInt32((maior)));//linhas vesticais
}
pointF7 = new PointF(Convert.ToInt32(x + reta_ab_desenho + (reta_aa_desenho / 2) + esp), Convert.ToInt32(dif - 12));
e.Graphics.DrawLine(verde, Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) + esp)), Convert.ToInt32((dif)), Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) + esp)), Convert.ToInt32(dif - 10));//linhas vesticais
pointF7 = new PointF(Convert.ToInt32(x + reta_ab_desenho + (reta_aa_desenho / 2) - esp), Convert.ToInt32(dif - 12));
e.Graphics.DrawLine(verde, Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) - esp)), Convert.ToInt32((dif)), Convert.ToInt32((x + reta_ab_desenho + (reta_aa_desenho / 2) - esp)), Convert.ToInt32(dif - 10));//linhas vesticais
esp += espaco;
}
}
}

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Não creio que haja uma maneira simples de se fazer isso. Acredito que você teria que "quebrar" o desenho na quantidade páginas necessárias e desenhar cada parte em uma nova página (o que pode ser feito chamando NewPage() dentro do método PrintPage()). Se ainda não conseguiu, me avise que eu tento fazer um exemplo com um desenho qualquer.

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

Não creio que haja uma maneira simples de se fazer isso. Acredito que você teria que "quebrar" o desenho na quantidade páginas necessárias e desenhar cada parte em uma nova página (o que pode ser feito chamando NewPage() dentro do método PrintPage()). Se ainda não conseguiu, me avise que eu tento fazer um exemplo com um desenho qualquer.

Abraços!

Oi! Eu não consegui fazer isso no meu código, pois só consigo saber o ponto inicial e final de cada linha que desenho no meu Graphics. Quer um exemplo seu sim, vai me ajuda bastante!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...