Page 1 of 1

bug of len() or winApi for chinese

Posted: Thu Dec 20, 2012 5:49 pm
by gurj
pb6.1;winxp

Code: Select all

Procedure SelectEditorLine(EditorID.I, LineNumber.I)
StartOfLine = SendMessage_(GadgetID(EditorID), #EM_LINEINDEX, LineNumber, 0)
Selection.CHARRANGE\cpMin = StartOfLine
Selection.CHARRANGE\cpMax = StartOfLine + Len(GetGadgetItemText(EditorID, LineNumber)) ;+ 1;1是换行符
SendMessage_(GadgetID(EditorID), #EM_EXSETSEL, 0, @Selection)
EndOfLine=Selection.CHARRANGE\cpMax
EndProcedure
OpenWindow(0,0,0,300,200,"Edit Control VCenter",#WS_SYSMENU | #WS_CAPTION | 1)
EditorGadget(0,0,30,300,180,#ES_MULTILINE|#ES_CENTER )
AddGadgetItem(0,-1,"[02:08.92][00:45.07]我醉 一片朦胧zzz")
AddGadgetItem(0,-1,"[00:02.85]剑刀如梦-董贞zzz")

Debug Len("[02:08.92][00:45.07]我醉 一片朦胧zzz")
Debug Len("[00:02.85]剑刀如梦-董贞zzz")
SelectEditorLine(0,1)
  Repeat 
   EventID.l = WaitWindowEvent()
   Select EventID
   Case #PB_Event_CloseWindow
    Quit = 1     
    EndSelect

   Until Quit = 1


Re: bug of len() or winApi for chinese

Posted: Thu Dec 20, 2012 7:53 pm
by IdeasVacuum
Are you using the Unicode Compiler option?

Re: bug of len() or winApi for chinese

Posted: Thu Dec 20, 2012 8:57 pm
by Puffolino
Are you using the Version 6.1 of PureBasic? :shock:

Re: bug of len() or winApi for chinese

Posted: Thu Dec 20, 2012 9:43 pm
by Shield
Len reports the correct length here after enabling Unicode support,
however I found a bug in the IDE. Will report it.

Re: bug of len() or winApi for chinese

Posted: Thu Dec 20, 2012 10:25 pm
by gurj
sorry pb4.61.

ok:Debug Len("[00:02.85]剑刀如梦-董贞zzz")
no:SelectEditorLine(0,1)
Unicode ok:SelectEditorLine(0,1)
Unicode but disorder

I use:
ok:

Code: Select all

Procedure SelectEditorLine(EditorID,LineNumber.I)
 StartOfLine = SendMessage_(GadgetID(EditorID), #EM_LINEINDEX, LineNumber, 0)
 Selection.CHARRANGE\cpMin = StartOfLine
 StartOfnextLine = SendMessage_(GadgetID(EditorID), #EM_LINEINDEX, LineNumber+1, 0)
 Selection.CHARRANGE\cpMax = StartOfnextLine-1 
 SendMessage_(GadgetID(EditorID), #EM_EXSETSEL, -1, @Selection)
 EndOfLine=Selection.CHARRANGE\cpMax
EndProcedure