Nullzeiger bei DrawIcon_()

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Nullzeiger bei DrawIcon_()

Beitrag von Mok »

Hallo.
Ich hab mir den Code Wereiterte Items aus der Lib kopiert, bei mir eingefügt und die IDs angepasst. Weil ich der API nicht wirkilich mächtig bin, muss ich wohl mehr anpassen als nur die IDs. Es tritt ein Zeiger auf ein Null-Objekt bei folgendem Code an der markierten Stelle auf.

Code: Alles auswählen

Structure LBITEMEX
  Icon.i
  Title.i
  Text.i
EndStructure

Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
  Select uMsg
    Case #WM_DRAWITEM
      Protected *lpdis.DRAWITEMSTRUCT = lParam
      Protected *lbex.LBITEMEX = GetGadgetItemData(Dates,*lpdis\itemID)
      Protected hbrFace, hdcMem, lplf.LOGFONT, hfntPrevious, hfntTitle
 
      If *lpdis\itemState & #ODS_SELECTED
        hbrFace = CreateSolidBrush_(GetSysColor_(#COLOR_HIGHLIGHT))
        FillRect_(*lpdis\hdc,*lpdis\rcItem,hbrFace)
        DrawFocusRect_(*lpdis\hdc,*lpdis\rcItem)
        SetTextColor_(*lpdis\hdc,GetSysColor_(#COLOR_HIGHLIGHTTEXT))
      Else
        hbrFace = CreateSolidBrush_(GetSysColor_(#COLOR_WINDOW))
        FillRect_(*lpdis\hdc,*lpdis\rcItem,hbrFace)
        SetTextColor_(*lpdis\hdc,GetSysColor_(#COLOR_WINDOWTEXT))
      EndIf
 
      DeleteObject_(hbrFace)
      DrawIcon_(*lpdis\hdc,2,*lpdis\rcItem\top + 2,*lbex\Icon) ;######################
      GetObject_(SendMessage_(*lpdis\hWndItem,#WM_GETFONT,0,0),SizeOf(LOGFONT),lplf)
      lplf\lfHeight = -MulDiv_(12,GetDeviceCaps_(*lpdis\hdc,#LOGPIXELSY),72)
      hfntTitle = CreateFontIndirect_(lplf)
      SetBkMode_(*lpdis\hdc,#TRANSPARENT)
      hfntPrevious = SelectObject_(*lpdis\hdc,hfntTitle)
      TextOut_(*lpdis\hdc,40,*lpdis\rcItem\top + 2,*lbex\title,lstrlen_(*lbex\title))     
      SelectObject_(*lpdis\hdc,hfntPrevious)
      TextOut_(*lpdis\hdc,40,*lpdis\rcItem\top + 20,*lbex\text,lstrlen_(*lbex\text))
      DeleteObject_(hfntTitle)
 
      ProcedureReturn #True
    EndSelect
 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Procedure AddLBItemEx(Gadget,Position,Icon,Title$,Text$)
  Protected *lbex.LBITEMEX = AllocateMemory(SizeOf(LBITEMEX)), Index
  *lbex\Icon = Icon
  CompilerIf #PB_Compiler_Unicode
    *lbex\Title = AllocateMemory(Len(Title$) * 2 + 2)
    *lbex\Text = AllocateMemory(Len(Text$) * 2 + 2)
  CompilerElse
    *lbex\Title = AllocateMemory(Len(Title$) + 1)   
    *lbex\Text = AllocateMemory(Len(Text$) + 1)   
  CompilerEndIf   
  PokeS(*lbex\Title,Title$)
  PokeS(*lbex\Text,Text$)
  Index = SendMessage_(GadgetID(Gadget),#LB_ADDSTRING,0,"")
  SetGadgetItemData(Gadget,Index,*lbex)
EndProcedure

 ; [...]

OpenWindow(#DateWindow,0,0,350,150,"Datum einfügen",#PB_Window_WindowCentered|#PB_Window_SystemMenu,WindowID(Window_0))
Dates = ListViewGadget(#PB_Any,5,25,230,120,#LBS_OWNERDRAWFIXED)
SendMessage_(GadgetID(Dates),#LB_SETITEMHEIGHT,0,36)
SetWindowCallback(@WindowCallback())
AddLBItemEx(Dates,-1,ImageID(CatchImage(#PB_Any,?IconDateICO)),FormatDate("%dd.%mm.%yyy",Date()),"DD.MM.JJJJ")
Grüße, Mok
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Nullzeiger bei DrawIcon_()

Beitrag von ts-soft »

Hast Du denn auch ein Icon in einer DataSection mit dem Label:
IconDateICO: IncludeBinary "bla.ico"
eingebunden?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Nullzeiger bei DrawIcon_()

Beitrag von Mok »

@ts-soft:

Code: Alles auswählen

IncludePath "icons"

DataSection
  IconDate:      IncludeBinary "date.png"
    IconDateICO: IncludeBinary "date.ico"
EndDataSection
Außerdem funzt es nicht einaml mit LoadImage()
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Nullzeiger bei DrawIcon_()

Beitrag von ts-soft »

Wie wäre es mit:

Code: Alles auswählen

Global Dates
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Nullzeiger bei DrawIcon_()

Beitrag von Mok »

ts-soft hat geschrieben:Wie wäre es mit:

Code: Alles auswählen

Global Dates
Es passiert immer wieder /:-> Bild

Edit
Damnit, funzt noch immer nicht :(
Zuletzt geändert von Mok am 20.04.2010 21:17, insgesamt 1-mal geändert.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Nullzeiger bei DrawIcon_()

Beitrag von ts-soft »

Mok hat geschrieben:Es passiert immer wieder /:-> Bild
Aber nur denjenigen, die den Sinn von EnableExplicit immer noch nicht verstanden haben, also den
absoluten Programmier-Daus! :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Nullzeiger bei DrawIcon_()

Beitrag von Kaeru Gaman »

Es passiert immer wieder
dann benutz doch endlich mal EnableExplicit, da würde er dir sagen dass es nicht definiert ist und du würdest es merken, dass du das Global vergessen hast. /:->
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Nullzeiger bei DrawIcon_()

Beitrag von ts-soft »

Noch mal rin in die Kerbe :mrgreen:
Abgesehen davon, die Fehlermeldung des Debugger: Gadget nicht Initialisiert
hätte Dich auch auf den richtigen Weg gebracht, wenn Du die Meldung mal
gelesen hättest :lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Nullzeiger bei DrawIcon_()

Beitrag von Mok »

Wie man heutzutage geflamed wird... man kann ja nichtmal mehr seine eigenen Edits finden :mrgreen:
Edit: Damnit, funzt noch immer nicht :(
Das ganze hätte eigentlich nur eine Demo werden sollen, dann hab ich's immer erweitert bis es jetzt ein zukünftiger Texteditor sein soll (skriva ist schwedisch und heißt "schreiben")

Edit:
Noch mal rin in die Kerbe :mrgreen:
Abgesehen davon, die Fehlermeldung des Debugger: Gadget nicht Initialisiert
hätte Dich auch auf den richtigen Weg gebracht, wenn Du die Meldung mal
gelesen hättest :lol:
Bei mir gibt's keine solche Fehlermeldung :?


Edit #2:
OK, EnableExplicit ist wirklich "the answer to everything" Könnte mich grade martern, weil ich selbst einen Artikel zu EnableExplicit in den FAQ geschrieben hab >.<
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Nullzeiger bei DrawIcon_()

Beitrag von ts-soft »

Mok hat geschrieben:Bei mir gibt's keine solche Fehlermeldung :?
Vielleicht beim Debuggen von Speicherfehlern den Purifier anschalten, dann
bekommste auch die passende Fehlermeldung.

Und beim nächsten mal bitte gleich einen ausführbaren Code, ansonsten
wirste Deine dummen Fehler selber suchen müssen :twisted:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten