memo кирилица
11 отговора
0 прегледа
memo кирилица
Здр., проблемът ми с делпхи 6 е такъв: имам memo поле вътре в него се визуализират кирилцки символи и всичко е коректно.При опит за копиране с мишката от мемо полето в notepad или word се получават йероглифи.При запис на memo-то във файл със savetofile, текста във файла е ок.
Re: memo кирилица
Когато се копира от мемото клавиатурата трябва да ти е на български. Всъщност ти копираш неуникод текст към уникод, при което се извършва прекодирането му от една кодова таблица към уникод. Кодовата таблица се определя от текущият ти keyboard layout, т.е. в твоя случай (предполагам) English, а трябва да ти е Bulgarian.
Re: memo кирилица
Да, оправи се. Но така е супер тъпо, да карам потребителя, който прави милион и едно копирания на ден всеки път да гледа как му е обърната клавиатурата.Може ли в програмния код да обръщам някак си автоматично това?
Re: memo кирилица
Така че, ми се наложи да запиша по една
LoadKeyboardLayout('00000402', KLF_ACTIVATE);
процедурка в onmousedown и on enter на полетата и едитите, от които ще копирам за да съм сигурен, че лайъта ми е BG.
По принцип е добре да се провери текущото му състояние, да се запише в буфер, да се промени преди копиране и да се върне обратно след копирането му, иначе потребителите на windows могат съвсем да побеснеят.
LoadKeyboardLayout('00000402', KLF_ACTIVATE);
процедурка в onmousedown и on enter на полетата и едитите, от които ще копирам за да съм сигурен, че лайъта ми е BG.
По принцип е добре да се провери текущото му състояние, да се запише в буфер, да се промени преди копиране и да се върне обратно след копирането му, иначе потребителите на windows могат съвсем да побеснеят.
Re: memo кирилица
Изтагли си Unicode контроли от
[линк]
Работят. Вършат работа и когато за Language for non-Unicode Programs не е избран Bulgarian
[линк]
Работят. Вършат работа и когато за Language for non-Unicode Programs не е избран Bulgarian
Re: memo кирилица
Уверявам те, че ако програмата, която позлвам тръгне да ми сменя keyboard layout-а ще побеснея много повече
Вместо да вършиш глупости или вземи да правиш unicode приложения (както ти препоръчаха вече) или си промени копирането, така че да записваш (и/или) unicode версия на текстовете от контролите. В противен случай ще трябва да се примириш, че твоето приложение ще се държи под Windows като всички останали non unicode приложения.
Вместо да вършиш глупости или вземи да правиш unicode приложения (както ти препоръчаха вече) или си промени копирането, така че да записваш (и/или) unicode версия на текстовете от контролите. В противен случай ще трябва да се примириш, че твоето приложение ще се държи под Windows като всички останали non unicode приложения.
Re: memo кирилица
Хаха, благодаря. Без твоята последна дума, само с постовете на другите нямаше да се справя
. Уж много знаеш, а последен се обаждаш за да повтаряш като папагал, след като останалите са изяснили нещата.
Еве, кой ти е шеф, да му искам и аз да ми плаща за дрънкане на празни приказки у губене на време, вместо работа?ьаьаьа
Еве, кой ти е шеф, да му искам и аз да ми плаща за дрънкане на празни приказки у губене на време, вместо работа?ьаьаьа
И какво толкова ценно има в това мемо?
И какво толкова ценно има в това мемо, че потребителя "един милион пъти" го копира?
И къде го слага след това?
Тая работа не може ли да се автоматизира?
И къде го слага след това?
Тая работа не може ли да се автоматизира?
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;
Re: memo кирилица (@NDeu)
Не разбирам точно въпроса ти, изясни се по-точно. Предполагам добре си прочел темата, посочена по-горе.
Ето и примерче.
Ето и примерче.
Re: И какво толкова ценно има в това мемо?
Асъл
Сигурно е приложение за държавната администрация - да не скучаят
Сигурно е приложение за държавната администрация - да не скучаят