Bei mir sind die Geschwindigkeitswerte ca 640 zu 530 ohne Debugger.
Außerdem hätte ich gerne eure Meinung gewußt. Welche Methode haltet ihr für die Bessere. Mal abgesehen von der Geschwindigkeit. Oder gibt es noch eine Bessere ?
Code: Alles auswählen
Procedure.l TextBreitePB(fontid,txt$)
StartDrawing(WindowOutput(0))
If fontid
DrawingFont(fontid)
EndIf
br = TextWidth(txt$)
StopDrawing()
ProcedureReturn br
EndProcedure
Procedure TextbreiteApi(fontid,txt$,handle)
dc=GetDC_(handle)
SelectObject_(dc,fontid)
GetTextExtentPoint32_(dc,@txt$,Len(txt$),s.size)
ReleaseDC_(handle,dc)
ProcedureReturn s\cx
EndProcedure
;=======================================================
fontid = FontID(LoadFont(#PB_Any, "arial", 8))
max=100000
txt$="TeststringTeststringTeststring"
hwnd = OpenWindow(0, 0,0, 100, 100, "Test",#PB_Window_SystemMenu | 1)
CreateGadgetList(WindowID(0))
buttonnr=ButtonGadget(#PB_Any,0,0,80,40,txt$)
buttonid=GadgetID(buttonnr)
SetGadgetFont(buttonnr,fontid)
a=GetTickCount_()
For j=1 To max
br1=TextBreitePB (fontid,txt$)
Next
b=GetTickCount_()-a
a=GetTickCount_()
For j=1 To max
br2=TextBreiteApi(fontid,txt$,hwnd) ;oder buttonid)
Next
c=GetTickCount_()-a
MessageRequester(Str(br1)+"-"+Str(br2),"PB "+Str(b)+#LF$+"Api "+Str(c))
;Repeat
;Until WaitWindowEvent() = #PB_Event_CloseWindow