Hi there,
thanks for the API-stuff

How would you add unicode?
My approach for my discontinued Reisekostenrechner was this... Needs some optimization, I think, but works.
Code:
ImportC ""
HiliteControl(ControlRef.L, HiliteState.L)
SetControlData(Control.L, ControlPartCode.L, TagName.L, BufferSize.L, *Buffer)
EndImport
#kControlButtonPart = 10
#kControlPushButtonDefaultTag = 'dflt'
Global ReqStandardBild
#de = 0
#en = 1
#fr = 2
#it = 3
#PB_MessageRequester_YesCancel = 99
#PB_MessageRequester_NoCancel = 100
#PB_MessageRequester_OkCancel = 101
Procedure QW_MessageRequester(Titel$,Text$,Art=#PB_MessageRequester_Ok,Sprache=0,Bild=-1)
If Sprache = #de : Yes$ = "Ja" : No$ = "Nein" : Cancel$ = "Abbrechen" : OK$ = "OK" : EndIf
If Sprache = #en : Yes$ = "Yes" : No$ = "No" : Cancel$ = "Cancel" : OK$ = "OK" : EndIf
If Sprache = #fr : Yes$ = "Oui" : No$ = "Non" : Cancel$ = "Cancel" : OK$ = "OK" : EndIf
If Sprache = #it : Yes$ = "Si" : No$ = "No" : Cancel$ = "Cancel" : OK$ = "OK" : EndIf
ReqWin = OpenWindow(#PB_Any, 0, 0, 400, 160, Titel$, #PB_Window_TitleBar|#PB_Window_Tool|#PB_Window_ScreenCentered|#PB_Window_WindowCentered )
If Bild = -1
Bild = ReqStandardBild
If IsImage(Bild)
ReqImg = ImageGadget(#PB_Any, 10, 10, 120, 90, ImageID(Bild))
EndIf
EndIf
ReqText1 = TextGadget(#PB_Any, 140, 10, 250, 20, Titel$)
ReqText2 = TextGadget(#PB_Any, 140, 30, 250, 130, Text$)
ReqFont = LoadFont(#PB_Any,"Arial",14,#PB_Font_Bold)
SetGadgetFont(ReqText1,FontID(ReqFont))
; AddKeyboardShortcut(ReqWin, #PB_Shortcut_Return, 1)
Select Art
Case #PB_MessageRequester_Ok
OKKnopf = ButtonGadget(#PB_Any, WindowWidth(ReqWin) - 70, WindowHeight(ReqWin) - 30, 60, 20, OK$)
Case #PB_MessageRequester_YesNo
YESKnopf = ButtonGadget(#PB_Any, WindowWidth(ReqWin) - 140, WindowHeight(ReqWin) - 30, 60, 20, Yes$)
NoKnopf = ButtonGadget(#PB_Any, WindowWidth(ReqWin) - 70, WindowHeight(ReqWin) - 30, 60, 20, No$)
HiliteControl(GadgetID(YESKnopf), #kControlButtonPart)
Case #PB_MessageRequester_YesCancel
YESKnopf = ButtonGadget(#PB_Any, WindowWidth(ReqWin) - 140, WindowHeight(ReqWin) - 30, 60, 20, Yes$)
CancKnopf = ButtonGadget(#PB_Any, 10, WindowHeight(ReqWin) - 30, 100, 20, Cancel$)
HiliteControl(GadgetID(YESKnopf), #kControlButtonPart)
Case #PB_MessageRequester_NoCancel
NoKnopf = ButtonGadget(#PB_Any, WindowWidth(ReqWin) - 70, WindowHeight(ReqWin) - 30, 60, 20, Yes$)
CancKnopf = ButtonGadget(#PB_Any, 10, WindowHeight(ReqWin) - 30, 100, 20, Cancel$)
HiliteControl(GadgetID(NoKnopf), #kControlButtonPart)
Case #PB_MessageRequester_OkCancel
OKKnopf = ButtonGadget(#PB_Any, WindowWidth(ReqWin) - 70, WindowHeight(ReqWin) - 30, 60, 20, OK$)
CancKnopf = ButtonGadget(#PB_Any, 10, WindowHeight(ReqWin) - 30, 100, 20, Cancel$)
HiliteControl(GadgetID(OKKnopf), #kControlButtonPart)
Case #PB_MessageRequester_YesNoCancel
YESKnopf = ButtonGadget(#PB_Any, WindowWidth(ReqWin) - 140, WindowHeight(ReqWin) - 30, 60, 20, Yes$)
NoKnopf = ButtonGadget(#PB_Any, WindowWidth(ReqWin) - 70, WindowHeight(ReqWin) - 30, 60, 20, No$)
CancKnopf = ButtonGadget(#PB_Any, 10, WindowHeight(ReqWin) - 30, 100, 20, Cancel$)
HiliteControl(GadgetID(YESKnopf), #kControlButtonPart)
EndSelect
ReqRaus = 234567
Repeat
event = WaitWindowEvent(25)
If event = #PB_Event_Gadget
gadget = EventGadget()
Select Gadget
Case OKKnopf : ReqRaus = #PB_MessageRequester_Ok
Case YESKnopf : ReqRaus = #PB_MessageRequester_Yes
Case NoKnopf : ReqRaus = #PB_MessageRequester_No
Case CancKnopf : ReqRaus = #PB_MessageRequester_Cancel
EndSelect
; ElseIf event = #PB_Event_Menu
; Debug "jo"
; Select EventMenu()
; Case 1 : Debug "jo"
; EndSelect
EndIf
Until ReqRaus <> 234567
If IsGadget(ReqText1) : FreeGadget(ReqText1) : EndIf
If IsGadget(ReqText2) : FreeGadget(ReqText2) : EndIf
If IsGadget(OKKnopf) : FreeGadget(OKKnopf) : EndIf
If IsGadget(YESKnopf) : FreeGadget(YESKnopf) : EndIf
If IsGadget(NoKnopf) : FreeGadget(NoKnopf) : EndIf
If IsGadget(CancKnopf) : FreeGadget(CancKnopf) : EndIf
If IsGadget(ReqImg) : FreeGadget(ReqImg) : EndIf
If IsFont(reqFont) : FreeFont(ReqFont) : EndIf
If IsWindow(ReqWin) : CloseWindow(ReqWin) : EndIf
ProcedureReturn ReqRaus
EndProcedure
QW_MessageRequester("Test","blablabla")