<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='color:#1F497D'>The problem with storing Unicode in utf8 is that the caller always needs to know whether a string contains ansi or utf8 and that can get messy/buggy real quick if you have a big project<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>I am sure you have thought about it and you have your own reason. But as far as I am concerned, if you go down that road to slowly Unicode enable your application (including later on maybe Form captions, labels, edits, listboxes, etc) then using widestring and something like TNT library on delphi7 is the easiest way (or upgrade to >delphi2009)<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>Kind Regards,<br>Stefan Mueller</span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#585757'> <br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#666699'>_______________________<br>R&D Manager<br>ORCL Toolbox LLP, Japan<br></span><span style='color:#1F497D'><a href="http://www.orcl-toolbox.com/" title="blocked::http://www.orcl-toolbox.com/"><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>http://www.orcl-toolbox.com</span></a><o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> delphi-bounces@listserver.123.net.nz [mailto:delphi-bounces@listserver.123.net.nz] <b>On Behalf Of </b>Ross Levis<br><b>Sent:</b> Tuesday, October 02, 2012 7:25 PM<br><b>To:</b> 'NZ Borland Developers Group - Delphi List'<br><b>Subject:</b> Re: [DUG] Unicode help in D7<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>I’ve hit a snag.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>D7 defines IShellLinkW like this.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:10.0pt;font-family:"Arial","sans-serif"'> IShellLinkW = interface(IUnknown) { sl }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:10.0pt;font-family:"Arial","sans-serif"'> [SID_IShellLinkW]<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:10.0pt;font-family:"Arial","sans-serif"'> function GetPath(pszFile: PWideChar; cchMaxPath: Integer;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:10.0pt;font-family:"Arial","sans-serif"'> var pfd: TWin32FindData; fFlags: DWORD): HResult; stdcall;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>I think the TWin32FindData should be TWin32FindDataW. I take it this is a bug, and I’ll define my own one.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>Ross.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> <a href="mailto:delphi-bounces@listserver.123.net.nz">delphi-bounces@listserver.123.net.nz</a> <a href="mailto:[mailto:delphi-bounces@listserver.123.net.nz]">[mailto:delphi-bounces@listserver.123.net.nz]</a> <b>On Behalf Of </b>Ross Levis<br><b>Sent:</b> Tuesday, 2 October 2012 10:58 p.m.<br><b>To:</b> 'NZ Borland Developers Group - Delphi List'<br><b>Subject:</b> Re: [DUG] Unicode help in D7<o:p></o:p></span></p></div></div><p class=MsoNormal><span lang=EN-NZ><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>Thanks for that. I did download some free 3<sup>rd</sup> party components and pas files I found which include a TOpenDialogW, WideFindFirst, WideFileExists, etc. They should be all I need.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>I’ll actually be storing everything in UTF8 and converting backwards and forwards to full unicode as required for the Windows API. That way I can keep most of my code using the default AnsiString, standard TStringLists, etc.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>For me it would be useful if someone had created a set of UTF8 components. I find it so much easier to work with. I’ve created a UTF8FileExists function, for example. I suppose later Delphi versions to the conversions automatically.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>Cheers,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>Ross.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> <a href="mailto:delphi-bounces@listserver.123.net.nz">delphi-bounces@listserver.123.net.nz</a> [<a href="mailto:delphi-bounces@listserver.123.net.nz">mailto:delphi-bounces@listserver.123.net.nz</a>] <b>On Behalf Of </b>Stefan Mueller<br><b>Sent:</b> Tuesday, 2 October 2012 9:22 p.m.<br><b>To:</b> 'NZ Borland Developers Group - Delphi List'<br><b>Subject:</b> Re: [DUG] Unicode help in D7<o:p></o:p></span></p></div></div><p class=MsoNormal><span lang=EN-NZ><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>The buffer has to be </span><span lang=EN-NZ style='color:#1F497D'>WideChar if you use the IShellLinkW interface.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='color:#1F497D'>I also had my software unicodified with delphi7. I used the TNT components (last free version is here: </span><a href="http://www.axolot.com/TNT/">http://www.axolot.com/TNT/</a> - it got bought out by TMS software: <a href="http://www.tmssoftware.com/site/tmsuni.asp">http://www.tmssoftware.com/site/tmsuni.asp</a> ) and that made things very easy.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The TNT component pack adds Unicode enabled VCL-controls as well as Unicode Windows-API support for many functions(FileOpen,FileCreate,etc) and classes(WideStringList, etc). The library makes it easy to be dealing with Unicode. <span style='color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:navy'><br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:black'>Kind Regards,<br>Stefan Mueller</span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#585757'> <br></span><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#666699'>_______________________<br>R&D Manager<br>ORCL Toolbox LLP, Japan<br></span><span style='color:#1F497D'><a href="http://www.orcl-toolbox.com/" title="blocked::http://www.orcl-toolbox.com/"><span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>http://www.orcl-toolbox.com</span></a><o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p></div><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> <a href="mailto:delphi-bounces@listserver.123.net.nz">delphi-bounces@listserver.123.net.nz</a> [<a href="mailto:delphi-bounces@listserver.123.net.nz">mailto:delphi-bounces@listserver.123.net.nz</a>] <b>On Behalf Of </b>Ross Levis<br><b>Sent:</b> Tuesday, October 02, 2012 5:00 PM<br><b>To:</b> 'NZ Borland Developers Group - Delphi List'<br><b>Subject:</b> [DUG] Unicode help in D7<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>I’m adding a small amount of Unicode support in my D7 app to enable opening files where the filenames are in foreign languages. Currently my app can’t even open these files. I’ve installed an OpenFile dialog which provides WideString results.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>One thing I need is to resolve shortcuts. I have converted the following function which I had for ANSI filenames into Unicode. Just IShellLinkW and TWin32FindDataW changed.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>function ResolveShortcut(const LinkPath: WideString): WideString;<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>var<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>ShellLink: IShellLinkW<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'> FindData: TWin32FindDataW;<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'> buff: Array [0..Max_Path-1] of Char;<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>begin<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'> ShellLink := CreateComObject(CLSID_ShellLink) as IShellLinkW;<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'> PersistFile := ShellLink as IPersistFile;<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'> if (PersistFile.Load(PWideChar(LinkPath),STGM_READ) = S_OK) and<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'> (ShellLink.Resolve(Application.Handle, SLR_NO_UI) = NOERROR) and<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'> (ShellLink.GetPath(buff,MAX_PATH,FindData,SLGP_UNCPRIORITY)= NOERROR) then<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'> Result := buff<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'> else Result := ''<o:p></o:p></span></b></p><p class=MsoNormal><b><span lang=EN-NZ style='font-size:9.0pt;font-family:"Arial","sans-serif"'>end;<o:p></o:p></span></b></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>But I’m not sure if the buff array should be of WideChar or left as Char.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>Does MAX_PATH assume wide characters?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>Thanks,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>Ross.<o:p></o:p></span></p></div></body></html>