none
Como imprimir so um pequeno retangulo preto size 15;9 de um PictureBox sem nenhuma imagem contida nele. RRS feed

  • Pergunta

  • Se alguém puder me dar uma informação como fica uma rotina para imprimir só um retangulo preto tamanho 15;9 com um endereço de localização (x,y) dentro de um formulário. E na mesma rotina imprimir um TextBox1.Text, também com endereço de localização (X,Y) no mesmo formulário.

    Grato/Durval Júnior

    domingo, 2 de outubro de 2016 19:10

Respostas

  • Belaza Durval, legal a ideia do seu APP, na verdade um amigo meu tem uma ideia parecida; ele fez uns cursos de matemática e teve uma ideia também para fazer "probabilidade" de acerto em jogos e sugestão de combinações.

    Agora entendi o que você quer fazer; basicamente imprimir nas páginas o "cartão de jogo" com os quadrados pintados de preto de acordo com os selecionados certo? Pois bem, você ... maravilhosamente ... não precisa de uma matriz de cores. Basta guardar apenas os pontos (X,Y) que serão marcados.

    Ai, ao inprimir a página (usando a classe "PrintDocument" como falei, e vou montar um código disso depois) basta verificar se o ponto (X,Y) sendo pintado está ou não na lista para ser marcado; se sim, pinte de preto, se não deixe apenas o contorno do retângulo (imagino).

    Para desenhar qualquer coisa usando "Graphics" (System.Drawing.Graphics) você tem o "DrawXXXXX" e o "FillXXXXX"; no caso do retângulo são as funções "DrawRectangle" e "FillRectangle". "Draw" desenha a linha da figura e "Fill" preenche o seu interior.

    quarta-feira, 5 de outubro de 2016 11:26

