Hallo Bisonte.
Mir geht es in der Hauptsache um diese drei Zeilen:
font=GetGadgetFont(butt)
CloseWindow(win)
FreeFont(font)
Der Grundgedanke dabei war,
die Verwaltung der ID's dem System zu überlassen
und diese dann bei Bedarf abzurufen und zu verarbeiten.
Das scheint aber in diesem Fall nicht zu gehen.
Schade, hält das System doch alle Werte bereit.
Ok, dann also wieder auf die gute Art alles vorher festlegen.
Ursprünglich hatte ich mit #PB_Any versucht anstatt mit Konstanten.
Anbei noch mal den Code, an dem ich gerade bastel.
Bitte nicht zu streng sein, ich weis das der sch... ist,
weil ich am Experimentieren bin, was geht und was nicht.
Code: Alles auswählen
Global AnzFonts=1
Enumeration ;AnzFonts
#HinweisFont1
#HinweisFont2
#HinweisFont3
EndEnumeration
AnzFonts=#PB_Compiler_EnumerationValue
Procedure ListWindows(hwnd,Param)
Protected String$
Protected String2$
Protected font
String$ = Space(250)
String2$ = Space(1024)
GetWindowText_(hwnd,String$,250)
GetClassName_(hwnd,@String2$,Len(String2$))
Debug "Handle-Nummer des Gadgets: "+Str(hwnd)
Debug "PureBasic-Nummer des Gadgets: "+Str(GetProp_(hwnd, "PB_ID"))
Debug "Typ des Gadgets: "+String2$
Debug "Inhalt des Gadgets: "+String$
font=GetGadgetFont(GetProp_(hwnd, "PB_ID"))
Debug "FontID : "+Str(font)
Debug "--------------------------------------------------------------------"
;FreeFont((font))
ProcedureReturn #True
EndProcedure
Procedure MyCloseWindow(wnd)
EnumChildWindows_(WindowID(wnd),@ListWindows(),0)
CloseWindow(wnd)
EndProcedure
Procedure Hinweis(wnd,a1$,a2$,a3$, ok=0)
Protected font1 , font2 , font3
fl=#PB_Window_ScreenCentered
fl|#PB_Window_Tool
fl|#PB_Window_SystemMenu
If a2$="":a2$="Hinweis":EndIf
win=OpenWindow(#PB_Any ,0,0,0,0,a2$,fl,WindowID(wnd))
; ----- Fensterbreite ermitteln
; --- erst das Textfeld
fonth3=16
LoadFont(#HinweisFont3,"",fonth3)
StartDrawing(WindowOutput(win))
DrawingFont(FontID(#HinweisFont3))
zeilen=CountString(a3$,#LF$)+1
For i=1 To zeilen
a$=StringField(a3$,i,#LF$)
a=TextWidth(a$)
If txtw<a:txtw=a:EndIf
a=TextHeight(a$)
If txth<a:txth=a:EndIf
Next
StopDrawing()
feld3w=txtw+16
feld3h=txth*zeilen+8
; --- Das Symbolfeld
If Not a1$=""
LoadFont(#HinweisFont1,"",fonth3*zeilen)
StartDrawing(WindowOutput(win))
DrawingFont(FontID(#HinweisFont1))
feld1h=feld3h
feld1w=TextWidth(a1$)+8
StopDrawing()
EndIf
; --- Die buttonmaße
If ok:butth=2*txth:EndIf
; --- Fenster einstellen
winw=feld1w + feld3w
winh=feld3h + butth
ExamineDesktops()
x=DesktopWidth(0)/2 - winw/2
y=DesktopHeight(0)/2 - winh/2
ResizeWindow(win,x,y,winw,winh)
If Not a1$=""
i=TextGadget(#PB_Any,0,0,feld1w,feld1h,a1$,#SS_CENTER);|#PB_Text_Border
SetGadgetFont(i,FontID(#HinweisFont1))
EndIf
i=TextGadget(#PB_Any,feld1w,0,feld3w,feld3h,a3$,#SS_CENTER);|#PB_Text_Border
SetGadgetFont(i,FontID(#HinweisFont3))
If ok
StartDrawing(WindowOutput((win)))
DrawingFont(FontID(#HinweisFont3))
w=TextWidth(" Ok ")+4
StopDrawing()
x=winw/2 - w/2
y=feld3h + txth/2
h=txth+4
butt=ButtonGadget(#PB_Any,x,y,w,h," Ok ")
SetGadgetFont(i,FontID(#HinweisFont3))
EndIf
If ok
Repeat
Until WaitWindowEvent()=#PB_Event_Gadget And EventGadget()=butt
a=GetGadgetFont(butt)
CloseWindow(win)
;FreeFont(FontID(a))
win=0
EndIf
ProcedureReturn win
EndProcedure
fl=#PB_Window_ScreenCentered
fl|#PB_Window_SystemMenu
wnd=OpenWindow(#PB_Any ,0,0,300,200,a2$,fl)
a$="Dies"+#LF$
a$+"ist ein"+#LF$
a$+"Beispieltext"+#LF$+#LF$
a$+"Daten werden Eingelesen"
butt=0
;butt=1
win=Hinweis(wnd,"!","",a$,butt)
If butt =0
; Aktion, z.B. Daten einlesen
Delay(4000)
EndIf
If win
MyCloseWindow(win)
EndIf
Repeat:Until WaitWindowEvent()=#WM_CLOSE
Gruß & Dank:
BSP