Tema: VB6; Clibpoard.SetText(), API SetClipboardData()
Autorius: Laimis
Data: 2012-07-04 04:10:44
Sveiki,
WinXP (atnaujinama), VB6 su paskiausiu SP. Lokalė — tautinė.
Toks bjaurus ir kartu įdomus momentas/klaida.
VB6 programinis clipboard'as (Clibpoard.SetText()) kopijuojant (pvz. iš
grid'ų ir kt.) pačioje VB6 programoje veikia, *atrodytų*, korektiškai,
tačiau iš tikrųjų nekorektiškai nustato CF_UNICODETEXT clipboard'e ir to
pasekoje tekstas nekorektiškai kopijuojamas (paste) į daugumą kitų
programų. Nekorektiška — tai, kad clipboard CF_UNICODETEXT teksto
simbolių reikšmės yra ne unikodinės (neperkoduojama), o ANSI.
Pasinaudojau WinAPI SetClipboardData(). Pavyksta korektiškai nukopijuoti
tekstą CF_UNICODETEXT formate, tačiau tuomet nekorektiškai nustatoma
(transliteruojama nukabinėjant „paukščiukus ir uodegėles“) CF_TEXT,
CF_OEMTEXT ir toks tekstas, suprantama, nebekorektiškai įklijuojamas VB6
programoje (ir kitose, kurios pasiima CF_TEXT).
Visiškai korektiško veikimo su SetClipboardData() pasiekti nepavyko...
(kaip tik klausimėlis API guru: gal kas turi korektiškai veikiantį
pavyzdį?)
Tačiau. TAČIAU.
VB6 kontekstinio meniu "Copy" (ar Ctrl-C) iš textbox'ų veikia visiškai
korektiškai ir, — _kas_įdomiausia_, — bent sykį Ctrl-C nusikopijavus
bent vieną tautinę raidelę su „paukščiuku“, pradeda visiškai korektiškai
veikti programinis VB6 clipboard'as...
Gal kam pravers; toks smagus workaround'as.
Netikrinau kitose lokalėse.