CANT CREATE AUTOREDRAW IMAGE

FBGSYSTEMS 30/11/2015 17:26:15
#454612
Boa tarde galera.
Estou usando uma rotina (na base da POG, porém funcional) que colore um listview condicionalmente.
Uso essa mesma forma em minha janela de importação de XML de entrada e da tudo ok.

Sempre funcionou, porem agora estou tentando usa-lo e da o seguinte erro:
Cant Create autoredraw image.

Abaixo minha rotina para colorir o mesmo.

    
Picture1.BackColor = lstPesq.BackColor
Picture1.ScaleMode = vbTwips
Picture1.BorderStyle = vbBSNone
Picture1.AutoRedraw = True
Picture1.Visible = False

Dim i As Integer
LastCmd = 1
Picture1.Width = lstPesq.Width
Picture1.Height = lstPesq.ListItems(1).Height * (lstPesq.ListItems.Count)
Picture1.ScaleHeight = lstPesq.ListItems.Count
Picture1.ScaleWidth = 1
Picture1.DrawWidth = 1
[ô]Picture1.BackColor = vbRed
Picture1.Cls

For i = 1 To lstPesq.ListItems.Count

Dim varTudoOk As Boolean
Dim varTemItemAtrasado As Boolean

varTudoOk = False
varTemItemAtrasado = False

Set dsEnche = New ADODB.Recordset
dsEnche.Open [Ô]select codorc from orcamento where codorc=[Ô] & lstPesq.ListItems(i).Text, con, adOpenKeyset, adLockOptimistic


varitematrasado = 0
Set dsDetOrc = New ADODB.Recordset
dsDetOrc.Open [Ô]select min(dataentrega) as data,item from detorcamentos where codorc=[Ô] & dsEnche!codorc, con, adOpenKeyset, adLockOptimistic
If Not dsDetOrc.EOF Then
If IsNull(dsDetOrc!Data) Then
GoTo proximo
End If
[ô] Item.SubItems(4) = Format(dsDetOrc!Data, [Ô]dd/mm/yyyy[Ô])
If Not IsNull(dsDetOrc!Data) Then
If CDate(dsDetOrc!Data) < Date Then
varitematrasado = dsDetOrc!Item
varTemItemAtrasado = True
End If
End If
End If


[ô] se tiver ao menos um item que possui etapa 1 nao concluida
Set dsDetOrc = New ADODB.Recordset
dsDetOrc.Open [Ô]select codorc from detorcamentos where codorc=[Ô] & dsEnche!codorc & [Ô] and temcriacao=[ô]S[ô] and finalizoucriacao=[ô]N[ô][Ô], con, adOpenKeyset, adLockOptimistic
If Not dsDetOrc.EOF Then
Picture1.Line (0, i - 1)-(1, i), vbYellow, BF
GoTo proximo
End If

[ô]=================
[ô] se tiver ao menos um item que possui etapa 2 nao concluida
Set dsDetOrc = New ADODB.Recordset
dsDetOrc.Open [Ô]select codorc from detorcamentos where codorc=[Ô] & dsEnche!codorc & [Ô] and temimpressao=[ô]S[ô] and finalizouimpressao=[ô]N[ô][Ô], con, adOpenKeyset, adLockOptimistic
If Not dsDetOrc.EOF Then
Picture1.Line (0, i - 1)-(1, i), &H80C0FF, BF
GoTo proximo
End If


[ô]=================
[ô] se tiver ao menos um item que possui etapa 3 nao concluida
Set dsDetOrc = New ADODB.Recordset
dsDetOrc.Open [Ô]select codorc from detorcamentos where codorc=[Ô] & dsEnche!codorc & [Ô] and temproducao=[ô]S[ô] and finalizouproducao=[ô]N[ô][Ô], con, adOpenKeyset, adLockOptimistic
If Not dsDetOrc.EOF Then
Picture1.Line (0, i - 1)-(1, i), vbBlue, BF
lstPesq.ListItems(i).ForeColor = cor
GoTo proximo
End If

[ô]=================
[ô] se tiver ao menos um item que possui etapa 4 nao concluida
Set dsDetOrc = New ADODB.Recordset
dsDetOrc.Open [Ô]select codorc from detorcamentos where codorc=[Ô] & dsEnche!codorc & [Ô] and teminstalacao=[ô]S[ô] and finalizouinstalacao=[ô]N[ô][Ô], con, adOpenKeyset, adLockOptimistic
If Not dsDetOrc.EOF Then
Picture1.Line (0, i - 1)-(1, i), &H808080, BF
GoTo proximo
End If

[ô]=================
[ô] aqui pinta de branco se estiver tudo pronto menos a entrega
Set dsDetOrc = New ADODB.Recordset
dsDetOrc.Open [Ô]select codorc from detorcamentos where codorc=[Ô] & dsEnche!codorc & [Ô] and isnull(dataentregou)[Ô], con, adOpenKeyset, adLockOptimistic
If Not dsDetOrc.EOF Then
Picture1.Line (0, i - 1)-(1, i), vbWhite, BF
varTudoOk = True
GoTo proximo
End If


[ô] se cair aqui eh porque esta tudo ok
[ô] pinta de verde



Picture1.Line (0, i - 1)-(1, i), vbGreen, BF
proximo:

If varTemItemAtrasado = True And varTudoOk = False Then
Picture1.Line (0, i - 1)-(1, i), vbRed, BF
End If


Next

lstProdXML.Picture = Picture1.Image
lstProdXML.Refresh
DS2T 30/11/2015 17:57:32
#454617
Resposta escolhida
Geralmente esse erro acontece quando você não tem memória suficiente.
Você pode deixar como False e redesenhar manualmente... ou então, você pode diminuir o tamanho do seu picturebox ou a qualidade da imagem...

Abraços!
FBGSYSTEMS 30/11/2015 18:30:04
#454618
Obrigado pela resposta colega.

Resolvi tirando alguns registros da pesquisa, ai o list diminuiu e passou ok, mas foi um paliativo. A mesma rotina em outra situação ja nao funcionaria.
Como faço isso que voce descreveu DS2t?
DS2T 01/12/2015 00:20:38
#454631
Simplesmente deixe :

Picture1.AutoRedraw = True

Como:

Picture1.AutoRedraw = False


Se você precisar redesenhar o picturebox quando ela é minimizada, ou o form sai da tela... Redesenhe no evento Paint.
FBGSYSTEMS 01/12/2015 19:49:56
#454663
Desculpa cara nao consegui entender sua ultima frase. Como assim minimizada ?
Tópico encerrado , respostas não são mais permitidas