memo кирилица

11 отговора 0 прегледа
#1

memo кирилица

Здр., проблемът ми с делпхи 6 е такъв: имам memo поле вътре в него се визуализират кирилцки символи и всичко е коректно.При опит за копиране с мишката от мемо полето в notepad или word се получават йероглифи.При запис на memo-то във файл със savetofile, текста във файла е ок.

Отговор
в отговор на MEMO #2

Re: memo кирилица

Когато се копира от мемото клавиатурата трябва да ти е на български. Всъщност ти копираш неуникод текст към уникод, при което се извършва прекодирането му от една кодова таблица към уникод. Кодовата таблица се определя от текущият ти keyboard layout, т.е. в твоя случай (предполагам) English, а трябва да ти е Bulgarian.

Отговор
в отговор на andrew_nikoloff #3

Re: memo кирилица

Да, оправи се. Но така е супер тъпо, да карам потребителя, който прави милион и едно копирания на ден всеки път да гледа как му е обърната клавиатурата.Може ли в програмния код да обръщам някак си автоматично това?

Отговор
в отговор на andrew_nikoloff #4

Re: memo кирилица

Така че, ми се наложи да запиша по една
LoadKeyboardLayout('00000402', KLF_ACTIVATE);
процедурка в onmousedown и on enter на полетата и едитите, от които ще копирам за да съм сигурен, че лайъта ми е BG.
По принцип е добре да се провери текущото му състояние, да се запише в буфер, да се промени преди копиране и да се върне обратно след копирането му, иначе потребителите на windows могат съвсем да побеснеят.

Отговор
в отговор на MEMO #5

Re: memo кирилица

Изтагли си Unicode контроли от

[линк]

Работят. Вършат работа и когато за Language for non-Unicode Programs не е избран Bulgarian

Отговор
в отговор на MEMO #6

Re: memo кирилица

Уверявам те, че ако програмата, която позлвам тръгне да ми сменя keyboard layout-а ще побеснея много повече
Вместо да вършиш глупости или вземи да правиш unicode приложения (както ти препоръчаха вече) или си промени копирането, така че да записваш (и/или) unicode версия на текстовете от контролите. В противен случай ще трябва да се примириш, че твоето приложение ще се държи под Windows като всички останали non unicode приложения.

Отговор
в отговор на мeмo1 #7

Re: memo кирилица

Тук е обсъждано програмно решение на проблема

Отговор
в отговор на andrew_nikoloff #8

Re: memo кирилица

Хаха, благодаря. Без твоята последна дума, само с постовете на другите нямаше да се справя. Уж много знаеш, а последен се обаждаш за да повтаряш като папагал, след като останалите са изяснили нещата.
Еве, кой ти е шеф, да му искам и аз да ми плаща за дрънкане на празни приказки у губене на време, вместо работа?ьаьаьа

Отговор
в отговор на мeмo1 #9

И какво толкова ценно има в това мемо?

И какво толкова ценно има в това мемо, че потребителя "един милион пъти" го копира?
И къде го слага след това?
Тая работа не може ли да се автоматизира?

Отговор
в отговор на NDeu #10

Re: memo кирилица (@NDeu)

Моля, пояснете каква е разликата между предложеното в лина на NDeu и това

procedure StrToClipboard(S:String);
var
W:PWideChar;
H:THandle;
begin
H:=GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE,Length(S)*2+2);
W:=GlobalLock(H);
W:=StringToWideChar(S,W,Length(S)*2+2);
GlobalUnLock(H);
Clipboard.SetAsHandle(CF_UNICODETEXT,H);
end;



Ето го от линка:

{}procedure PutStringIntoClipboard( const Value: string; LocaleID: longint);
// NDeu
var
Size : Integer;
Data : THandle;
DataPtr : Pointer;
begin
if Length( Value) = 0 then exit;
Clipboard.Open;
try
Clipboard.AsText:= Value;
Size:= 4;
Data:= GlobalAlloc( GMEM_MOVEABLE + GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock( Data);
try
Move(LocaleID, DataPtr^, Size);
Clipboard.SetAsHandle(CF_LOCALE, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
Clipboard.Close;
end;
end;
{[линк]
procedure PutStringIntoClipBoard(const Str: WideString);
var
Size: Integer;
Data: THandle;
DataPtr: Pointer;
begin
Size:=Length(Str);
if Size = 0 then exit;
Size:=Size shl 1 + 2;
Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(Pointer(Str)^, DataPtr^, Size);
Clipboard.SetAsHandle(CF_UNICODETEXT, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
end;


Отговор
в отговор на :) #11

Re: memo кирилица (@NDeu)

Не разбирам точно въпроса ти, изясни се по-точно. Предполагам добре си прочел темата, посочена по-горе.
Ето и примерче.



Отговор
в отговор на NikB #12

Re: И какво толкова ценно има в това мемо?

Асъл
Сигурно е приложение за държавната администрация - да не скучаят

Отговор