[Lazarus] WinCE and strings

Sven Barth pascaldragon at googlemail.com
Tue Jul 10 09:58:24 CEST 2012


Am 10.07.2012 09:43, schrieb Antonio Fortuny:
> Hi All.
>
> Assuming that I'm modifying an application which
> - will run on Win32 and WinCE (handheld device) (X-compilation, 2 targets)
> - all string variables have previously been defined as String;
> - WinCE (5.?) is UNICODE
>
> Just to make sure that I'm on the right way, do you see someting wrong
> in the following sentences:
>
> - all components using text (TLabel, TButton, TEdit, etc) use WideStrings

Wrong. All components [provided by the LCL] use "AnsiString" with UTF-8 
encoding on every platform/widgetset. Please see also 
http://wiki.lazarus.freepascal.org/LCL_Unicode_Support

> - I need to convert (using conditional code) from string to WideString
> when compiling for WinCE, like

You only need to convert if you have text that is not encoded in UTF-8. 
Then you should use UTF8ToSys/SysToUTF8 or AnsiToUTF8/UTF8ToAnsi.

>
> Example:
> function ShowSomething(const Msg: string): Boolean; <<<--------
> unchanged function definition
> var
> {$IFDEF WINCE}
> wStr: WideString;
> {$ELSE}
> wStr: String;
> {$ENDIF}
> begin
> result := False;
> {$IFDEF WINCE}
> wStr := UnicodeString(msg);
> {$ELSE}
> wStr := msg;
> {$ENDIF}
> ALabel.Caption := wStr;
> // I know, the Caption could be assigned immediately instead of passing
> through a variable
> // this is just an example
> ...
> Result := True
> end;
>
> Thanks for your remarks

function ShowSomething(const Msg: String): Boolean;
begin
   result := False;
   ALabel.Caption := AnsiToUTF8(Msg); // if Msg is encoded in Ansi
   ALabel.Caption := Msg; // if Msg is already UTF-8 encoded
   ...
   Result := True;
end;

Regards,
Sven




More information about the Lazarus mailing list