Seite 2 von 2

Re: Grafikfehler im ListIconGadget

Verfasst: 26.07.2007 12:29
von Donald
BI2 hat geschrieben:Hallo, noch keiner da?

Dann mache ich mal den Anfang.

Im ListIconGadget treten unter Win XP Grafikfehler auf (unter W9x und 2K gab es keine Probleme).
Hi,
kennt man irgendwoher den Fehler ;-)

Schau mal hier rein:
http://www.purebasic.fr/german/viewtopi ... ght=#67149

Verfasst: 26.07.2007 17:22
von BI2
@Donald: Die Suche im Board habe ich zwar bemüht, über diesen Artikel bin ich aber nicht gestolpert (wahrscheinlich falsche Suchbegriffe)

Habe es mal mit dem Tip von Fluid Byte versucht, leider ohne Erfolg. Vielleicht hat ja noch jemand eine Idee wo der Fehler liegt.

Code: Alles auswählen

#LVM_FIRST = $1000
#LVM_SETEXTENDEDLISTVIEWSTYLE = (#LVM_FIRST + 54)
#LVM_GETEXTENDEDLISTVIEWSTYLE = (#LVM_FIRST + 55)
#LVS_EX_DOUBLEBUFFER = $00010000

Procedure MakeDoubleBuffered(gadget.l)
	Protected styles.l
  styles = SendMessage_(GadgetID(gadget), #LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
  styles | #LVS_EX_DOUBLEBUFFER
  SendMessage_(GadgetID(gadget), #LVM_SETEXTENDEDLISTVIEWSTYLE, 0, styles)
EndProcedure

If OpenWindow(0, 200, 200, 300, 245, "ListIcon-Test", #PB_Window_SystemMenu | #PB_Window_TitleBar)
  If CreateGadgetList(WindowID(0))
    ListIconGadget(0, 0, 0, 300, 245, "Column0", 80, #PB_ListIcon_CheckBoxes | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_MultiSelect)
    AddGadgetColumn(0, 1, "Column1", 80)
    AddGadgetColumn(0, 2, "Column2", 80)
  EndIf
EndIf

For i = 0 To 50
	AddGadgetItem(0, -1, "Test " + Str(i) + Chr(10) + "Test " + Str(i) + Chr(10) + "Test " + Str(i))
Next

MakeDoubleBuffered(0)

SetActiveGadget(0)

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend

End
Gruß, BI2

Verfasst: 27.07.2007 02:33
von PureLust
BI2 hat geschrieben:Vielleicht hat ja noch jemand eine Idee wo der Fehler liegt.
Versuch doch mal den Tip von MLK.
Seine Lösung klingt in meinen Augen recht plausibel.

Verfasst: 27.07.2007 14:42
von BI2
@PureLust: Hier hatte ich das Problem, wie ich eine Message abfange, aber die Boardsuche war mein Freund :D

Mit folgendem Ergebnis kann man Leben. Es zuckt zwar noch etwas nervös direkt beim scrollen, danach ist aber alles in Ordnung. :allright:

Code: Alles auswählen

If OpenWindow(0, 200, 200, 300, 245, "ListIcon-Test", #PB_Window_SystemMenu | #PB_Window_TitleBar)
  If CreateGadgetList(WindowID(0))
    ListIconGadget(0, 0, 0, 300, 245, "Column0", 80, #PB_ListIcon_CheckBoxes | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_MultiSelect)
    AddGadgetColumn(0, 1, "Column1", 80)
    AddGadgetColumn(0, 2, "Column2", 80)
  EndIf
EndIf

For i = 0 To 50
	AddGadgetItem(0, -1, "Test " + Str(i) + Chr(10) + "Test " + Str(i) + Chr(10) + "Test " + Str(i))
Next

Global OldProcedure

Procedure CallbackProcedure(hWnd, Message, wParam, lParam)
	Select Message
		Case #WM_VSCROLL
			InvalidateRect_(GadgetID(0), 0, #True)
	EndSelect
	ProcedureReturn CallWindowProc_(OldProcedure, hWnd, Message, wParam, lParam)
EndProcedure

OldProcedure = SetWindowLong_(GadgetID(0), #GWL_WNDPROC, @CallbackProcedure())

SetActiveGadget(0)

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend

End
Nochmal danke an alle.

Gruß, BI2