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.