Todas as Respostas

  • Bom dia

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim pPosX as int
        Dim pPosY as int
        Dim tPosX as int
        Dim tPosY as int
        Dim picturebox As New PictureBox
        picturebox.Name = "protet"
        picturebox.SizeMode = PictureBoxSizeMode.StretchImage
        picturebox.Image = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.GetName("jumping alien.gif"))
        picturebox.Location = New Point(pPosX, pPosY)
        picturebox.Visible = True
        picturebox.Width = 15
        picturebox.Height = 9
    
        'texbox code
    Dim tb As New TextBox
        tb.Name="TextBox"+number.ToString
        tb.Position = New Point(tPosX, tPosY) 
        Me.Controls.Add(tb)
    
    End Sub
    • Sugerido como Resposta SammuelMiranda segunda-feira, 3 de outubro de 2016 11:39
    segunda-feira, 3 de outubro de 2016 10:18
  • Samuel, sou-lhe imensamente grato pela força. Porém devido ainda a minha pouca experiência em VB queria fazer mais algumas perguntas.

    O código que você escreveu imprime o PictureBox e o TextBox ou ainda precisa do código para impressão?

    Copiei e colei seu código abaixo e ao lado dos comandos escrevi o que gostaria de saber ainda.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    no comando acima, usei o ícone da impressora da ToolStrip como botão para acionar a impressão, fará diferença?

    Dim pPosX as int 'pPosX tenho que trocar por PictureBox1PosX ? Dim pPosY as int 'idem Dim tPosX as int 'idem Dim tPosY as int 'idem Dim picturebox As New PictureBox 'todos estes comandos ficam assim mesmo? picturebox.Name = "protet" 'ou tenho que adapta-los ao meu caso? picturebox.SizeMode = PictureBoxSizeMode.StretchImage picturebox.Image = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.GetName("jumping alien.gif")) picturebox.Location = New Point(pPosX, pPosY) picturebox.Visible = True picturebox.Width = 15 picturebox.Height = 9 'texbox code Dim tb As New TextBox tb.Name="TextBox"+number.ToString tb.Position = New Point(tPosX, tPosY) Me.Controls.Add(tb) End Sub

    segunda-feira, 3 de outubro de 2016 21:59
  • Durval, quem respondeu a sua pergunta anteriormente foi o Apocsantos, não eu (apenas marquei como sugestão de resposta).

    Pelos seus (porque foram 3) posts eu fico com mais dúvida do que o que você quer do que a resposta pro problema.
    Primeiro, quando você diz "imprimir" é imprimir mesmo? Em papel na impressora? Se for isso PictureBox, TextBox etc não servem de nada. Esses são componentes de formulário do Programa. Criar impressões é com a classe "PrintDocument", linha a linha, página a página, imagem a imagem. Tem vários tutoriais ajudando nisso.

    Se não, se você quer apenas pintar um retângulo no formulário, você pode rescrever o método "OnPaint" do Form.

    No seu outro post (duvida-de-desenvolvedor-iniciante) você disse que queria fazer isso "matriz(1,2).BackColor=Color.Red"; o que é isso? O que é a "matriz(x,y)"? É um array? É a posição do retângulo no Form?

    Se é vamos lá, vou te dar um exemplo. Esquece o seu projeto e abre um novo, coloca um Form nele e no código do Form (chamado Form1) escreva:

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        MyBase.OnPaint(e)
        e.Graphics.DrawRectangle(New System.Drawing.Pen(System.Drawing.Color.Red), 3, 3, 15, 9)
    End Sub
    Isso vai desenhar um retângulo 15 por 9 na posição (x,y) = (3,3) do Form.

    Era algo assim que você queria?


    • Editado SammuelMiranda quarta-feira, 5 de outubro de 2016 11:27 Removi conforme o Durval falou - eu tinha copiado de um código C# meu
    terça-feira, 4 de outubro de 2016 13:01
  • Olá Samuel, obrigado por me ajudar. Eu quero imprimir num papel na impressora. No caso do TextBox, preciso imprimir um pequeno nome que vai nele, não mais que 20 letras. No caso do PictureBox preciso imprimir um retângulozinho que horas pode ser preto e horas sem cor (quando o caso é imprimir é só preto ou sem cor em outra situação entra a cor vermelha mas não para imprimir)

    Acho que você está me dando a dica certa pois preciso que este retângulo esteja associado a uma matriz e num PictureBox não consegui associar a matriz, apesar de esta parte do meu APP já estar funcionando, mas usando matriz eu conseguiria diminuir o tamanho do código que já está em quase 5000 linhas.

    matriz(1,2).BackColor=Color.Black é pra ser um array e é o que eu precisaria, atualmente meu código está assim: PictureBox1_2.BackColor=Color.Black, tem 42 PictureBox's, vai do PictureBox1_1 até PictureBox14_2.

    Samuel, eu já estou aposentado, tenho 63 anos, adoro programação, comecei há pouco tempo aprender programar em VB para Windows, antes eu só fazia alguma coisa em C, basic e depois VBA no EXCEL e isso agora está me deixando muito feliz de poder criar os executáveis. Faço isso por prazer e para manter meu cérebro pensando.

    A história deste meu APP é o seguinte: Um amigo que trabalhava na mesma empresa (COPEL/Pr.) que me aposentei, acertou 42 vezes na loteria esportiva usando a mesma técnica que agora estou tentando desenvolver neste APP. Esta técnica foi criada pelo matemático Oswaldo de Souza que em 1970 criou esta loteria para CEF e existe até hoje. Ainda preciso melhora-lo bastante para ele ficar como tem que ser. Se você quiser, por curiosidade posso mandar uma cópia para você, é só me mandar seu e-mail que lhe mando o executável.

    Abraço / Durval 

    terça-feira, 4 de outubro de 2016 22:53
  • Montei o teu código sugerido Samuel. No começo deu 2 tipos de erros mas depois tirei um "e" e um ";" que acusava erro e ai rodou certo, desenhando o retângulo nas coordenadas dentro do Form1.

    e.Grafphics.DrawRectangle(New....etc desenha as linhas do retângulo com a cor especificada, preciso que o todo interior do retângulo seja preto, talvez até foi por isso que escolhi o PictureBox no meu APP porque com BackColor=Color.Black pinta o interior dele.

    Então novamente, como seria o código para pintar o interior do retângulo que você me orientou?

    Grato / Durval 


    quarta-feira, 5 de outubro de 2016 04:19
  • Belaza Durval, legal a ideia do seu APP, na verdade um amigo meu tem uma ideia parecida; ele fez uns cursos de matemática e teve uma ideia também para fazer "probabilidade" de acerto em jogos e sugestão de combinações.

    Agora entendi o que você quer fazer; basicamente imprimir nas páginas o "cartão de jogo" com os quadrados pintados de preto de acordo com os selecionados certo? Pois bem, você ... maravilhosamente ... não precisa de uma matriz de cores. Basta guardar apenas os pontos (X,Y) que serão marcados.

    Ai, ao inprimir a página (usando a classe "PrintDocument" como falei, e vou montar um código disso depois) basta verificar se o ponto (X,Y) sendo pintado está ou não na lista para ser marcado; se sim, pinte de preto, se não deixe apenas o contorno do retângulo (imagino).

    Para desenhar qualquer coisa usando "Graphics" (System.Drawing.Graphics) você tem o "DrawXXXXX" e o "FillXXXXX"; no caso do retângulo são as funções "DrawRectangle" e "FillRectangle". "Draw" desenha a linha da figura e "Fill" preenche o seu interior.

    quarta-feira, 5 de outubro de 2016 11:26
  • Em adição, veja isso: http://www.macoratti.net/vbn_prn2.htm
    quarta-feira, 5 de outubro de 2016 17:11
  • Obrigado novamente Samuel. Na hora de imprimir, o código deve dar a impressora os endereços destes retângulos que devem ser impressos. Imagino assim mas ainda não sei como fazer isso e lhe fico grato por qualquer ajuda neste sentido.

    Mas em outra sub rotina, fora da rotina de impressão, estes mesmos retângulos precisam de um sistema de matriz para que obedeçam as posições onde eles devem ser pintados de preto ou vermelho.

    Vou dar um exemplo de como esta outra sub rotina trabalha. Se o usuário do APP resolve fazer um esquema que pode ser chamado de 7 para 3 ou 9 para 4 ou 3 para 1 ou 14 para 8 (existem 120 tipos diferentes tipos de combinações possíveis). Então digamos que ele escolheu um esquema 14C8=3003 (14C8=3003 combinações) cada um destes 3003 volantes da loteria tem uma configuração diferente. Atualmente no meu APP, só para esta parte do código usei umas 1.500 linhas, mas se for empregado um sistema com matriz, estas 1.500 linhas podem ser resumidas a não mais que 100 linhas (chutando).

    Obrigado / Abraço /Durval  

    quarta-feira, 5 de outubro de 2016 22:27
  • Samuel, pode me escrever o código usando Fill, fiz assim:

     e.Graphics.FillRectangle(New System.Drawing.Pen(System.Drawing.Color.Red), 3, 3, 15, 9)

    mas ocorre ero... 


    quarta-feira, 5 de outubro de 2016 23:34
  • Durval, sobre a página, o link que te passei tem "Relatorio.Graphics" em seus métodos. Esse é um objeto "System.Drawing.Graphics" que é o mesmo que passei sobre o Form. São os mesmos métodos, logo você pode usar o "DrawRectangle" e "FillRectangle".

    Quanto a posição, imagine a página; o canto superior esquerdo é o (0,0); e no caso o método "FillRectangle" não usa o objeto "Pen", mas sim o objeto "Brush"; como em "System.Drawing.Brushes.Black" por exemplo.

    sexta-feira, 7 de outubro de 2016 11:54